首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BerkeleyDB并发

BerkeleyDB并发
EN

Stack Overflow用户
提问于 2008-08-01 23:28:51
回答 5查看 2.8K关注 0票数 37
  • C++实现BerkeleyDB可以合理地支持的最优并发级别是什么?
  • 在吞吐量因资源争用而开始受到影响之前,我可以对DB进行多少个线程的锤击?

我已经阅读了手册,并知道如何设置锁的数量、储物柜、数据库页大小等,但我只想从具有实际BDB并发经验的人那里得到一些建议。

我的应用程序很简单,我要做的是获取和保存记录,每个记录大约是1KB。没有游标,没有删除。

EN

回答 5

Stack Overflow用户

发布于 2008-08-03 12:34:36

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

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

说真的,试试看你自己的情况。

如果您需要一些数字(这在您的场景中可能没有任何意义):

  • Oracle Berkeley DB:性能度量和基准测试
  • 业绩计量和基准: 伯克利数据库
票数 15
EN

Stack Overflow用户

发布于 2008-10-13 21:59:37

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

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

  1. 访问方法(在您的例子中,我猜是BTREE)。
  2. 配置DBD的持久化级别(例如,在我的示例中,“DB_TXN_WRITE_NOSYNC”环境标志提高了一个数量级的写入性能,但它损害了持久性)
  3. 工作集是否适合高速缓存?
  4. 读取数Vs。写字。
  5. 如何扩展您的访问是(请记住,BTREE有一个页面级别锁定-所以使用不同的线程访问不同的页面是一个很大的优势)。
  6. 访问模式-意味着线程彼此锁定的可能性,甚至死锁,以及您的死锁解决策略是什么(这个策略可能是一个杀手)。
  7. 硬件(用于缓存的磁盘和内存)。

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

票数 8
EN

Stack Overflow用户

发布于 2008-08-02 18:21:21

这不取决于硬件以及线程和其他东西的数量吗?

我会做一个简单的测试,并运行它与越来越多的线程锤打,看看什么似乎最好。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档