@Override public String getMapping() { return index.getMapping() ; }
public static void dumpTupleIndex(TupleIndex tIdx) { System.out.print("## "+tIdx.getMapping()+"\n") ; Iterator<Tuple<NodeId>> iter = tIdx.all() ; for ( ; iter.hasNext() ; ) { Tuple<NodeId> t = iter.next() ; System.out.print(t) ; System.out.print("\n") ; } }
/** Set index - for code that manipulates internal structures directly - use with care */ public void setTupleIndex(int i, TupleIndex index) { if ( index != null && index.getTupleLength() != tupleLen ) throw new TDBException("Incompatible index: "+index.getMapping()) ; indexes[i] = index ; }
public NodeTupleTableConcrete(int N, TupleIndex[] indexes, NodeTable nodeTable, DatasetControl dsControl) { if (indexes.length == 0 || indexes[0] == null) throw new TDBException("A primary index is required") ; for (TupleIndex index : indexes) { if (N != index.getTupleLength()) throw new TDBException(format("Inconsistent: TupleTable width is %d but index %s is %d", N, index.getMapping(), index.getTupleLength())) ; } this.dsPolicy = dsControl ; this.tupleTable = new TupleTable(N, indexes) ; this.nodeTable = nodeTable ; }
@Override public void createSecondaryIndexes(TupleIndex primaryIndex , TupleIndex[] secondaryIndexes) { monitor.print("** Parallel index building") ; Timer timer = new Timer() ; timer.startTimer() ; int semaCount = 0 ; Semaphore sema = new Semaphore(0) ; for ( TupleIndex index : secondaryIndexes ) { if ( index != null ) { Runnable builder = setup(sema, primaryIndex, index, index.getMapping()) ; new Thread(builder).start() ; semaCount++ ; } } try { sema.acquire(semaCount) ; } catch (InterruptedException ex) { ex.printStackTrace(); } long time = timer.readTimer() ; timer.endTimer() ; monitor.print("Time for parallel indexing: %.2fs\n", time/1000.0) ; }
public TupleTable(int tupleLen, TupleIndex[] indexes) { this.tupleLen = tupleLen ; this.indexes = indexes ; if ( indexes[0] == null ) throw new TDBException("TupleTable: no primary index") ; for ( TupleIndex index : indexes ) { if ( index != null && index.getTupleLength() != tupleLen ) throw new TDBException("Incompatible index: "+index.getMapping()) ; } scanAllIndex = chooseScanAllIndex(tupleLen, indexes) ; }
/** Insert a tuple - return true if it was really added, false if it was a duplicate */ public boolean add(Tuple<NodeId> t) { if ( tupleLen != t.len() ) throw new TDBException(format("Mismatch: inserting tuple of length %d into a table of tuples of length %d", t.len(), tupleLen)) ; for ( int i = 0 ; i < indexes.length ; i++ ) { if ( indexes[i] == null ) continue ; if ( ! indexes[i].add(t) ) { if ( i == 0 ) { duplicate(t) ; return false ; } unexpectedDuplicate(t, i) ; throw new TDBException(format("Secondary index duplicate: %s -> %s",indexes[i].getMapping(), t)) ; } syncNeeded = true ; } return true ; }
@Override public void createSecondaryIndexes(TupleIndex primaryIndex , TupleIndex[] secondaryIndexes) { Timer timer = new Timer() ; timer.startTimer() ; for ( TupleIndex index : secondaryIndexes ) { if ( index != null ) { long time1 = timer.readTimer() ; LoaderNodeTupleTable.copyIndex(primaryIndex.all(), new TupleIndex[]{index}, index.getMapping(), monitor) ; long time2 = timer.readTimer() ; // if ( printTiming ) // printf("Time for %s indexing: %.2fs\n", index.getLabel(), (time2-time1)/1000.0) ; // if ( printTiming ) // printer.println() ; } } } }