【问题标题】:Writing hundreds of data objects to a Mongo database将数百个数据对象写入 Mongo 数据库
【发布时间】:2014-12-16 09:22:00
【问题描述】:

我正在一个 Minecraft 网络上工作,该网络有几个服务器在操作“用户对象”,这只是一个 Mongo 文档。用户对象修改后需要立即写入数据库,否则可能会在其他服务器(具有旧版本的用户对象)中被覆盖,但有时需要少量写入数百个对象时间..(在几秒钟内)。我的问题是:我怎样才能轻松地将对象写入 MongoDB 数据库而不会真正使数据库过载..

我一直在想一个想法,但我不知道它是否相关: - 在另一个线程中创建某种队列,每次需要将数据对象保存到数据库中时,它都会进入队列,然后在“队列线程”中,对象将以某种间隔一个一个地保存..

提前致谢

顺便说一句,我在 Java 中使用 Morphia 作为框架

【问题讨论】:

    标签: java multithreading mongodb morphia


    【解决方案1】:

    “数百个对象 [...] 在几秒钟内”听起来并不多。你现在能做多少?

    对写入操作速度最重要的设置是WriteConcern。您目前正在使用什么设置,这是否适合您的项目(数据安全与速度)?

    如果您需要一次执行许多写入操作,您可能可以通过批量操作来加快速度。它们已被添加到 MongoDB 2.6 中,Morphia 也支持它们——请参阅unit test

    我会非常谨慎地排队:

    • 您真的需要它吗?根据您的硬件和配置,您应该能够每秒执行数百甚至数千次写入操作。
    • async 真的是最适合您的方法吗?写操作/消息的生产者只能假设他的更改已被应用,但它可能尚未应用并且仍在队列中等待写入。这是预期的行为吗?
    • 它是否让您的生活更轻松?您需要了解另一种软件,它会增加许多新的和最有可能无法预料的问题。
    • 如果您需要扩展写入,为什么不使用分片?无需额外的技术,无论有没有它,您的代码都会表现出相同的行为。

    您可能想阅读以下博文,了解您可能希望避免此类操作排队的原因:http://widgetsandshit.com/teddziuba/2011/02/the-case-against-queues.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多