Содержит ли kyotocabinet hashdb массив массивов в ОЗУ?

Я использую хеш-ки kyotocabinet для поиска по хэшам. Я поместил 10 миллионов полей в hashdb и искал 1000 случайных хешей в течение 78 миллисекунд. Через некоторое время я попробовал еще раз, и это заняло около 40 секунд. Я думал, что kyotodb загружает массив ведра в оперативную память, а затем ищет. После каждого поиска он остается все быстрее и быстрее, но все равно медленно ~ 5 сек. Также это не работает с 2 различными потоками.

Вот мой код на Java:

long a = System.currentTimeMillis();

DB db = new DB();
int cnt = 0;

// open the database
if (!db.open("m10.kch#bnum=10000000#msiz=1024000000", DB.OWRITER | DB.OCREATE)) {
    System.err.println("open error: " + db.error());
}

for (int j = 0; j < 10; j++) {
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 1000000; i++) {
        db.set(getRandomKey(cnt), getRandomVal());
        cnt++;
    }

    long te = System.currentTimeMillis();
    System.out.println("million added " + (j + 1) + " for " + (te - ts));
}

for (int i = 0; i < 1000; i++) {
    System.out.println(db.get(getRandomKey((long) (Math.random() * cnt))));
}

db.close();
long b = System.currentTimeMillis();
System.out.println("total = " + (b - a)); // here i take 78msec or 40sec or 5 sec

Что с этим не так? Или это нормальная скорость поиска на 10 миллионов? Я не вижу O(1).

0 ответов

Другие вопросы по тегам