/** Create the java 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. */ public static BPlusTree createNonTxn(BPlusTreeParams params, BufferChannel chan, BlockMgr blkMgrNodes, BlockMgr blkMgrLeaves) { // Allocate a random ComponentId BPlusTree bpt = create(null, params, chan, blkMgrNodes, blkMgrLeaves) ; bpt.nonTransactional() ; return bpt ; }
/** Create the java 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. */ public static BPlusTree createNonTxn(BPlusTreeParams params, BufferChannel chan, BlockMgr blkMgrNodes, BlockMgr blkMgrLeaves) { // Allocate a random ComponentId BPlusTree bpt = create(null, params, chan, blkMgrNodes, blkMgrLeaves) ; bpt.nonTransactional() ; return bpt ; }
/** Knowing all the parameters, create a B+Tree */ public static BPlusTree createBPTree(ComponentId cid, FileSet fileset, int order, int blockSize, int readCacheSize, int writeCacheSize, RecordFactory factory) { // ---- Checking if (blockSize < 0 && order < 0) throw new IllegalArgumentException("Neither blocksize nor order specified") ; if (blockSize >= 0 && order < 0) order = BPlusTreeParams.calcOrder(blockSize, factory.recordLength()) ; if (blockSize >= 0 && order >= 0) { int order2 = BPlusTreeParams.calcOrder(blockSize, factory.recordLength()) ; if (order != order2) throw new IllegalArgumentException("Wrong order (" + order + "), calculated = " + order2) ; } // Iffy - does not allow for slop. if (blockSize < 0 && order >= 0) { // Only in-memory. blockSize = BPlusTreeParams.calcBlockSize(order, factory) ; } BPlusTreeParams params = new BPlusTreeParams(order, factory) ; BufferChannel bptState = FileFactory.createBufferChannel(fileset, Names.extBptState) ; BlockMgr blkMgrNodes = BlockMgrFactory.create(fileset, Names.extBptTree, blockSize, readCacheSize, writeCacheSize) ; BlockMgr blkMgrRecords = BlockMgrFactory.create(fileset, Names.extBptRecords, blockSize, readCacheSize, writeCacheSize) ; return BPlusTreeFactory.create(cid, params, bptState, blkMgrNodes, blkMgrRecords) ; }
/** Knowing all the parameters, create a B+Tree */ public static BPlusTree createBPTree(ComponentId cid, FileSet fileset, int order, int blockSize, int readCacheSize, int writeCacheSize, RecordFactory factory) { // ---- Checking if (blockSize < 0 && order < 0) throw new IllegalArgumentException("Neither blocksize nor order specified") ; if (blockSize >= 0 && order < 0) order = BPlusTreeParams.calcOrder(blockSize, factory.recordLength()) ; if (blockSize >= 0 && order >= 0) { int order2 = BPlusTreeParams.calcOrder(blockSize, factory.recordLength()) ; if (order != order2) throw new IllegalArgumentException("Wrong order (" + order + "), calculated = " + order2) ; } // Iffy - does not allow for slop. if (blockSize < 0 && order >= 0) { // Only in-memory. blockSize = BPlusTreeParams.calcBlockSize(order, factory) ; } BPlusTreeParams params = new BPlusTreeParams(order, factory) ; BufferChannel bptState = FileFactory.createBufferChannel(fileset, Names.extBptState) ; BlockMgr blkMgrNodes = BlockMgrFactory.create(fileset, Names.extBptTree, blockSize, readCacheSize, writeCacheSize) ; BlockMgr blkMgrRecords = BlockMgrFactory.create(fileset, Names.extBptRecords, blockSize, readCacheSize, writeCacheSize) ; return BPlusTreeFactory.create(cid, params, bptState, blkMgrNodes, blkMgrRecords) ; }
/** (Testing mainly) Make an in-memory B+Tree, with copy-in, copy-out block managers */ public static BPlusTree makeMem(String name, int order, int minDataRecords, int keyLength, int valueLength) { if ( name == null ) name = "Mem" ; BPlusTreeParams params = new BPlusTreeParams(order, keyLength, valueLength) ; int blkSize ; if ( minDataRecords > 0 ) { int maxDataRecords = 2 * minDataRecords ; // int rSize = RecordBufferPage.HEADER+(maxRecords*params.getRecordLength()) ; blkSize = RecordBufferPage.calcBlockSize(params.getRecordFactory(), maxDataRecords) ; } else blkSize = params.getCalcBlockSize() ; // By FileSet BufferChannel chan = BufferChannelMem.create(name+"(root)") ; BlockMgr mgr1 = BlockMgrFactory.createMem(name + "(nodes)", params.getCalcBlockSize()) ; BlockMgr mgr2 = BlockMgrFactory.createMem(name + "(records)", blkSize) ; ComponentId cid = ComponentId.allocLocal() ; BPlusTree bpTree = BPlusTreeFactory.create(cid, params, chan, mgr1, mgr2) ; return bpTree ; }
/** (Testing mainly) Make an in-memory B+Tree, with copy-in, copy-out block managers */ public static BPlusTree makeMem(String name, int order, int minDataRecords, int keyLength, int valueLength) { if ( name == null ) name = "Mem" ; BPlusTreeParams params = new BPlusTreeParams(order, keyLength, valueLength) ; int blkSize ; if ( minDataRecords > 0 ) { int maxDataRecords = 2 * minDataRecords ; // int rSize = RecordBufferPage.HEADER+(maxRecords*params.getRecordLength()) ; blkSize = RecordBufferPage.calcBlockSize(params.getRecordFactory(), maxDataRecords) ; } else blkSize = params.getCalcBlockSize() ; // By FileSet BufferChannel chan = BufferChannelMem.create(name+"(root)") ; BlockMgr mgr1 = BlockMgrFactory.createMem(name + "(nodes)", params.getCalcBlockSize()) ; BlockMgr mgr2 = BlockMgrFactory.createMem(name + "(records)", blkSize) ; ComponentId cid = ComponentId.allocLocal() ; BPlusTree bpTree = BPlusTreeFactory.create(cid, params, chan, mgr1, mgr2) ; return bpTree ; }