我使用kyotocabinet hashdb 进行哈希搜索。我已将 1000 万个字段放入 hashdb,并在 78 毫秒内搜索了 1000 个随机散列。过了一段时间我又试了一次,大约花了 40 秒。我认为kyotodb将数组存储桶加载到RAM然后搜索。每次搜索后,它会越来越快,但仍然很慢~ 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
它有什么问题?还是1000万搜索的正常速度?我没有看到 O(1)。