在mongodb中更新异步重复数据的最佳实践

时间:2015-03-29 13:00:32

标签: mongodb asynchronous

我正在权衡从关系SQL数据库迁移到mongodb以获取Web应用程序的优缺点。这是性能问题*。

在对象本身中存储所有对象依赖项允许快速"读取" 以向用户显示数据。另一方面,一些数据呈现在不同的集合中(例如,用户名集合在用户集合中,但也在评论集合中)。我想知道如何处理此重复数据的更新,以便快速"写入"

我希望避免处理这些重复的更新同步

您有什么异步更新选项?有没有好的做法?

我对此的看法是依赖于特定的mongodb机制(我不知道)或在memcache / redis / zeromq引擎中堆叠所需的更新,以便由异步进程异步播放。

(*)我的问题不是关于如何优化连接,索引和sql数据库引擎,SO上的其他帖子处理它。

1 个答案:

答案 0 :(得分:0)

基本上你有3个选择:

  1. 只需存储userId,然后单独获取用户。这样,您始终可以在新数据方面获得最佳结果。但当然它更慢。这基本上是关系数据库的作用。 SQL DB只需查看外键并按id获取数据。

  2. 使用过期数据。在评论中存储用户名的副本。有时这是期望的行为,因为这样您可以完全按照存储时的方式表示数据。这意味着:如果John创建了一条评论,之后他的用户名更新为Paul,您仍然可以看到,这是作为John创建的。 (这对于发票来说特别有用,当你在那里引用一个人并且地址发生变化时,你不想更新旧发票的地址)

  3. 更新用户名时,更新包含用户名的所有内容。这也不错,因为用户名通常不会改变。所以读取总是很快,因为名称存储在注释中。如果名称发生变化,您必须更新用户所涉及的所有内容。这当然是一项缓慢的任务,但因为它不应该每分钟发生,所以它是可以容忍的。

    3.1您可以优化事物:如果用户名更改,则会将其存储在某处并在午夜应用。这样,您可以收集多个名称更改并同时更新所有内容。

  4. 如您所见: NoSQL是关于选择的。您可以做最适合您数据的事情。当然,这总是一个权衡:更慢/更快,更多/更少的代码编写,更容易/更难维护。

    总结一下:

    1. 快速写入,一致数据,慢速读取
    2. 快速写入,不间断数据,快速读取
    3. 快速写入,快速读取,数据在更新过程后变得一致,这可能需要一些时间。而且更新过程当然很慢。