【问题标题】:Recommendations on structure for Mongoid/MongoDB Tree of Tags关于 Mongoid/MongoDB 标签树结构的建议
【发布时间】:2010-09-20 17:41:20
【问题描述】:

我正在寻找有关如何构建此数据模型的标签部分的一些建议:

这是它的简化版本:

  • 一个站点有许多帖子(关系关联 [mongoid 语言中的references_many])。一个站点有一个标签树
  • 帖子有一组标签(网站标签的子集,顺序无关紧要)

我关心的用例是:

  1. 以树的形式快速保存和检索站点的标签(即能够在 UI 中将它们显示为树)
  2. 快速查询某个站点的哪些帖子有特定的标签。

没有树结构,http://github.com/wilkerlucio/mongoid_taggable 解决了我的用例。我已经看到了 Mongoid 的一些acts_as_tree 端口,例如:

它们似乎都采用关系方法而不是嵌入式方法来存储层次结构,这意味着上述两个用例都会很慢(可能需要 map/reduce)。

有没有人做过类似的事情,或者有什么建议?理想情况下,我会喜欢 Mongoid 解决方案,但我也很乐意使用 Ruby 驱动程序。

【问题讨论】:

    标签: tags mongodb nested mongoid


    【解决方案1】:

    您是否需要更新树的结构(即将标签移动到另一个父级)?如果可能,嵌入式方法将变得困难,而关系/规范化方法更有意义。

    我可能会将标签本身存储在文档中(嵌入),但如果有任何机会我需要在线移动树节点,那么我会将层次结构存储在另一个文档中。如果您首先展平搜索查询(根据当前树)然后搜索这些标签,则查询不必很慢。如果扁平化的搜索查询最终包含数百个标签(您的树有多高?),这种方法可能无法很好地扩展。

    如果标签无法移动到新的父级(或只能由您,在定期维护期间),请继续嵌入整个层次结构。

    【讨论】:

    • 谢谢蒂洛。标签不能移动。可以定期删除/重新创建整个树。同样,这更容易嵌入。所以我正在考虑非常简单地对其进行建模。站点存储一个嵌套的标签数组(树),而帖子存储一个标签数组。存储/检索嵌套数组将很快(原子)并且查询 Posts 集合将相对容易,因为它是对 tags 数组的简单查询。感谢您的帮助
    【解决方案2】:

    mongodb tree structure有两种实现模式

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多