public void benchmark_scanBatch2()

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("*************************************************");


    }