gpt4 book ai didi

php - MongoDB - 存储和读取数据的最佳方式

转载 作者:可可西里 更新时间:2023-11-01 09:07:28 24 4
gpt4 key购买 nike

我有一个 Mongo 数据库。

我有两个集合:

  1. 用户
  2. 帖子

用户发帖但问题在这里。哪种方式更好?

  1. 仅存储帖子后面的用户 _id (POST CREATOR)。
  2. 在帖子后面存储用户信息,例如(_id、名称、用户名...)。

在第一种方法中,我们需要从集合 USERS 中获取用户信息。

在第二种方法中,我们需要仅在用户更新个人资料信息时更新用户发送的所有帖子数据。

哪个更好?

最佳答案

要找出适合您应用的最佳方法,请问自己以下问题:

a) 对用户集合的写入(更新)查询的次数是高还是低? (可能很低)

b) post colelction 上读取查询的nr 是高还是低? (可能很高)

c)(用户)数据一致性有多重要?

非规范化是 MongoDB 中的一种常见方法。如果写入的 nr 与读取的 nr 相比较少,则通过嵌入数据对数据进行非规范化将产生更好的读取性能,但写入性能会变慢,因为您需要在更多地方写入。需要注意的是,可能会出现数据不一致的情况,因为在 mongodb 中,只有在单个文档上写入时,写入才不是原子的。

通过选择解决方案 #1,您对帖子的读取速度会变慢,因为这需要对用户集合进行其他读取查询。数据一致性得到保证,您还可以获得更大的灵 active 。

通过选择解决方案 #2,您可以更快地阅读帖子,因为一切都在那里,嵌入,您可以在一个查询中获得它。但是您的用户查询更新速度会变慢。在此解决方案中,数据一致性无法得到保证,但在某些应用程序中,当更新不一致可以稍后处理时,这可能不是一个大问题。在这里,您可以只嵌入用户数据所需的部分,而不是全部,例如,如果您只需要用户名即可在帖子中显示它,则只嵌入用户名(和 _id)。

如果您有一个非常大的数据集,其中有很多帖子,用户集合的更新较少,帖子集合上的大量读取,用户数据可能包含不一致,这些不一致可能会发生,但它们并不重要,可以在以后修复,在性能方面,更好的解决方案是 #2。

有关架构设计的有趣文章,您可以在 here 中找到它.

关于php - MongoDB - 存储和读取数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41323316/

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