优化 Berkeley DB 中的 Put 性能

2023-11-22

几天前我刚刚开始使用 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_EN​​V->set_flags 仅影响指定的 DB_EN​​V 句柄(以及在该句柄范围内打开的任何其他 Berkeley DB 句柄)。为了在整个环境中保持一致的行为,在环境中打开的所有 DB_EN​​V 句柄必须设置 DB_TXN_NOSYNC 标志,或者应在 DB_CONFIG 配置文件中指定该标志。

DB_TXN_NOSYNC 标志可用于在应用程序生命周期内的任何时间配置 Berkeley DB。


DB_TXN_WRITE_NOSYNC如果设置,Berkeley DB 将在事务提交或准备时写入日志,但不会同步刷新。这意味着事务表现出 ACI(原子性、一致性和隔离性)属性,但不表现出 D(持久性)属性;也就是说,将保持数据库完整性,但如果系统发生故障,则在恢复期间可能会撤消某些最近提交的事务。面临风险的事务数量取决于系统将脏缓冲区刷新到磁盘的频率以及日志检查点的频率。 使用 DB_TXN_WRITE_NOSYNC 标志调用 DB_EN​​V->set_flags 仅影响指定的 DB_EN​​V 句柄(以及在该句柄范围内打开的任何其他 Berkeley DB 句柄)。为了在整个环境中保持一致的行为,在环境中打开的所有 DB_EN​​V 句柄必须设置 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(使用前将#替换为@)

优化 Berkeley DB 中的 Put 性能 的相关文章

  • 如何反转包含代理对的字符串

    我写了这个方法来反转字符串 public string Reverse string s if string IsNullOrEmpty s return s TextElementEnumerator enumerator StringI
  • 在 Ruby 中提取字符串中的所有 url

    我有一些文本内容 其中包含 URL 列表 我正在尝试抓取所有 URL 并将它们放入一个数组中 我有这个代码 content Here is the list of URLs http www google com http www goog
  • 将 Unix 时间戳转换为无时区时间戳

    如何将 Unix 时间戳 或纪元时间 转换为 PostgreSQLtimestamp without time zone 例如 1481294792应该转换为2016 12 09 14 46 32 I tried SELECT to tim
  • Ruby:比较级之间有什么区别:“||”和“或”[重复]

    这个问题在这里已经有答案了 可能的重复 Ruby 之间的区别和 或 使用红宝石 and or 是非常常见的做法 因此了解两者之间的区别很重要 因为不幸的是我不确定 首先我的问题是以下假设是否正确 EX1 if variable 1 vari
  • 返回值 javascript UIWebView

    我正在尝试获取 javascript 函数的返回值 例如 return hello 与 iPhone SDK 在 OS X 上的 WebView 方法 stringByEvaluatingJavaScriptFromString返回一个包含
  • Swagger UI 显示驼峰命名法参数而不是 PascalCase

    我在 Asp Net Core 3 1 API 中使用 NewtonSoft json 和 Swashbuckle AspNetCore 版本 5 3 3 默认情况下 在 Asp Net Web API 中 2 个输入和输出参数的大小写为
  • 在 C 中为 Fortran 数组分配内存

    我是 Fortran 编程新手 我有一个 3 维数组 声明如下 REAL 4 DIMENSION ALLOCATABLE a1 我想通过引用 C 或 C 函数来传递数组 并在 C 中而不是在 Fortran 中分配内存 是否有可能或者我对

随机推荐

  • Dart 中的 Object 语法意味着什么?

    在下面的代码示例中 从颤振文档 class RandomWords extends StatefulWidget override createState gt RandomWordsState class RandomWordsState
  • 在 WPF 中显示 RichTextBox 中的行号

    我找到了一个例子 如何显示行号RichTextBox在 Windows 窗体中 http www codeproject com Articles 38858 Line Numbers for RichText Control in C 有
  • R Shiny 中的环境

    At http shiny rstudio com articles scoping html闪亮范围的规则得到了很好的解释 有 3 个相互嵌套的环境或级别 函数内 会话内和所有会话内可用的对象 使用 如果我在会话中定义变量但想在函数中更改
  • 登录后重新加载 AntiForgeryToken

    在同一页面的另一个视图中成功登录后 我需要在视图中的表单中重新加载 AntiForgeryToken 我可以通过 jQuery 使用结果登录页面中的新密钥在表单输入 Html AntiForgeryToken 密钥中进行更新吗 如果是 这是
  • 用于 SRT 字幕的 Java API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有没有SRT字幕的Java API 实际的SRT解析是通过Java能够操作的正则表达式来执行的 实际的正则表达式是 protected static
  • 使用 allauth 绕过注册表单

    有谁知道在 django allauth 中使用社交帐户时如何绕过注册页面 我已经与 Google 合作进行身份验证 但是当用户接受 Google 的请求时 它会重定向到一个页面 要求他们输入电子邮件地址 然后才能登录 但它肯定会从 Goo
  • SqlCommand.Prepare 方法要求所有参数都具有显式设置的类型

    我的 WCF Web 服务中有以下代码片段 它根据提供的字典值的格式构建一组 where 条件 public static Dictionary
  • SQL Server CLR 线程

    我一直在与 SQL Server CLR 存储过程作斗争 背景 我们使用的是 SQL Server 2014 并且已经实现了一个 CLR 存储过程来调用客户的 Web 服务 线程最初用于不减慢 SQL Server CLR 主线程的速度 尽
  • Django 中的长轮询

    我在 Django 应用程序中使用一种长轮询 以便在操作进行时向客户端返回有关长操作的状态消息 我通过在视图函数中返回一个 HttpResponse 对象来实现此目的 该对象是使用返回字符串的迭代器初始化的 这一切都很好 但是迭代器函数变得
  • mongodb通过多个数组项查找

    如果我有这样的记录 text text goes here words text goes here 如何在 MongoDB 中匹配多个单词 当匹配单个单词时我可以这样做 db find words text 但是当我尝试对多个单词执行此操
  • 仅在与类的其他对象进行比较时,是否有任何理由不将运算符==重载为成员?

    我一直在互联网上寻找答案 但找不到任何答案 给出的唯一原因似乎与不同类型的对象进行比较有关 例如MyClass int 但最常见的用例是将类实例与同一类的另一个实例进行比较 而不是与任何不相关的类型进行比较 换句话说 我确实理解以下问题 s
  • 如何列出数据存储中的种类?

    我只需要为我自己的应用程序解决这个问题 因此在这里重新发布答案 自从提出这个问题并得到回答以来 时间已经过去了 现在有一个更简单的方法 See http code google com appengine docs python datas
  • 如何在 Rust 中注释空切片的类型? [复制]

    这个问题在这里已经有答案了 假设我想比较Vec
  • RealmObject 和 Parcelable

    使用 Realm for Android 我有一堂课 public class Entry extends RealmObject implements Parcelable Parcelable接口包含类似的方法describeConte
  • ES6 模块“Uncaught ReferenceError:函数未在 HTMLButtonElement.onclick 处定义”[重复]

    这个问题在这里已经有答案了 我正在谷歌浏览器中尝试 ES6 模块 当我单击按钮时 我想启动一个alert 在导入的函数中 js notification js 加载良好 但是当我单击按钮时出现错误 未捕获的引用错误 createNotifi
  • CSS/Javascript:如何在内联元素周围绘制最小边框?

    考虑以下 HTML p This is a potentially large paragraph of text which span may get wrapped onto several lines when displayed i
  • 在 IQKeyboardManager 中保持视图始终位于顶部(不要使用键盘滚动)

    我在用着IQKeyboardManager使用键盘输入后保持文本字段向上 即使单击文本字段 我也不想滚动到特定视图 下面是设计的屏幕截图 我希望 标题 保留在顶部 从他们的文档来看 有一种方法可以使导航栏保持在顶部 禁用 ViewContr
  • SQL Server 2012 Express 的修复/删除/安装进程卡住或挂起

    SQL Server 2012 Express 的一个实例因某种原因而损坏 我怀疑这在某种程度上与我使用实体框架有关 但还没有证据 当试图repair在实例中 修复过程似乎停留在 SqlEngineConfigAction repair v
  • 在delphi 7中制作向导界面

    我正在使用delphi 7 我正在尝试制作一个向导界面 我不知道是否有更简单的方法来制作向导 因此我正在考虑为向导的每个步骤制作单独的表单 当用户单击 下一步 时 活动表单将关闭并打开下一个表单 Here s a screen shot o
  • 优化 Berkeley DB 中的 Put 性能

    几天前我刚刚开始使用 Berkeley DB 所以我想看看在尽可能快地存储数据方面我是否遗漏了一些东西 以下是有关数据的一些信息 它有 512 字节块 块按顺序排列 块将按照 FIFO 顺序删除 如果我由于电源故障而丢失了一些数据 只要整个