• 什么是最佳水平,并发,C++实现BerkeleyDB可以合理地支持?
  • 如何很多线我可以敲敲打打远在数据库之前的吞吐量开始受到影响,因为资源竞争?

我读过手册,并知道如何设置的号码锁的储物柜、数据库页面尺寸,等等。但是我只是喜欢一些建议来自个人有真实世界的经验,参与并发。

我的程序是非常简单,我会做得和使用的记录,是关于1KB的每一个。没有光标,没有删除。

没有正确的解决方案

其他提示

它取决于什么样的应用程序。创建有代表性的测试方案,并开始敲掉。然后你会知道的明确的答案。

除了你用的情况下,它也取决于中央处理器、存储器、前侧车,操作系统、设置高速缓存,等等。

说真的,只是测试你自己的方案。

如果你需要一些数(实际上可能意味着什么,在你的方案):

我强烈赞同大安的一点:创建一个测试程序,并确保其访问的数据模仿尽可能密切的模式预计应用程序。这是极为重要的参与,因为不同的访问模式产生非常不同的吞吐量。

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

  1. 访问的方法(这在你的情况我猜是b树).

  2. 水平持续性与其配置阻挡(例如,在我的情况的'DB_TXN_WRITE_NOSYNC'环境改善的标志写的业绩,通过一个数量级的,但它损害持久性)

  3. 不会的工作设置适合在高速缓存?

  4. 数量读取比。写。

  5. 如何传播出你的访问(记得b树有一页级锁定-所以访问不同的页面有不同的线是一个很大的优势)。

  6. 访问模式meanig怎么可能是个线程,以锁定另一个,或甚至陷入僵局,和什么是你的僵局解决政策(这一可能是一个杀手).

  7. 硬件(磁盘和存储为缓冲存储)。

这一数额为以下一点:扩展一个解决方案基础的阻挡,以便它提供更大的并发具有两个关键方面的要约;要么减少的数量锁在你的设计或增加更多硬件。

这不取决于硬件以及数线之类的东西?

我将作一个简单的测试和运行,这与增加数额的线锤击,看看什么似乎是最好的。

我做了什么工作时对数据库的未知的业绩是衡量周转时间在我的查询。我一直在增加在线数,直到周转时间下降,和删除线,直到周转时间改善(这是进程在我的环境,但无论).

有的移动平均线以及各种指标涉及,但是取走的教训是:只是适应的事情是如何工作的时刻。你永远不知道当的数据库将提高性能或硬件进行升级,或者也许是另一个过程将来的负载系统的话,你正在运行。所以适应。

哦,还有另一件事:避免过程的开关如果你可以批量的事情了。


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

我理解的事情,Samba创建 贸发理事会 允许"多个并行的 作家"对于任何特定的数据库文件。所以如果你的工作量具有多个作家你的表现可能是坏的(如在Samba项目中选择撰写其自己的系统,显然是因为它不满意Berkeley DB的业绩,在这种情况下)。

另一方面,如果你的工作量有很多的读者,然后的问题是如何以及你的操作系统处理多读者。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top