我脑子里有一个标记系统,这是我的想法,
1,我可以创建一个mongodb数据库并将标记添加到嵌入字段并将它们全部索引
2,我可以使用SQL,我可以将标签添加为表的新条目
3,我可以在mongodb上创建另一个集合并像这样做
例如标签是“鸡”,这是文件
tag:"chicken",
id:"1200000,32555,8787888888"
标签是鸡,id是与鸡有关的其他文件,我认为这些系统会给我带来很多麻烦。特别是第一个。你有没有针对我需要的任何标记系统的想法?顺便说一下,在打开这个问题之前,会有超过一百万个不同的标签并搜索这个标记系统,
谢谢
答案 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
标记的文档。
我不确定这是否是你在第一点上的意思。如果是,那么我不明白为什么它让你头疼。