我使用kyotocabinet hashdb进行哈希搜索。我已将1000万字段放入hashdb并搜索1000个随机哈希值78毫秒。过了一段时间我又试了一次,花了大约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)。