gpt4 book ai didi

c - Berkeley DB 存储速度太慢

转载 作者:行者123 更新时间:2023-11-30 17:04:25 32 4
gpt4 key购买 nike

我正在使用 Berkeley DB 将数据持久存储在我的程序中。我在我的SSD上进行了测试,我的SSD写入速度为1.4Gb/s。我测试DB存储速度的程序如下(错误检查省略)。

const char* db_dir="./.db";
const char* db_name = "node_test_0";

void mk_path(char* dest,const char* prefix,const char* db_name){
memcpy(dest,prefix,strlen(prefix));
dest[strlen(prefix)] = '/';
memcpy(dest+strlen(prefix)+1,db_name,strlen(db_name));
dest[strlen(prefix)+strlen(db_name)+1] = '\0';
return;
}

int main() {
DB* b_db;
DB_ENV* dbenv;
int ret;
int flag = 0;
DBT key, data;
char* full_path = NULL;
if((ret = mkdir(db_dir,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) != 0){
if(errno != EEXIST){
}
}
full_path = (char*)malloc(strlen(db_dir) + strlen(db_name) + 2);
mk_path(full_path, db_dir, db_name);
if ((ret = db_env_create(&dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "Environment Created: %s", db_dir);
}
if ((ret = dbenv->open(dbenv, db_dir, DB_CREATE|DB_INIT_CDB|DB_INIT_MPOOL|DB_THREAD, 0)) != 0) {
}

if((ret = db_create(&b_db,dbenv,flag)) != 0){
}

if((ret = b_db->open(b_db, NULL, db_name, NULL, DB_BTREE, DB_THREAD|DB_CREATE,0)) != 0){

}

struct timeval start_time;
struct timeval end_time;
unsigned long e_usec;

memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "fruit";
key.size = sizeof("fruit");
data.data = "apple";
data.size = sizeof("apple");

gettimeofday(&start_time, NULL);
ret = b_db->put(b_db, NULL, &key, &data, 0);
gettimeofday(&end_time, NULL);
e_usec = ((end_time.tv_sec * 1000000) + end_time.tv_usec) - ((start_time.tv_sec * 1000000) + start_time.tv_usec);
printf("%lu\n", e_usec);

if (ret == 0)
printf("db: %s: key stored.\n", (char *)key.data);
else {
b_db->err(b_db, ret, "DB->put");
}

return 0;
}

结果约为 23 微秒。这比我预期的要慢得多。有人对此有想法吗?我该怎么做才能使我的持久存储像写入 SSD 一样快。

最佳答案

BerkeleyDB 在写入后执行 fsync 以确保磁盘上的数据得到保存。如果您愿意忍受可能发生灾难性数据丢失的后果(对于使用 BDB 的临时、非持久数据存储来说是可以接受的),您可以删除 fsync(2) vector (仅返回 0)

关于c - Berkeley DB 存储速度太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811324/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com