百分比部分可能是最难的。我想不出在MongoDB或SQL查询中表达这些百分比的好方法。你可能不得不在应用程序端处理这个问题。
除了这个限制,MongoDB应该更适合你。我假设元数据可能会有所不同,因此没有固定的模式。如果元数据属性始终相同,则关系数据库会更好。
我确实看到一些元数据是分层的。动物可以是恐龙,所以那里也有继承。 SQL和MongoDB都不能很好地处理继承。
还有其他的NoSQL选项。 4store是一个三重商店,旨在存储RDF数据。 RDF可以很好地处理层次结构,继承,松散的模式和查询。图形数据库如Neo4j也特别擅长(尽管4store也可以处理图形)。
几个引擎查询范例:
SELECT
*
FROM
content
INNER JOIN
classification
ON
classification.content_id = content.id
INNER JOIN
classification as classification2
ON
classification2.content_id = content.id
WHERE
classification.name = 'animal'
AND
classification2.name = 'bird'
可以使更多的加入更多的分类过滤器。还有其他方法可以实现类似的功能,但这取决于您的数据将如何建模。
MongoDB的查询可能是这样的:
db.content.insert({ data: "foobar", classification: ["animal", "bird", "page"] });
db.content.find({ classification: { $all: [ "animal", "bird" ] } });
或者,也许是这样的:
db.content.insert({ data: "foobar", type: { main: "animal", sub: "bird" } });
db.content.find({ type: { $elemMatch: { main : "animal", sub: "bird" } } });
的SPARQL查询与4store可能是这样的:
SELECT
?s ?p ?o
WHERE {
?s <rdfs:type> <myvocab:bird>
}
你能告诉更多关于你的数据?
我可以说,MongoDB将更容易查询,因为您可以使用实际代码进行查询。你可以遍历你的类别,你甚至可以使用百分比的对象作为查询的参考 –
谢谢卡维,我想我可以做到这一点。你有没有任何机会有任何你可能会在Mongo中一起扔的简单例子,这样我就可以得到一个更好的主意。 – Sean