在我的网络应用中,经过身份验证的用户可以从他的spotify播放列表中选择要播放的歌曲。我希望访客(未经身份验证的用户)能够在动态创建的反应路线上查看所选择的歌曲,并在他们自己的设备(可能是手机)上对他们喜欢的歌曲进行投票。
我正在使用Mongo,Express,React / Redux,Node堆栈。
由于访客无权访问我的应用的redux商店,他们可以通过GET请求访问我应用的数据库,这是他们查看经过身份验证的用户所选歌曲的唯一方式。我最初的计划是只存储播放列表文档,用户可以获取这些播放列表以向spotify api发出请求。但是,它们是未经授权的,需要访问令牌。这意味着我的数据库必须存储经过身份验证的用户选择的每首歌曲。
我的问题与设计有关。我不认为我的一个文档能够容纳每首歌曲是个好主意,因为有些人可能想要挑选数千首歌曲,而且一个文档将无法容纳所有歌曲。另一方面,为每首歌创建一个单独的文档似乎有点过分。
任何人都可以帮我弄清楚哪个选项更好,或者是否有其他选项我没有想到可以完全避免这个问题?谢谢
答案 0 :(得分:0)
假设您将每首歌曲存储在一个单独的文档中,这种策略的主要缺点是空间复杂性,您需要更多空间来存储所有文档。
但是,假设您将所有歌曲文档保存在同一个集合中,它会带来一些优势,例如:查询和排序操作将更灵活,更快捷。它可以帮助您节省处理和开发时间。显示了类似的逻辑here。
仅使用一个文档来存储所有歌曲会使您的数据库操作更加复杂,需要更多开发时间和代码才能以正确的方式组织所有检索到的数据。另一个缺点是它不是一个长期可扩展的策略mainly because the limit of a BSON document is 16MB。
在我看来,每首歌曲的分离文档设计更合适,原因是: