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