几天前我刚开始玩Berkeley DB所以我试图看看在尽可能快地存储数据时是否有一些我一直缺失的东西.
以下是有关数据的一些信息: - 它有512个字节的块 - 块按顺序排列 - 块将按FIFO顺序删除 - 如果我因为电源故障而丢失一些数据,只要整个数据库不是'破了
在阅读了一堆文档之后,看起来像Queue db正是我想要的.
但是,在尝试了一些测试代码后,我的最快结果大约是每秒1MByte,只需循环通过DB-> put with DB_APPEND set.我也尝试过使用交易和批量看跌期权,但这些都放慢了速度,所以我没有追求它们很长时间.我插入了在我的飞思卡尔i.MX35开发板上的NANDFlash芯片上创建的新数据库.
由于我们希望每秒至少获得2MB的写入速度,我想知道是否有一些我错过的可以提高速度的东西,因为我知道我的硬件可以写得比这更快.
小智 8
尝试将其放入DB_CONFIG:
set_flags DB_TXN_WRITE_NOSYNC
set_flags DB_TXN_NOSYNC
Run Code Online (Sandbox Code Playgroud)
根据我的经验,这些可以提高写入性能.
DB_TXN_NOSYNC
如果设置,Berkeley DB将不会写入或同步刷新事务提交或准备日志.这意味着事务表现出ACI(原子性,一致性和隔离性)属性,但不表现出D(持久性); 也就是说,将维护数据库完整性,但如果应用程序或系统出现故障,则可能在恢复期间撤消一些最近提交的事务.受风险的事务数量取决于日志缓冲区可以容纳多少日志更新,操作系统将脏缓冲区刷新到磁盘的频率以及检查点日志的频率调用带有DB_TXN_NOSYNC标志的DB_ENV-> set_flags只会影响指定的DB_ENV句柄(以及在该句柄范围内打开的任何其他Berkeley DB句柄).为了保持整个环境的一致行为,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_TXN_WRITE_NOSYNC标志可用于在应用程序生命周期的任何时间配置Berkeley DB.
有关详细信息,请参阅http://www.mathematik.uni-ulm.de/help/BerkeleyDB/api_c/env_set_flags.html.
归档时间: |
|
查看次数: |
4664 次 |
最近记录: |