mb2*_*b21 30 rdf graph mongodb neo4j nosql
这是一个有点抽象和一般性的问题.我对使用大量内部引用(类似图形)和许多属性(类似JSON)来保存非结构化数据的不同方法的固有(以及特定于实现)属性感兴趣.
由于图形是树的超集,因此您可以将图形DB(例如Neo4j)视为文档DB的超集(例如MongoDB).也就是说,图形DB提供了文档DB的所有功能,另外还允许循环或具有本机指针类型,因此您不必手动取消引用外键/ ID.那么,当您添加更多对象/资源的引用时,您会遇到一些转折点,您最好使用图形数据库,但之前的文档存储更好吗?文档数据库(存储空间,性能?)是否有优势?或者您是否应该总是使用图形数据库以防将来需要更多引用?
同样,图形DB和三重存储(例如RDF存储)如何比较?图形DB(节点和边缘具有属性)似乎是简单三重存储的超集.Neo4j说,对于什么问题(如果有的话)执行三重存储实际上更好?(RDF存储的一个优点是有一种标准化的查询语言--SPARQL - 尽管似乎有很多人不喜欢SPARQL,因此称其为劣势.)
我想我的问题是:图形模型(带有属性)似乎能够整齐地表达各种数据,当你进入现实时会有什么收获?我认为图形数据库的捕获是性能,因此我希望看到一些数字或经验法则,说明在加载,查询和修改数据以及内存和持久存储要求时会出现什么样的减速(与文档相比)和三联商店).那么水平可扩展性呢?我觉得那里的比赛场地非常平坦.
您是否认为具有可表达性的图形可能成为没有超大数据的项目的新默认存储模型,或者我们注定了十年的Polyglot Persistence与RDBMS,JSON存储和Graph DB彼此生活在一起必须与更多的胶水代码集成?
Mic*_*ael 11
我不确定我会同意许多人不喜欢SPARQL的观点.SPARQL 1.0也有一些短的缺憾,但它很好地解决它是专为,而新的迭代,SPARQL 1.1,建立在从SQL人们有望在原来的规格看,包括子查询增加了许多结构,聚集并更新语义.我认为这是标准的事实,你可以期望在每个三重存储中看到相同的解析和语义,而不是SQL的方言,这是一个很好的功能.
我还声称所有三重商店都是图形数据库; 你可以把属性放在RDF的特定边上,虽然不如你能用到Neo4j那么好.但是三重存储具有真正的查询语言,w3c标准数据表示的优势,这使得将数据带到另一个三元组变得微不足道,并且对于许多三重存储,能够基于OWL执行推理.
我对大多数图形数据库的可扩展性一无所知,但一般来说,商业RDF数据库的扩展性很好.所有这些都可以扩展到数十亿的三元组,它处理了大量的用例.虽然它们如何处理规模,但是从供应商到供应商的差异很大,可以扩展或扩展,集群等.您还将看到完全不同的内存和硬件要求,以匹配每种实现.对我来说,我倾向于去拿一个EC2实例,通常是2XL或4XL,安装一个足够大的EBS来保存数据,而且我很好.
此外,一些三重存储与Lucene或类似技术集成以提供数据的反向索引,现在许多都开始包括地理空间和时间索引.这些是非常有用的功能,我不确定它们在Neo4j之类的可用性.
话虽如此,它们不会像关系数据库一样扩展,它们就不那么成熟了.但是,当你拥有"真正的"数据时,你也不会被搞砸.当然,三元组商店的优点之一就是推理,大规模表演很棘手,但这也是创建各种OWL配置文件的原因所在.但如果你不提前考虑,你可以把自己画成一个角落.
我认为图形数据库,特别是三重存储,可以很好地匹配正在构建的许多应用程序,但我不认为这意味着一切都应该用它们来完成.像其他任何东西一样,它们是具有优点和劣势的工具,因此您必须根据应用程序做出正确的选择.但是这些天他们可能总是至少值得考虑.
fce*_*ler 10
只是对amk回答的一个小修正:Tinkerpop还包含ArangoDB的适配器,请参阅https://github.com/triAGENS/blueprints-arangodb-graph/wiki/Gremlin.因此,您可以在ArangoDB中使用Gremlin查询.
通常,像ArangoDB或OrientDB这样的多模型数据库允许您将文档数据库的所有优秀功能(无架构,索引)与图形结构一起使用.顶点或边缘只是文档数据库中的文档.您可以拥有任意数量的属性甚至是嵌入式文档.您可以在这些文档上定义散列,范围,全文或地理索引.或者您可以忘记文档结构并将文档视为顶点和边缘,使用Gremlin或一些遍历语言来研究底层图形.
关于"我们注定了多语言持久性"的问题:独立于文档/图形数据库问题,我相信RDBMS将会持续一段时间.所以,这个问题的答案是:"是的,这很有可能".
小智 5
图形数据库有一个特殊的标准--Tinkerpop,包括Gremlin(命令式)查询语言,除了ArangoDB以外的所有东西都支持.
为了进一步混淆水域,还有混合文档图数据库OrientDB和ArangoDB.
令我感到震惊的是,使用图形数据库中的边缘与作为文档数据库中的嵌入对象存储子关系之间的主要区别在于,使用前者可以将子项廉价地移动到另一个父项,而不会将其显示在有两个不同地方的两个地方.