java.lang.Object
org.apache.jena.tdb1.index.bplustree.BPlusTree
All Implemented Interfaces:
Iterable<Record>, org.apache.jena.atlas.lib.Closeable, org.apache.jena.atlas.lib.Sync, Index, RangeIndex

public class BPlusTree extends Object implements Iterable<Record>, RangeIndex
B-Tree converted to B+Tree 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. Notes: Stores "records", which are a key and value (the value may be null). In this B+Tree implementation, the (key,value) pairs are held in RecordBuffer, which wrap 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. Notes: 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. Variations: In this impl, splitRoot leaves the root node in place. The root is always the same block.
  • Method Details

    • create

      public static BPlusTree create(BPlusTreeParams params, BlockMgr blkMgrNodes, BlockMgr blkMgrLeaves)
      Create the in-memory structures to correspond to the supplied block managers for the persistent storage. Initialize the persistent storage to the empty B+Tree if it does not exist. This is the normal way to create a B+Tree.
    • attach

      public static BPlusTree attach(BPlusTreeParams params, BlockMgr blkMgrNodes, BlockMgr blkMgrRecords)
      Create the in-memory structures to correspond to the supplied block managers for the persistent storage. Does not initialize the B+Tree - it assumes the block managers correspond to an existing B+Tree.
    • makeMem

      public static BPlusTree makeMem(int order, int minRecords, int keyLength, int valueLength)
      (Testing mainly) Make an in-memory B+Tree, with copy-in, copy-out block managers
    • makeMem

      public static BPlusTree makeMem(String name, int order, int minRecords, int keyLength, int valueLength)
      (Testing mainly) Make an in-memory B+Tree, with copy-in, copy-out block managers
    • addTracking

      public static BPlusTree addTracking(BPlusTree bpTree)
      Debugging
    • getParams

      public BPlusTreeParams getParams()
      Get the parameters describing this B+Tree
    • getNodeManager

      public BPTreeNodeMgr getNodeManager()
      Only use for careful manipulation of structures
    • getRecordsMgr

      public BPTreeRecordsMgr getRecordsMgr()
      Only use for careful manipulation of structures
    • getRecordFactory

      public RecordFactory getRecordFactory()
      Description copied from interface: Index
      Get the Record factory associated with this index
      Specified by:
      getRecordFactory in interface Index
    • find

      public Record find(Record record)
      Description copied from interface: Index
      Find one record - and return the record actually in the index (may have a value part)
      Specified by:
      find in interface Index
    • contains

      public boolean contains(Record record)
      Description copied from interface: Index
      Return whether the index contains the record or not.
      Specified by:
      contains in interface Index
    • minKey

      public Record minKey()
      Description copied from interface: RangeIndex
      Return the record containing the least key - may or may not have the associated value
      Specified by:
      minKey in interface RangeIndex
    • maxKey

      public Record maxKey()
      Description copied from interface: RangeIndex
      Return the record containing the greatest key - may or may not have the associated value
      Specified by:
      maxKey in interface RangeIndex
    • add

      public boolean add(Record record)
      Description copied from interface: Index
      Add a record - return true if an insertion was actually needed
      Specified by:
      add in interface Index
    • addAndReturnOld

      public Record addAndReturnOld(Record record)
      Add a record into the B+Tree
    • delete

      public boolean delete(Record record)
      Description copied from interface: Index
      Delete a record. Return true if a record was actually removed
      Specified by:
      delete in interface Index
    • deleteAndReturnOld

      public Record deleteAndReturnOld(Record record)
    • iterator

      public Iterator<Record> iterator()
      Description copied from interface: Index
      Iterate over the whole index
      Specified by:
      iterator in interface Index
      Specified by:
      iterator in interface Iterable<Record>
    • iterator

      public Iterator<Record> iterator(Record fromRec, Record toRec)
      Description copied from interface: RangeIndex
      Return records between min (inclusive) and max (exclusive), based on the record keys
      Specified by:
      iterator in interface RangeIndex
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: Index
      Answer whether the index is empty or not. May return false for unknown or meaningless
      Specified by:
      isEmpty in interface Index
    • clear

      public void clear()
      Description copied from interface: Index
      Clear the index
      Specified by:
      clear in interface Index
    • sync

      public void sync()
      Specified by:
      sync in interface org.apache.jena.atlas.lib.Sync
    • close

      public void close()
      Description copied from interface: Index
      Close the index - can not be used again through this object
      Specified by:
      close in interface org.apache.jena.atlas.lib.Closeable
      Specified by:
      close in interface Index
    • size

      public long size()
      Description copied from interface: Index
      Return size if known else return -1 : does not count the persistent storage
      Specified by:
      size in interface Index
    • check

      public void check()
      Description copied from interface: Index
      Perform checks on this index
      Specified by:
      check in interface Index
    • dump

      public void dump()
    • dump

      public void dump(org.apache.jena.atlas.io.IndentedWriter out)