in hugegraph-store/hg-store-test/src/main/java/org/apache/hugegraph/store/HgSessionManagerRaftPDTest.java [798:923]
public void benchmark_scanBatch2() throws IOException {
HgStoreTestUtil.println("--- Benchmark scanBatch2 ---");
//String tableName = TABLE_NAME;
HgStoreSession session = getStoreSession();
String keyName = "SCAN-BATCH";
int keyAmt = 3000;
Map<HgOwnerKey, byte[]> data =
HgStoreTestUtil.batchPut(session, HgStoreTestUtil.TABLE_NAME, keyName, keyAmt,
//(key) -> toOwnerKey(key.substring(0, keyName.length()
// + 2), key)
(key) -> HgStoreTestUtil.toOwnerKey(0, key)
);
HgStoreTestUtil.batchPut(session, HgStoreTestUtil.TABLE_NAME2, keyName, keyAmt,
//(key) -> toOwnerKey(key.substring(0, keyName.length() + 2), key)
(key) -> HgStoreTestUtil.toOwnerKey(0, key)
);
MetricX metrics = MetricX.ofStart();
long t = System.currentTimeMillis();
int count = 0;
String queryTable = null;
KvCloseableIterator<HgKvIterator<HgKvEntry>> iterators = null;
List<HgOwnerKey> queryKeys = null;
List<HgOwnerKey> keys = new ArrayList<>();
data.forEach((k, v) -> keys.add(k));
List<HgOwnerKey> prefixKeys = new ArrayList<>();
prefixKeys.add(HgStoreTestUtil.toOwnerKey(0, keyName + "-0"));
prefixKeys.add(HgStoreTestUtil.toOwnerKey(0, keyName + "-1"));
prefixKeys.add(HgStoreTestUtil.toOwnerKey(0, keyName + "-2"));
prefixKeys.add(HgStoreTestUtil.toOwnerKey(0, keyName + "-3"));
HgStoreTestUtil.println("-- test every key, one table --");
count = 0;
queryTable = HgStoreTestUtil.TABLE_NAME;
queryKeys = keys;
iterators = session.scanBatch2(
HgScanQuery.prefixIteratorOf(queryTable, queryKeys.iterator(),
ScanOrderType.ORDER_NONE)
.builder()
.setScanType(0x40)
.build());
while (iterators.hasNext()) {
HgKvIterator<HgKvEntry> iterator = iterators.next();
count += HgStoreTestUtil.amountOf(iterator);
}
iterators.close();
Assert.assertEquals(keyAmt, count);
log.info(" size is {}", count);
HgStoreTestUtil.println("-- test prefix key, one table --");
count = 0;
queryTable = HgStoreTestUtil.TABLE_NAME;
queryKeys = prefixKeys;
iterators = session.scanBatch2(
HgScanQuery.prefixIteratorOf(queryTable, queryKeys.iterator(),
ScanOrderType.ORDER_STRICT)
.builder()
.setScanType(0x40)
.build());
while (iterators.hasNext()) {
HgKvIterator<HgKvEntry> iterator = iterators.next();
count += HgStoreTestUtil.amountOf(iterator);
}
iterators.close();
Assert.assertEquals(keyAmt, count);
log.info(" size is {}", count);
HgStoreTestUtil.println("-- test prefix key, two table --");
count = 0;
queryTable = HgStoreTestUtil.TABLE_NAME + "," + HgStoreTestUtil.TABLE_NAME2;
queryKeys = prefixKeys;
iterators = session.scanBatch2(
HgScanQuery.prefixIteratorOf(queryTable, queryKeys.iterator(),
ScanOrderType.ORDER_NONE)
.builder()
.setScanType(0x40)
.build());
while (iterators.hasNext()) {
HgKvIterator<HgKvEntry> iterator = iterators.next();
count += HgStoreTestUtil.amountOf(iterator);
}
iterators.close();
Assert.assertEquals(keyAmt * 2, count);
log.info(" size is {}", count);
HgStoreTestUtil.println("-- test prefix key, two table, perKeyMax --");
count = 0;
queryTable = HgStoreTestUtil.TABLE_NAME + "," + HgStoreTestUtil.TABLE_NAME2;
queryKeys = prefixKeys;
queryKeys.remove(queryKeys.size() - 1);//remove the last one.
iterators = session.scanBatch2(
HgScanQuery.prefixIteratorOf(queryTable, queryKeys.iterator(),
ScanOrderType.ORDER_NONE)
.builder()
.setScanType(0x40)
.setPerKeyMax(10)
.build());
while (iterators.hasNext()) {
HgKvIterator<HgKvEntry> iterator = iterators.next();
count += HgStoreTestUtil.amountOf(iterator);
}
iterators.close();
Assert.assertEquals(queryKeys.size() * 10, count);
log.info(" size is {}", count);
keys.clear();
log.info("time is {}", System.currentTimeMillis() - t);
metrics.end();
log.info("*************************************************");
log.info("*********** Batch Scan Completed **************");
log.info("Total : {} (sec)", metrics.past() / 1000);
log.info(" Sum : {} (sec)", MetricX.getIteratorWait() / 1000);
log.info(" Amt : {} (scans).", MetricX.getIteratorCount());
log.info(" Avg : {} (ms)", MetricX.getIteratorWaitAvg());
log.info(" Max : {} (ms)", MetricX.getIteratorWaitMax());
log.info(" Fail : {} (times)", metrics.getFailureCount());
log.info(" Page : {} (KVs)", HgStoreClientConfig.of().getNetKvScannerPageSize());
log.info(" size is {}", count);
log.info("*************************************************");
}