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

标签 java multithreading mongodb morphia

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

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

提前致谢

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

最佳答案

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

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

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

我会对队列非常谨慎:

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

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

关于java - 将数百个数据对象写入 Mongo 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481826/

相关文章:

java - 在 Spring 中添加管理部分

java - 从 myeclipse 工作区创建ear文件

java - LoadableDetachableModel 多线程问题

multithreading - 尝试多线程程序。 C++/CLI

node.js - 为什么我的 Express 应用程序返回空数组?

java - Swing:使表格中的特定单元格闪烁的计算效率最高的方法

java - java servlet 中什么更有效或更正确 - 使用 HttpServletRequest、HttpServletResponse 通过 Cookie 或参数传递数据?

c# - Parallel.ForEach(...) 的低 CPU 使用率

c# - MongoDB 中是否有等效的 SEQUENCE

node.js - 连接到特定 mongodb 数据库时出现身份验证错误