• BerkeleyDB的C ++实现可以合理地支持什么是最佳并发级别?
  • 在吞吐量因资源争用而开始遭受损失之前,我可以在数据库中攻击多少线程?

我已阅读手册并知道如何设置锁,锁柜,数据库页面大小等数量,但我只是喜欢有BDB并发实际经验的人的一些建议。

我的应用程序非常简单,我将进行获取和放置大约1KB的记录。 没有游标,没有删除。

===============>>#1 票数:14

这取决于您正在构建的应用程序类型。 创建一个有代表性的测试场景,并开始锤击。 然后你会知道明确的答案。

除了用例之外,它还取决于CPU,内存,前端总线,操作系统,缓存设置等。

说真的,只测试你自己的场景。

如果您需要一些数字(实际上在您的方案中可能没有任何意义):

===============>>#2 票数:7

我非常同意Daan的观点:创建一个测试程序,并确保它访问数据的方式尽可能地模仿您希望应用程序具有的模式。 这对于BDB非常重要,因为不同的访问模式会产生非常不同的吞吐量。

除此之外,这些是我发现对吞吐量有重大影响的一般因素:

  1. 访问方法(在你的情况下,我猜是BTREE)。

  2. 您配置DBD的持久性级别(例如,在我的情况下,'DB_TXN_WRITE_NOSYNC'环境标志将写入性能提高了一个数量级,但它会影响持久性)

  3. 工作集是否适合缓存?

  4. 读数比。 写。

  5. 如何扩展您的访问权限(请记住BTREE具有页面级别锁定 - 因此访问具有不同线程的不同页面是一个很大的优势)。

  6. 访问模式 - 意味着线程彼此锁定甚至死锁的可能性,以及您的死锁解决策略(这可能是一个杀手)。

  7. 硬件(缓存的磁盘和内存)。

这相当于以下几点:基于DBD扩展解决方案以便提供更高的并发性有两个关键方法; 要么最小化设计中的锁数,要么添加更多硬件。

===============>>#3 票数:4

这不取决于硬件以及线程和内容的数量吗?

我会做一个简单的测试,然后用越来越多的线程锤击它并看看最好的东西。

===============>>#4 票数:2

我在对未知性能数据库进行操作时所做的是测量查询的周转时间。 我一直在增加线程数,直到周转时间减少,然后丢弃线程计数直到周转时间改善(好吧,这是我环境中的进程,但无论如何)。

有移动平均线和涉及的各种指标,但外卖课程是:只是适应当前的工作方式。 您永远不知道DBA何时会提高性能或硬件将被升级,或者在您运行时可能会出现另一个进程来加载系统。 如此适应。

哦,还有一件事:如果可以,请避免使用过程切换 - 批量处理。


哦,我应该说清楚:这一切都发生在运行时,而不是在开发过程中。

===============>>#5 票数:2

我明白了事情的方式,桑巴创建TDB允许任何特定的数据库文件“多个并发作家 ”。 因此,如果您的工作负载有多个编写器,那么您的性能可能会很差(例如,Samba项目选择编写自己的系统,显然是因为它对Berkeley DB在这种情况下的性能不满意)。

另一方面,如果您的工作负载有很多读者,那么问题是您的操作系统处理多个读者的程度。

  ask by Ted Dziuba translate from so

未解决问题?本站智能推荐:

关注微信公众号