将数百个数据对象写入Mongo数据库

时间:2014-10-21 08:10:26

标签: java multithreading mongodb morphia

我正在开发一个Minecraft网络,它有几个服务器操纵'用户对象',这只是一个Mongo文档。修改用户对象后,需要立即将其写入数据库,否则可能会在其他服务器(具有较旧版本的用户对象)中覆盖,但有时需要写入数百个对象。时间..(几秒钟内)。我的问题是:如何在不真正使数据库过载的情况下轻松地将对象写入MongoDB数据库。

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

提前致谢

btw我使用Morphia作为Java的框架

1 个答案:

答案 0 :(得分:2)

“数秒钟内的数百个物体”听起来并不那么多。你现在能做多少?

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

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

我对队列非常谨慎:

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

您可能希望阅读以下博文,了解为什么您可能希望避免这类操作的队列:http://widgetsandshit.com/teddziuba/2011/02/the-case-against-queues.html