Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 伯克利变得又胖又慢_C_Database_Berkeley Db - Fatal编程技术网

C 伯克利变得又胖又慢

C 伯克利变得又胖又慢,c,database,berkeley-db,C,Database,Berkeley Db,我试图以每秒50k的插入速度向BerkeleyDB中添加3e9键(具有低重复性),复合记录由具有两个整数的结构组成。每个键的长度为30。我使用的是C API 看起来我必须将缓存大小增加到2GB,否则在数据库上的插入会在一段时间后变得非常缓慢。然而,它总是在RAM上消耗超过2GB的内存 我不使用事务或游标,而是使用DB_散列 如何确保我不会消耗如此多的RAM,也不会变得太慢?BerekelyDB尊重RAM使用的用户设置,并将使用允许/配置的尽可能多的RAM。 如果希望使用较少的RAM,请配置较低的

我试图以每秒50k的插入速度向BerkeleyDB中添加3e9键(具有低重复性),复合记录由具有两个整数的结构组成。每个键的长度为30。我使用的是C API

看起来我必须将缓存大小增加到2GB,否则在数据库上的插入会在一段时间后变得非常缓慢。然而,它总是在RAM上消耗超过2GB的内存

我不使用事务或游标,而是使用DB_散列


如何确保我不会消耗如此多的RAM,也不会变得太慢?

BerekelyDB尊重RAM使用的用户设置,并将使用允许/配置的尽可能多的RAM。 如果希望使用较少的RAM,请配置较低的值

同时,创建/插入时的S-L-O-W可能是由于BerkeleyDB进行fsync(2)调用,以确保在db->put之后新数据在磁盘上

您可以通过使用noop例程重写fsync(2)向量来加速BerkeleyDB (即,仅返回成功,但不执行任何操作)当您创建数据库时
根本不在乎数据是否已刷新到磁盘。

30亿个密钥?!以每秒50k的速度,插入几乎需要17个小时。如果使用wich OS中的固态驱动器(SSD),性能会有很大提高?如果您使用的是unix,您可以查看noatime@DavidRF。如果我使用SSD,我将以每秒50k的速度向DB写入数据,但这并不重要,因为我的应用程序生成数据的速度不是很快。@MattBall是的,这不是一个快速任务=P