【问题标题】:mongo or sql tagging systemmongo 或 sql 标记系统
【发布时间】:2012-12-08 18:31:56
【问题描述】:

我有一个标记系统,这是我的想法,

1、我可以做一个mongodb数据库,给一个嵌入字段添加标签,然后全部索引

2,我可以使用 SQL,我可以将标签作为新条目添加到表中

3,我可以在 mongodb 上创建另一个集合并这样做

例如标签是“鸡”,这是文档

tag:"chicken",
id:"1200000,32555,8787888888"

tag 是鸡,id 是其他与鸡相关的文件,我想那些系统会让我很头疼。尤其是第一个。你有什么适合我需要的标签系统想法吗?顺便说一下,会有超过一百万个不同的标签,在打开这个问题之前搜索了这个标签系统,

谢谢

【问题讨论】:

    标签: mysql mongodb tagging


    【解决方案1】:

    如果你想在 mongo 中实现这一点,我会创建看起来像这样的文档

    {
        tag: "chicken",
        ids : [ 12345,23456,34567 ]
    },
    ...
    

    然后是两个索引,一个在“tag”上,一个在“ids”上的多键索引 (http://docs.mongodb.org/manual/core/indexes/#multikey-indexes)。

    db.tags.ensureIndex( { "tag": 1 } );
    db.tags.ensureIndex( { "ids": 1 } );
    

    根据您需要执行的查询,在这两个属性上创建复合索引可能很有价值。 http://docs.mongodb.org/manual/core/indexes/#compound-indexes

    例如

    db.tags.ensureIndex( { "ids": 1, "tag" : 1 } );
    

    100 万个标签文档不是问题,我有类似的集合,大约 300 万个文档,每个文档在多键索引中平均有 15 个项目,性能非常好(来自 dev vm)。

    希望对你有帮助

    【讨论】:

    • 谢谢,我想我们不需要索引id,因为我们不会搜索那些,你的multikey是这样的吗? "标签":"asd,bsd,csd,dsd,fsd,gsd" ?
    • 多键索引可以在数组上。 “标签”也是如此:[“aaa”,“bbb”,..]
    • 通过索引 id,您可以找到特定 id 的标签或特定标签的 id
    • 我正在考虑为此添加另一个嵌入式数组,因此当提供一个页面时,我可以通过一个查询来完成它
    • 对不起,有一部分我不明白,你的 300 万个文档的架构看起来像我的第一个选项还是第三个选项?
    【解决方案2】:

    MongoDB 非常适合此类标记,这要归功于它索引列表的方式。考虑这样一个文档:

    {_id: 42, name: "someName", tags: ["chicken", "parrot", "hovercraft"]}
    

    如果为tags 字段添加索引,则可以高效地执行如下查询:

    {tags: "chicken"}
    

    此查询将在其tags 列表中查找所有包含"chicken" 的文档,即所有带有chicken 标签的文档。

    我不确定这是否是您在第一点中的意思。如果是这样,我不明白为什么它会让你头疼。

    【讨论】:

    • 标签会太多,即使在后台索引也需要很长时间,但谢谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多