【发布时间】:2010-05-27 09:17:51
【问题描述】:
我正在尝试使用 berkeley db 构建一个哈希,其中应包含许多元组(大约 18GB 的键值对),但在我的所有测试中,插入操作的性能会随着时间的推移而急剧下降。我写了这个脚本来测试性能:
#include<iostream>
#include<db_cxx.h>
#include<ctime>
#define MILLION 1000000
int main () {
long long a = 0;
long long b = 0;
int passes = 0;
int i = 0;
u_int32_t flags = DB_CREATE;
Db* dbp = new Db(NULL,0);
dbp->set_cachesize( 0, 1024 * 1024 * 1024, 1 );
int ret = dbp->open(
NULL,
"test.db",
NULL,
DB_HASH,
flags,
0);
time_t time1 = time(NULL);
while ( passes < 100 ) {
while( i < MILLION ) {
Dbt key( &a, sizeof(long long) );
Dbt data( &b, sizeof(long long) );
dbp->put( NULL, &key, &data, 0);
a++; b++; i++;
}
DbEnv* dbep = dbp->get_env();
int tmp;
dbep->memp_trickle( 50, &tmp );
i=0;
passes++;
std::cout << "Inserted one million --> pass: " << passes << " took: " << time(NULL) - time1 << "sec" << std::endl;
time1 = time(NULL);
}
}
也许你可以告诉我为什么一段时间后“放置”操作花费的时间越来越长,也许如何解决这个问题。
感谢您的帮助, 安德烈亚斯
【问题讨论】:
-
你为什么使用Java风格?为什么不只是
Db dbp(NULL, 0)? -
无特殊原因。无论如何,在这种情况下都没有关系。
标签: c++ berkeley-db