Performance 如何使用Berkeley Db事务而不记录/写入_Db.00x文件?

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

我正在开发一个使用Berkeley Db的应用程序。它必须符合ACI(但不符合ACID),性能非常重要。更重要的是,性能是我选择伯克利Db的原因。但是现在伯克利数据库似乎因为日志记录而成为了一个瓶颈。问题是数据库中存储的数据越多,存储的值就越长。 我做

然后用以下标志打开环境:

    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