使用一个Mongo文档来容纳数千个对象,或者每个文档都有数千个文档?

时间:2018-02-23 12:25:32

标签: mongodb reactjs

在我的网络应用中,经过身份验证的用户可以从他的spotify播放列表中选择要播放的歌曲。我希望访客(未经身份验证的用户)能够在动态创建的反应路线上查看所选择的歌曲,并在他们自己的设备(可能是手机)上对他们喜欢的歌曲进行投票。

我正在使用Mongo,Express,React / Redux,Node堆栈。

由于访客无权访问我的应用的redux商店,他们可以通过GET请求访问我应用的数据库,这是他们查看经过身份验证的用户所选歌曲的唯一方式。我最初的计划是只存储播放列表文档,用户可以获取这些播放列表以向spotify api发出请求。但是,它们是未经授权的,需要访问令牌。这意味着我的数据库必须存储经过身份验证的用户选择的每首歌曲。

我的问题与设计有关。我不认为我的一个文档能够容纳每首歌曲是个好主意,因为有些人可能想要挑选数千首歌曲,而且一个文档将无法容纳所有歌曲。另一方面,为每首歌创建一个单独的文档似乎有点过分。

任何人都可以帮我弄清楚哪个选项更好,或者是否有其他选项我没有想到可以完全避免这个问题?谢谢

1 个答案:

答案 0 :(得分:0)

假设您将每首歌曲存储在一个单独的文档中,这种策略的主要缺点是空间复杂性,您需要更多空间来存储所有文档。

但是,假设您将所有歌曲文档保存在同一个集合中,它会带来一些优势,例如:查询和排序操作将更灵活,更快捷。它可以帮助您节省处理和开发时间。显示了类似的逻辑here

仅使用一个文档来存储所有歌曲会使您的数据库操作更加复杂,需要更多开发时间和代码才能以正确的方式组织所有检索到的数据。另一个缺点是它不是一个长期可扩展的策略mainly because the limit of a BSON document is 16MB

在我看来,每首歌曲的分离文档设计更合适,原因是:

  1. 太空便宜。
  2. 节省时间复杂性必须优先考虑软件开发的所有方面。数据库查询通常是软件中较慢的操作。因此,减少数据库操作的时间成本是一个很好的目标。将所有文档存储在一个集合中而不是一个文档中将检索已组织的所有数据,而无需在代码中撤消。