gpt4 book ai didi

MongoDB结构: single collection vs multiple smaller collections

转载 作者:IT老高 更新时间:2023-10-28 13:03:52 26 4
gpt4 key购买 nike

我有一个一般性的数据库结构问题。在我的场景中,我碰巧正在使用 mongodb。

我正在创建一个应用程序,用户可以在其中上传歌曲列表(标题、艺术家等),但我不确定我是否应该为所有用户创建一个 songList 集合,还是为每个用户创建一个单独的 songList.user# 集合个人用户。用户只能查询与他们关联的歌曲,因此用户 A 永远不会知道用户 B 的歌曲。

代码示例:

每个用户有多个收藏

db.songList.userA.find()
{"title": "Some song of user A", "artist": "Some artist of user A"}

db.songList.userB.find()
{"title": "Some song of user B", "artist": "Some artist of user B"}
  • 优点
    • 要查询的集合大小更小
  • 缺点
    • 可维护性
      • 1000 个用户意味着 1000 个集合

与拥有“用户”字段的单个集合相比

db.songList.find({"user":"A"})
{"title": "Some song of user A", "artist": "Some artist of user A", "user": "A"}
  • 优点
    • 如有需要,可灵活地跨用户查询
  • 缺点
    • 性能

我正在尝试建立一个赞成/反对名单,但仍然在围栏上。鉴于每个用户的歌曲将彼此隔离,哪种方法更好?我主要关心的是维护和查询性能。

提前致谢。

最佳答案

我会建议 NOT 为每个用户单独收集。

阅读 documentation

By default MongoDB has a limit of approximately 24,000 namespaces per database. Each namespace is 628 bytes, the .ns file is 16MB by default.

Each collection counts as a namespace, as does each index. Thus if every collection had one index, we can create up to 12,000 collections. The --nssize parameter allows you to increase this limit (see below).

Be aware that there is a certain minimum overhead per collection -- a few KB. Further, any index will require at least 8KB of data space as the b-tree page size is 8KB. Certain operations can get slow if there are a lot of collections and the meta data gets paged out.

因此,如果您的用户超出命名空间限制,您将无法正常处理它。此外,随着用户群的增长,它的性能也不会很高。

更新

正如@Henry Liu 在评论中提到的那样。对于使用WiredTiger存储引擎的Mongodb 3.0或以上版本,不再是限制。

docs.mongodb.org/manual/reference/limits/#namespaces

关于MongoDB结构: single collection vs multiple smaller collections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794595/

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