@Override public ITupleReference getValue(TxnId txnId, ITupleReference tuple) throws AlgebricksException, HyracksDataException { int numBytes = tupleWriter.bytesRequired(tuple); tupleBytes = new byte[numBytes]; tupleWriter.writeTuple(tuple, tupleBytes, 0); buf = ByteBuffer.wrap(tupleBytes); tupleReference.resetByTupleOffset(buf.array(), 0); return tupleReference; } }
public TupleCopyValueExtractor(ITypeTraits[] typeTraits) { this.tupleWriter = new TypeAwareTupleWriter(typeTraits); this.tupleReference = tupleWriter.createTupleReference(); }
@Override public int bytesRequired(ITupleReference tuple, int startField, int numFields) { int bytes = getNullFlagsBytes(numFields) + getFieldSlotsBytes(tuple, startField, numFields); for (int i = startField; i < startField + numFields; i++) { bytes += tuple.getFieldLength(i); } return bytes; }
@Override public int writeTuple(ITupleReference tuple, ByteBuffer targetBuf, int targetOff) { return writeTuple(tuple, targetBuf.array(), targetOff); }
public SkipListThread(DataGenThread dataGen, ConcurrentSkipListSet<ITupleReference> skipList, int numBatches, int batchSize) { this.dataGen = dataGen; this.numBatches = numBatches; this.skipList = skipList; tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); tupleWriter = tupleWriterFactory.createTupleWriter(); int numTuples = numBatches * batchSize; tuples = new TypeAwareTupleReference[numTuples]; tupleBuf = ByteBuffer.allocate(numTuples * tupleSize); for (int i = 0; i < numTuples; i++) { tuples[i] = tupleWriter.createTupleReference(); } }
@Override public int getCopySpaceRequired(ITupleReference tuple) { return bytesRequired(tuple); } }
@Override public TypeAwareTupleWriter createTupleWriter() { return new TypeAwareTupleWriter(typeTraits); }
@Override public int writeTupleFields(ITupleReference tuple, int startField, int numFields, byte[] targetBuf, int targetOff) { int runner = targetOff; int nullFlagsBytes = getNullFlagsBytes(numFields); // write null indicator bits for (int i = 0; i < nullFlagsBytes; i++) { targetBuf[runner++] = (byte) 0; } // write field slots for variable length fields for (int i = startField; i < startField + numFields; i++) { if (!typeTraits[i].isFixedLength()) { runner += VarLenIntEncoderDecoder.encode(tuple.getFieldLength(i), targetBuf, runner); } } for (int i = startField; i < startField + numFields; i++) { System.arraycopy(tuple.getFieldData(i), tuple.getFieldStart(i), targetBuf, runner, tuple.getFieldLength(i)); runner += tuple.getFieldLength(i); } return runner - targetOff; }
@Override public long runExperiment(DataGenThread dataGen, int numThreads) throws InterruptedException { // Wait until the tupleBatchQueue is completely full. while (dataGen.tupleBatchQueue.remainingCapacity() != 0) { Thread.sleep(10); } long start = System.currentTimeMillis(); int tupleIndex = 0; for (int i = 0; i < numBatches; i++) { TupleBatch batch = dataGen.tupleBatchQueue.take(); for (int j = 0; j < batch.size(); j++) { // Copy the tuple to the buffer and set the pre-created tuple ref. tupleWriter.writeTuple(batch.get(j), tupleBuf.array(), tupleIndex * tupleSize); tuples.get(tupleIndex).resetByTupleOffset(tupleBuf.array(), tupleIndex * tupleSize); tupleIndex++; } } // Perform the sort. Collections.sort(tuples, tupleCmp); long end = System.currentTimeMillis(); long time = end - start; return time; }
public SkipListThread(DataGenThread dataGen, ConcurrentSkipListSet<ITupleReference> skipList, int numBatches, int batchSize) { this.dataGen = dataGen; this.numBatches = numBatches; this.skipList = skipList; tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); tupleWriter = tupleWriterFactory.createTupleWriter(); int numTuples = numBatches * batchSize; tuples = new TypeAwareTupleReference[numTuples]; tupleBuf = ByteBuffer.allocate(numTuples * tupleSize); for (int i = 0; i < numTuples; i++) { tuples[i] = tupleWriter.createTupleReference(); } }
@Override public int writeTuple(ITupleReference tuple, byte[] targetBuf, int targetOff) { int runner = targetOff; int nullFlagsBytes = getNullFlagsBytes(tuple); // write null indicator bits for (int i = 0; i < nullFlagsBytes; i++) { targetBuf[runner++] = (byte) 0; } // write field slots for variable length fields for (int i = 0; i < tuple.getFieldCount(); i++) { if (!typeTraits[i].isFixedLength()) { runner += VarLenIntEncoderDecoder.encode(tuple.getFieldLength(i), targetBuf, runner); } } // write data fields for (int i = 0; i < tuple.getFieldCount(); i++) { System.arraycopy(tuple.getFieldData(i), tuple.getFieldStart(i), targetBuf, runner, tuple.getFieldLength(i)); runner += tuple.getFieldLength(i); } return runner - targetOff; }
@Override public void run() { int tupleIndex = 0; try { for (int i = 0; i < numBatches; i++) { TupleBatch batch = dataGen.tupleBatchQueue.take(); for (int j = 0; j < batch.size(); j++) { // Copy the tuple to the buffer and set the pre-created tuple ref. tupleWriter.writeTuple(batch.get(j), tupleBuf.array(), tupleIndex * tupleSize); tuples[tupleIndex].resetByTupleOffset(tupleBuf.array(), tupleIndex * tupleSize); skipList.add(tuples[tupleIndex]); tupleIndex++; } } } catch (Exception e) { System.out.println(tupleIndex); e.printStackTrace(); } } }
public InMemorySortRunner(int numBatches, int batchSize, int tupleSize, ITypeTraits[] typeTraits, MultiComparator cmp) { this.numBatches = numBatches; this.tupleSize = tupleSize; this.batchSize = batchSize; this.typeTraits = typeTraits; tupleCmp = new TupleComparator(cmp); tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); tupleWriter = tupleWriterFactory.createTupleWriter(); int numTuples = numBatches * batchSize; tuples = new ArrayList<TypeAwareTupleReference>(); tupleBuf = ByteBuffer.allocate(numTuples * tupleSize); for (int i = 0; i < numTuples; i++) { tuples.add(tupleWriter.createTupleReference()); } }
@Override public int bytesRequired(ITupleReference tuple) { int bytes = getNullFlagsBytes(tuple) + getFieldSlotsBytes(tuple); for (int i = 0; i < tuple.getFieldCount(); i++) { bytes += tuple.getFieldLength(i); } return bytes; }
@Override public void run() { int tupleIndex = 0; try { for (int i = 0; i < numBatches; i++) { TupleBatch batch = dataGen.tupleBatchQueue.take(); for (int j = 0; j < batch.size(); j++) { // Copy the tuple to the buffer and set the pre-created tuple ref. tupleWriter.writeTuple(batch.get(j), tupleBuf.array(), tupleIndex * tupleSize); tuples[tupleIndex].resetByTupleOffset(tupleBuf.array(), tupleIndex * tupleSize); skipList.add(tuples[tupleIndex]); tupleIndex++; } } } catch (Exception e) { System.out.println(tupleIndex); e.printStackTrace(); } } }