几天前我刚刚开始使用 Berkeley DB,所以我想看看在尽可能快地存储数据方面我是否遗漏了一些东西。
以下是有关数据的一些信息:
- 它有 512 字节块
- 块按顺序排列
- 块将按照 FIFO 顺序删除
- 如果我由于电源故障而丢失了一些数据,只要整个数据库没有损坏就可以
阅读了一堆文档后,似乎队列数据库正是我想要的。
然而,在尝试了一些测试代码之后,我最快的结果约为每秒 1MByte,只需循环使用 DB_APPEND 设置的 DB->put 即可。我还尝试过使用交易和批量看跌期权,但这两种方式都会大大减慢速度,所以我没有花太多时间追求它们。我正在将其插入在 Freescale i.MX35 开发板上的 NANDFlash 芯片上创建的新数据库中。
由于我们希望获得至少 2MBytes 每秒的写入速度,我想知道是否有一些我错过的东西可以提高我的速度,因为我知道我的硬件可以比这更快地写入。
尝试将其放入您的 DB_CONFIG 中:
set_flags DB_TXN_WRITE_NOSYNC
set_flags DB_TXN_NOSYNC
根据我的经验,这些可以大大提高写入性能。
DB_TXN_NOSYNC
如果设置,Berkeley DB 将不会在事务提交或准备时写入或同步刷新日志。这意味着事务表现出 ACI(原子性、一致性和隔离性)属性,但不表现出 D(持久性)属性;也就是说,将保持数据库完整性,但如果应用程序或系统出现故障,则可能会在恢复期间撤消某些最近提交的事务。面临风险的事务数量取决于日志缓冲区可以容纳的日志更新数量、操作系统将脏缓冲区刷新到磁盘的频率以及日志设置检查点的频率
使用 DB_TXN_NOSYNC 标志调用 DB_ENV->set_flags 仅影响指定的 DB_ENV 句柄(以及在该句柄范围内打开的任何其他 Berkeley DB 句柄)。为了在整个环境中保持一致的行为,在环境中打开的所有 DB_ENV 句柄必须设置 DB_TXN_NOSYNC 标志,或者应在 DB_CONFIG 配置文件中指定该标志。
DB_TXN_NOSYNC 标志可用于在应用程序生命周期内的任何时间配置 Berkeley DB。
DB_TXN_WRITE_NOSYNC
如果设置,Berkeley DB 将在事务提交或准备时写入日志,但不会同步刷新。这意味着事务表现出 ACI(原子性、一致性和隔离性)属性,但不表现出 D(持久性)属性;也就是说,将保持数据库完整性,但如果系统发生故障,则在恢复期间可能会撤消某些最近提交的事务。面临风险的事务数量取决于系统将脏缓冲区刷新到磁盘的频率以及日志检查点的频率。
使用 DB_TXN_WRITE_NOSYNC 标志调用 DB_ENV->set_flags 仅影响指定的 DB_ENV 句柄(以及在该句柄范围内打开的任何其他 Berkeley DB 句柄)。为了在整个环境中保持一致的行为,在环境中打开的所有 DB_ENV 句柄必须设置 DB_TXN_WRITE_NOSYNC 标志,或者应在 DB_CONFIG 配置文件中指定该标志。
DB_TXN_WRITE_NOSYNC 标志可用于在应用程序生命周期内的任何时间配置 Berkeley DB。
See http://www.mathematik.uni-ulm.de/help/BerkeleyDB/api_c/env_set_flags.html更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)