【问题标题】:Why does MongoDB perform better with multi-threaded client compared to a single threaded client?与单线程客户端相比,为什么 MongoDB 使用多线程客户端性能更好?
【发布时间】:2011-09-26 12:09:57
【问题描述】:

我们最近使用 YCSB (https://github.com/brianfrankcooper/YCSB/wiki) 对 Oracle 10g 和 MongoDB 进行了基准测试,当我们尝试增加 1,000,000 个数据集的线程数时,Oracle 的性能在 4 个线程后保持不变,但 MongoDB 的性能越来越好,直到 8 个线程和之后只有读取更好,写入和更新(操作/秒)保持不变。

我们在 2 CPU Xeon 四核(共 8 核)+ 8 GB RAM 的 LAN 上运行此基准测试。

我们观察到,与单线程客户端相比,MongoDB 在多线程客户端上的性能更好,我的问题是:当 MongoDB 可以在更多负载下更好地执行时,为什么它不能在更少负载下做同样的事情(比如说只是一个几个线程)通过利用多个核心?

【问题讨论】:

  • 不知道你的真正意思...

标签: mongodb ycsb nosql


【解决方案1】:

在单核上处理请求在逻辑上非常简单。只需拥有接收请求并处理它的代码即可。

在 2 个内核上处理单个请求并不是那么简单,因为这样做需要您将请求分解为组件、分包工作、同步答案,然后构建单个响应。如果你做这项工作,虽然你可以减少挂钟时间(墙上的时钟看到多少时间过去),但你总是会让请求花费更多的 CPU 时间(消耗的总 CPU 资源)。

在像 MongoDB 这样的系统中,您希望有许多不同的客户端发出请求,因此没有必要尝试并行处理单个请求,并且完全有理由不这样做。

更大的问题是为什么 Oracle 在 4 个 CPU 之后没有增加并发性。可能的原因有很多,但一个合理的猜测是您遇到了某种锁定,这是保证一致性所必需的。 (MongoDB 不提供一致性,因此避免了这种类型的瓶颈。)

【讨论】:

  • 是的,这就是我对 Oracle 的怀疑,一个保持一致性的锁。
  • 是从优化多核的角度考虑的,比如只有2个并行客户端的时候,mongoDB应该可以优化2个cpu上的8个核,效果会更好。在目前的情况下(2 个并行客户端),其他 6 个内核将处于空闲状态,而其他 2 个内核不会给我 8 个内核一起给我的性能,就像在低负载下使用 CPU 时一样。
  • Oracle 是 MVCC,它不会锁定。
  • @TTT:如果您认为 Oracle 没有锁定,那您就大错特错了。 Oracle 已竭尽全力拥有许多细粒度的短寿命锁以最大限度地提高并发性。但在底层,它绝对是使用锁定来保证一致性,而且我个人看到 Oracle 数据库由于模糊的锁定问题而在没有警告的情况下多次崩溃。 (当你解决一个锁定问题时,你会遇到另一个。)
  • @TTT:只有部分正确。在 Oracle 中,在负载下,对各种数据结构的访问需要在表的索引访问期间使用临时锁。我是在一位经验丰富的 DBA 诊断并通过将更多数据移动到索引中解决问题后了解到这一点的,这样查询根本不必访问表,从而缩短了锁定时间。
【解决方案2】:

Oracle 不会锁定数据以实现一致性,但它会将数据写入重做和撤消文件以实现事务和读取一致性。 Oracle 是一个 MVCC 系统。见http://en.wikipedia.org/wiki/Multiversion_concurrency_control

你必须使用参数化查询来使 Oracle 更快,否则 Oracle 将花费太多时间来解析查询。当您正在测试的情况下同时运行大量小查询时,这一点尤其重要。

MongoDB 确实会锁定写入。

编辑 1:

Oracle 和 MongoDB 之间的另一大区别是持久性。如果您使用默认配置,MongoDB 不提供持久性。它每分钟向磁盘写入一次数据。 Oracle 每次提交都会写入磁盘。所以 Oracle 做了更多的 fsyncing。

【讨论】:

  • YCSB 的情况并非如此,因为它的客户端代码在默认配置中使用安全写入。
  • 至少驱动版本可以追溯到 2012 年秋季(1.5 年前),mongoDB 的默认行为是在将控制权返回给写入客户端之前写入日志,几乎与 Oracle 所做的相同.
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多