【问题标题】:Should each post tag have its own mongo collection, if the user can tab to each tag?如果用户可以对每个标签进行标签,每个帖子标签是否应该有自己的 mongo 集合?
【发布时间】:2017-06-25 20:33:40
【问题描述】:

数据库是 MongoDB,而不是 SQL,这不会改变。

假设您有一个应用程序,允许用户发布问题,然后用一个主题标记它们:数学、科学、英语、历史。

此外,在导航上,每个主题都有自己的选项卡,将显示标有相应主题的问题。

既然按标签显示问题对于应用程序来说是必不可少的,那么检索这些数据的最快方法是什么?

可能性: (1) 将标签保留为问题集合中的单个字段。问题:必须搜索每个问题,然后搜索标签字段,以找到相关标签。

(2) 一个标签集合,每个主题都有一个字段。问题:如果问题的数量太大(大约 20,000 个帖子),Mongo 将无法工作。来自 Mongo 文档 (http://blog.mongodb.org/post/35133050249/mongodb-for-the-php-mind-part-3):

对于文档设计,您需要考虑两件事:规模和 搜索。 ScaleMongoDB 文档有 16MB 的限制,虽然 听起来很小,可以容纳数千个文件。然而,如果 您期望在高流量网站上的每个帖子有 20,000 cmets, 或者您的 cmets 大小不受限制,则嵌入可能不起作用 很适合你。

这似乎离开了...... (3) 每个标签都有一个单独的集合。在这种情况下(3)是最好的吗?

【问题讨论】:

    标签: mongodb database nosql


    【解决方案1】:

    根据您提供的(相当基本的)规范,我会为文档选择一个集合,其中每个文档都包含一个标签数组:

    {
       _id: "whatever",
       content: "the question",
       tags: [ "this", "that", "and another tag" ]
       ...
    }
    

    然后,为了通过标签高效查询,在标签上设置多键索引。 见https://docs.mongodb.com/manual/indexes/#multikey-index

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2010-10-13
      • 2021-08-23
      • 1970-01-01
      • 2018-11-06
      • 2019-12-17
      相关资源
      最近更新 更多