-1

我正在为它开发一个小型应用程序,我为使用 MongoDB 或 MySQL 进行内容存储而苦恼。

我有大约 2000 个 DB 内容片段,其中包含大量描述内容的元数据(id、名称、类型、描述性标签、颜色等、日期、视图等),现在我们需要返回一个匹配的对象数组某些标准,例如:

我们需要根据搜索或过滤器返回 30 个对象...

  • 30% 的物体必须是动物
  • 其中 30% 需要是图像
  • 20% 需要是视频
  • 15% 需要是产品
  • 5% 需要是游戏

但此外,在返回的 30% 的动物中,假设 X 数量必须是恐龙,X 必须是猴子,X 必须是鸟类。

对于图像也可以这样说,从 30% 的图像中,返回的对象必须是不同子类别(可爱、设计、时尚、食物、音乐等)的相同部分。

如果这对任何人都有意义,那么您建议使用什么路径来获取返回这些对象的内容数据库,有些事情告诉我这使用 MongoDB 更容易完成,但我不完全确定。

Mongo 或 MySQL 中的任何建议和查询示例都将非常有帮助和赞赏。

4

1 回答 1

0

百分比部分可能是最难的。我想不出在 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>
} 

您能详细介绍一下您的数据吗?

于 2012-05-17T15:05:04.913 回答