RDBMS可以做什么Neo4j(和图形数据库)不能?

时间:2012-01-15 18:21:42

标签: database nosql rdbms neo4j graph-databases

  

“图表数据库 - 转换a-> RDBMS“

Neo4j网站似乎暗示无论你在RDBMS中做什么,你都可以在Neo4j中做到。

在选择Neo4j作为RDBMS的替换之前,我需要回答一些疑问。


我对Neo4j感兴趣

  • 能够快速修改数据“架构”
  • 自然地表达实体而不是关系和规范化的能力
  • ...导致高度表达的代码(优于ORM)

这是一个NoSQL解决方案,我感兴趣的是它的功能,而不是高性能。


问题:Neo4j是否存在任何可能导致不适合作为RDBMS替代品的问题?

我特别关注这些:

  • 是否有数据库功能我必须在应用程序逻辑中实现? (例如,您必须在应用程序层为少数NoSQL DB实现连接)
  • 字段“索引”是否允许查找比O(n)更快?
  • 如何处理热备份和复制?
  • “更改”架构或让具有不同版本架构的实体共存的任何问题?

3 个答案:

答案 0 :(得分:2)

这是一个非常广泛的主题,涵盖从建模和实施到IT和支持的所有内容。在这里回答所有这些问题是不可能的,特别是没有关于你情况的细节。但是,您似乎正在探索各种选择和途径。所以,我只是将一些一般的食物传递给思想,因为有人实施了许多系统。

每个人似乎都认为他们的新数据库范例是关系数据库的替代品。所以,把这些说法带上一粒盐。

我喜欢用3种基本模型来思考:关系型,文档型和图形式。根据您的问题空间,这些中的一个或更多是正确的答案。除了关系之外,我不会做任何财务交易(基于SQL)。如果要构建CMS,则可以使用Document DB。如果我的应用程序是建模网络(道路,人员,连接,网络等),我使用Neo4J。

就生产质量而言,每个类别都有坚实的选择。关系有一堆。对于文档数据库,我会使用MongoDB或更高级别的JCR系统,如Apache Jackrabbit。对于图形,我只有Neo4j的经验,对我来说它是坚如磐石的。

无论你做什么,都不要误以为“我们有一种解决你所有问题的技术”。它不在那里,它缩小了你的想法。

答案 1 :(得分:1)

我现在已经确信Neo4j是关系数据库的良好替代品。

  • 符合ACID
  • 虽然社区版缺少热备份等功能,但企业版
  • 您可以获得支持
  • 乍一看(在新版本中,您不需要START子句),其查询语言CYPHER几乎可以执行任何SQL操作

但是

  • 找到一个CYPHER开发人员比找一个SQL
  • 更难
  • 并且它没有等效的优化器:它比SQL编写查询更重要

虽然它支持复制并且Neo明确地将其作为大数据产品推销,但我无法证实它具有足够的可扩展性,而且我没有研究安全方面。

在最近的版本中(比上面的问题更年轻),可以在标签上定义索引,这些索引就像关系数据库中的表上的索引一样,允许进行O(log(n))查找。

(fyi:Neo4j没有桌子,但每个节点(〜=行)可以有不同的标签,与gmail标签相比。这更灵活:你不必选择是否把汽车和自行车放入一个用于车辆桌子或不用:自行车将同时具有:车辆和:自行车标签。)

回答原始问题: Neo4j几乎不支持架构实施。 Neo建议在您的数据库上实现自动一致性测试,您可以在验证测试实例上作为发布周期的一部分运行。

答案 2 :(得分:0)

使用像oracle这样的企业数据库将为您提供许多可能或可能不属于neo的功能。其中包括:

  • ACID交易
  • 高可用性/备份/待机
  • 使用基于成本的优化器以最有效的方式使用sql获取数据的能力 - 数据库确定了根据最新统计数据检索数据的最佳方法
  • 可扩展性,分区
  • 支持
  • 安全

如果您要自己在代码中实现应用程序的大部分功能,并且不需要rdbms提供的结构和高级功能,或者如果您的数据结构更适合基于图形的数据库,那么所有意味着试验新。有一个原因,大多数企业应用程序使用传统的rdbms服务器之一,但未来可能并非总是如此