Performance 如何使用Berkeley Db事务而不记录/写入_Db.00x文件?
我正在开发一个使用Berkeley Db的应用程序。它必须符合ACI(但不符合ACID),性能非常重要。更重要的是,性能是我选择伯克利Db的原因。但是现在伯克利数据库似乎因为日志记录而成为了一个瓶颈。问题是数据库中存储的数据越多,存储的值就越长。 我做 然后用以下标志打开环境:Performance 如何使用Berkeley Db事务而不记录/写入_Db.00x文件?,performance,logging,transactions,berkeley-db,Performance,Logging,Transactions,Berkeley Db,我正在开发一个使用Berkeley Db的应用程序。它必须符合ACI(但不符合ACID),性能非常重要。更重要的是,性能是我选择伯克利Db的原因。但是现在伯克利数据库似乎因为日志记录而成为了一个瓶颈。问题是数据库中存储的数据越多,存储的值就越长。 我做 然后用以下标志打开环境: DB_CREATE | // Create the environment if it does not exist DB_INIT_TXN | // Initialize the tra
DB_CREATE | // Create the environment if it does not exist
DB_INIT_TXN | // Initialize the transactional subsystem.
DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache)
DB_INIT_LOCK | // Initialize the locking subsystem
DB_THREAD;
但它仍在记录到磁盘,性能变得非常差,随着数据量的增加和存储的值变得越来越长,我想,大部分时间都花在将它们保存到日志文件中——平均负载是
load average: 19.65, 19.12, 17.00
我不需要在运行时同步任何日志——我只需要ACI,不需要ACID
有没有办法关闭日志记录或禁止将日志写入磁盘
编辑:由于没有人回答,我在谷歌上搜索了很多,找到了一个关闭日志记录的方法,但是,不幸的是,它没有帮助——环境仍然会向u db.00x文件写入很多内容,我不知道为什么以及如何在内存中进行此操作。您尝试过配置内存中的日志记录吗?请参考你提到的文件 envp->set_标志(envp,内存中的DB_日志,1) 禁用fsync(2)是提高性能的一种方法 编写一个存根例程,返回0并设置fsync向量 打开伯克利数据库时
load average: 19.65, 19.12, 17.00