百分比部分可能是最难的。我想不出在 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" } } } );
使用 4store 的 SPARQL 查询可能类似于:
SELECT
?s ?p ?o
WHERE {
?s <rdfs:type> <myvocab:bird>
}
您能详细介绍一下您的数据吗?