java.lang.Object
org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle<org.apache.jena.dboe.trans.bplustree.BptTxnState>
org.apache.jena.dboe.trans.bplustree.BPlusTree
- All Implemented Interfaces:
Iterable<org.apache.jena.dboe.base.record.Record>,org.apache.jena.atlas.lib.Closeable,org.apache.jena.atlas.lib.Sync,org.apache.jena.dboe.index.Index,org.apache.jena.dboe.index.RangeIndex,org.apache.jena.dboe.transaction.txn.TransactionalComponent
public class BPlusTree
extends org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle<org.apache.jena.dboe.trans.bplustree.BptTxnState>
implements org.apache.jena.dboe.index.RangeIndex
B-Tree taken from:
Introduction to Algorithms, Second Edition
Chapter 18: B-Trees
by Thomas H. Cormen, Charles E. Leiserson,
Ronald L. Rivest and Clifford Stein
Includes implementation of removal
then the B-Tree code converted to a B+Tree,
then made MVCC/transactional.
Notes:
- Stores "records", which are a key and value (the value may be absent).
- In this B+Tree implementation, the (key,value) pairs are held in RecordBuffer, which wraps a ByteBuffer that only has records in it. BPTreeRecords provides the B+Tree view of a RecordBuffer. All records are in RecordBuffer - the "tree" part is an index for finding the right page. The tree only holds keys, copies from the (key, value) pairs in the RecordBuffers.
- The version above splits nodes on the way down when full, not when needed where a split can bubble up from below. It means it only ever walks down the tree on insert. Similarly, the delete code ensures a node is suitable before descending.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle
org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle.ComponentState<X extends Object> -
Method Summary
Modifier and TypeMethodDescriptionvoidcheck()voidvoidclear()voidclose()booleancontains(org.apache.jena.dboe.base.record.Record record) booleandelete(org.apache.jena.dboe.base.record.Record record) org.apache.jena.dboe.base.record.RecorddeleteAndReturnOld(org.apache.jena.dboe.base.record.Record record) Iterator<org.apache.jena.dboe.base.record.Record>distinctByKeyPrefix(int keyPrefixLength) voiddump()voiddump(org.apache.jena.atlas.io.IndentedWriter out) org.apache.jena.dboe.base.record.Recordfind(org.apache.jena.dboe.base.record.Record record) voidOnly use for careful manipulation of structuresGet the parameters describing this B+Treeorg.apache.jena.dboe.base.record.RecordFactoryOnly use for careful manipulation of structuresintOnly use for careful manipulation of structuresbooleaninsert(org.apache.jena.dboe.base.record.Record record) org.apache.jena.dboe.base.record.RecordinsertAndReturnOld(org.apache.jena.dboe.base.record.Record record) Add a record into the B+TreebooleanisEmpty()Iterator<org.apache.jena.dboe.base.record.Record>iterator()Iterator<org.apache.jena.dboe.base.record.Record>iterator(org.apache.jena.dboe.base.record.Record fromRec, org.apache.jena.dboe.base.record.Record toRec) <X> Iterator<X>iterator(org.apache.jena.dboe.base.record.Record minRec, org.apache.jena.dboe.base.record.Record maxRec, org.apache.jena.dboe.base.record.RecordMapper<X> mapper) org.apache.jena.dboe.base.record.RecordmaxKey()org.apache.jena.dboe.base.record.RecordminKey()voidnewRoot(BPTreeNode newRoot) voidvoidrecover(ByteBuffer ref) longsize()voidvoidsync()Methods inherited from class org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle
abort, attach, begin, commit, commitEnd, commitPrepare, complete, detach, getComponentId, getComponentState, promote, setComponentState, shutdownMethods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Method Details
-
newRoot
-
getRootId
public int getRootId() -
getParams
Get the parameters describing this B+Tree -
getStateManager
Only use for careful manipulation of structures -
getNodeManager
Only use for careful manipulation of structures -
getRecordsMgr
Only use for careful manipulation of structures -
getRecordFactory
public org.apache.jena.dboe.base.record.RecordFactory getRecordFactory()- Specified by:
getRecordFactoryin interfaceorg.apache.jena.dboe.index.Index
-
find
public org.apache.jena.dboe.base.record.Record find(org.apache.jena.dboe.base.record.Record record) - Specified by:
findin interfaceorg.apache.jena.dboe.index.Index
-
contains
public boolean contains(org.apache.jena.dboe.base.record.Record record) - Specified by:
containsin interfaceorg.apache.jena.dboe.index.Index
-
minKey
public org.apache.jena.dboe.base.record.Record minKey()- Specified by:
minKeyin interfaceorg.apache.jena.dboe.index.RangeIndex
-
maxKey
public org.apache.jena.dboe.base.record.Record maxKey()- Specified by:
maxKeyin interfaceorg.apache.jena.dboe.index.RangeIndex
-
insert
public boolean insert(org.apache.jena.dboe.base.record.Record record) - Specified by:
insertin interfaceorg.apache.jena.dboe.index.Index
-
insertAndReturnOld
public org.apache.jena.dboe.base.record.Record insertAndReturnOld(org.apache.jena.dboe.base.record.Record record) Add a record into the B+Tree -
delete
public boolean delete(org.apache.jena.dboe.base.record.Record record) - Specified by:
deletein interfaceorg.apache.jena.dboe.index.Index
-
deleteAndReturnOld
public org.apache.jena.dboe.base.record.Record deleteAndReturnOld(org.apache.jena.dboe.base.record.Record record) -
iterator
-
iterator
public Iterator<org.apache.jena.dboe.base.record.Record> iterator(org.apache.jena.dboe.base.record.Record fromRec, org.apache.jena.dboe.base.record.Record toRec) - Specified by:
iteratorin interfaceorg.apache.jena.dboe.index.RangeIndex
-
distinctByKeyPrefix
-
iterator
public <X> Iterator<X> iterator(org.apache.jena.dboe.base.record.Record minRec, org.apache.jena.dboe.base.record.Record maxRec, org.apache.jena.dboe.base.record.RecordMapper<X> mapper) - Specified by:
iteratorin interfaceorg.apache.jena.dboe.index.RangeIndex
-
isEmpty
public boolean isEmpty()- Specified by:
isEmptyin interfaceorg.apache.jena.dboe.index.Index
-
clear
public void clear()- Specified by:
clearin interfaceorg.apache.jena.dboe.index.Index
-
sync
public void sync()- Specified by:
syncin interfaceorg.apache.jena.atlas.lib.Sync
-
close
public void close()- Specified by:
closein interfaceorg.apache.jena.atlas.lib.Closeable- Specified by:
closein interfaceorg.apache.jena.dboe.index.Index
-
size
public long size()- Specified by:
sizein interfaceorg.apache.jena.dboe.index.Index
-
check
public void check()- Specified by:
checkin interfaceorg.apache.jena.dboe.index.Index
-
dump
public void dump() -
dump
public void dump(org.apache.jena.atlas.io.IndentedWriter out) -
nonTransactional
public void nonTransactional() -
startRecovery
public void startRecovery()- Specified by:
startRecoveryin interfaceorg.apache.jena.dboe.transaction.txn.TransactionalComponent- Specified by:
startRecoveryin classorg.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle<org.apache.jena.dboe.trans.bplustree.BptTxnState>
-
recover
- Specified by:
recoverin interfaceorg.apache.jena.dboe.transaction.txn.TransactionalComponent- Specified by:
recoverin classorg.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle<org.apache.jena.dboe.trans.bplustree.BptTxnState>
-
finishRecovery
public void finishRecovery()- Specified by:
finishRecoveryin interfaceorg.apache.jena.dboe.transaction.txn.TransactionalComponent- Specified by:
finishRecoveryin classorg.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle<org.apache.jena.dboe.trans.bplustree.BptTxnState>
-
cleanStart
public void cleanStart()- Specified by:
cleanStartin interfaceorg.apache.jena.dboe.transaction.txn.TransactionalComponent
-