图表DB与文档DB与Triplestores

时间:2012-08-20 18:32:02

标签: mongodb graph neo4j rdf nosql

这是一个有点抽象和一般性的问题。我对使用大量内部引用(类似图形)和许多属性(类似JSON)来保存非结构化数据的不同方法的固有(以及特定于实现)属性感兴趣。

  • 由于图形是树的超集,因此您可以将图形DB(例如Neo4j)看作文档DB的超集(例如MongoDB)。也就是说,图形DB提供了文档DB的所有功能,另外还允许循环或具有本机指针类型,因此您不必手动取消引用外键/ ID。 因此,在添加更多对象/资源的引用时,您会遇到一些转折点,您最好使用图表数据库,但之前的文档存储更好吗?文档数据库(存储空间,性能?)是否有优势?或者您是否应该始终使用图表数据库以防万一您将来需要更多参考文献?

  • 同样,图形DB和三重存储(例如RDF存储)如何比较?图形DB(节点和边缘具有属性)似乎是简单三重存储的超集。 Neo4j说,对于什么问题(如果有的话)执行三重存储实际上更好? (RDF存储的一个优点是有一种标准化的查询语言 - SPARQL - 尽管似乎有很多人不喜欢SPARQL,因此称其为劣势。)

我想我的问题是:图形模型(带有属性)似乎能够巧妙地表达各种数据,当你进入现实时会有什么收获?我认为图形数据库的捕获性能是表现,所以我喜欢看到一些数字或经验法则,说明在加载,查询和修改数据以及内存和持久存储要求时会出现什么样的减速?记录和三重商店)。那么水平可扩展性呢?我觉得那里的比赛场地非常水平。

您是否认为具有其可表达性的图形可能成为没有超大型数据的项目的新默认存储模型,或者我们注定了使用RDBMS,JSON存储和{... 3}的十年Polyglot Persistence生活在一起的图形数据库必须与更多的胶水代码集成?

3 个答案:

答案 0 :(得分:10)

我不确定我会同意许多人不喜欢SPARQL的观点。 SPARQL 1.0确实有一些缺点,但它很好地解决了它的设计目标,而新的迭代SPARQL 1.1建立在它的基础上,添加了许多人希望在原始规范中看到的SQL构造,包括子查询,聚合&安培;更新语义。我认为这是标准的事实,你可以期待看到相同的解析&每个三重存储中的语义,而不是SQL的方言,是一个很好的功能。

我还声称所有三重商店都是图形数据库;你可以把属性放在RDF的特定边上,虽然不如你能用到Neo4j那么好。但是三重存储具有真正的查询语言,w3c标准数据表示的优势,这使得将数据带到另一个三元组变得微不足道,并且对于许多三重存储,能够基于OWL执行推理。

我对大多数图形数据库的可扩展性一无所知,但一般来说,商业RDF数据库的扩展性非常好。所有这些都可以扩展到数十亿的三元组,它处理了大量的用例。虽然它们如何处理规模,但从供应商到供应商的差异很大,可以扩展或扩展,集群等等。您还会看到相当不同的内存和内容。硬件要求以匹配每个的实现。对我来说,我倾向于去拿一个EC2实例,通常是2XL或4XL,安装一个足够大的EBS来保存数据,而且我很好。

此外,一些三重存储与Lucene或类似技术集成以提供数据的反向索引,现在许多都开始包括地理空间和时间索引。这些是非常有用的功能,我不确定它们是否可用于Neo4j。

话虽如此,它们不会像关系数据库那样扩展,它们就不那么成熟了。但是,当你拥有“真正的”数据时,你也不会被搞砸。当然,三元组商店的优点之一就是推理,大规模表演很棘手,但这也是创建各种OWL配置文件的原因所在。但如果你不提前考虑,你可以把自己描绘成一个角落。

我认为图形数据库,特别是三重存储,可以很好地匹配正在构建的许多应用程序,但我不认为这意味着一切都应该用它们来完成。像其他任何东西一样,它们是具有优点和劣势的工具,因此您必须根据应用程序做出正确的选择。但是这些天他们可能总是至少值得考虑。

答案 1 :(得分:10)

只是对amk回答的一个小修正:Tinkerpop还包含ArangoDB的适配器,请参阅https://github.com/triAGENS/blueprints-arangodb-graph/wiki/Gremlin。因此,您可以在ArangoDB中使用Gremlin查询。

通常,像ArangoDB或OrientDB这样的多模型数据库允许您将文档数据库的所有优秀功能(无架构,索引)与图形结构一起使用。顶点或边缘只是文档数据库中的文档。您可以拥有任意数量的属性甚至是嵌入式文档。您可以在这些文档上定义散列,范围,全文或地理索引。或者您可以忘记文档结构并将文档视为顶点和边缘,使用Gremlin或一些遍历语言来研究基础图。

关于“我们注定了多语言持久性”这个问题:独立于文档/图形数据库问题,我相信RDBMS将会持续一段时间。所以,这个问题的答案是:“是的,很有可能”。

答案 2 :(得分:5)

图形数据库有一个临时标准 - Tinkerpop,包括Gremlin(命令式)查询语言,除ArangoDB之外的其他所有内容都支持。

为了进一步混淆水域,还有混合文档图数据库OrientDB和ArangoDB。

令我感到震惊的是,使用图形数据库中的边缘与文档数据库中的嵌入对象存储子关系之间的主要区别在于,使用前者,子项可以便宜地移动到另一个父项,并且没有风险它出现在两个不同地方的地方。