gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:03:08 34 4
gpt4 key购买 nike

我正在权衡将 Web 应用程序从关系 SQL 数据库迁移到 mongodb 的利弊。这是为了性能问题*。

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

我想避免同步处理这些重复的更新。

异步更新有哪些选择?有什么好的做法吗?

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

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

最佳答案

基本上你有 3 个选择:

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

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

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

    3.1 你可以优化一些事情:如果用户名改变,这会被存储在某个地方并在午夜应用。通过这种方式,您可以收集多个名称更改并同时更新所有内容。

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

总结起来是:

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

关于mongodb - 在 mongodb 中更新异步复制数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329409/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com