mongo或sql标记系统

时间:2012-12-08 18:31:56

标签: mysql mongodb tagging

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

1,我可以创建一个mongodb数据库并将标记添加到嵌入字段并将它们全部索引

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

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

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

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

标签是鸡,id是与鸡有关的其他文件,我认为这些系统会给我带来很多麻烦。特别是第一个。你有没有针对我需要的任何标记系统的想法?顺便说一下,在打开这个问题之前,会有超过一百万个不同的标签并搜索这个标记系统,

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

然后是两个索引,一个在“标签”上,一个多键索引在“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

e.g。

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

100万个标签文档不会成为问题,我有类似的集合,大约有3个文档,每个文件都有多个索引中的avg 15项,性能非常好(来自dev vm)。

我希望这有帮助

答案 1 :(得分:1)

MongoDB非常适合这种标记,这要归功于它如何对列表进行索引。考虑像这样的文件:

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

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

{tags: "chicken"}

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

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