关系型数据库(RDBMS)相比Neo4j(以及图形数据库),有哪些功能是它们所不能做的?

13
“图形数据库——转换为——>关系型数据库(RDBMS)”
Neo4j网站似乎在暗示,无论你在RDBMS中可以做什么,你都可以在Neo4j中完成。
在选择Neo4j作为RDBMS的替代方案之前,我需要解决一些疑虑。
我对Neo4j感兴趣的原因是:
- 快速修改数据“模式”的能力 - 能够自然地表达实体而不是关系和规范化,从而导致高度表达性的代码(比ORM更好) - 这是我感兴趣的NoSQL解决方案,主要是因为它的特点,而不是高性能。
问题:Neo4j是否存在任何问题,使它无法作为RDBMS的替代方案?
我特别关心以下几点:
- 是否必须在应用程序逻辑中实现任何数据库功能?(例如,您必须在应用层实现联接操作,以使用一些NoSQL DBs) - 字段是否“索引”,以便快速查找而不是O(n)? - 如何处理热备份和复制? - 是否有关于“更改”模式或让具有不同版本模式的实体共存的问题?

2
如果您想获取有关此主题的信息,请将您的帖子复制到neo4j谷歌群组http://neo4j.org/forums,您将在那里得到答案。 - Michael Hunger
@Michael Hunger,好的,没问题 :-) 是的,这个问题太专业化了,不适合在SO上发表。 - Jesvin Jose
我不明白这为什么不是建设性的。 - smartcaveman
从技术上讲,你可以在Neo4j中做任何在关系型数据库中能做的事情。如果你仔细想想,即使是一个平面文件,只要系统实现得当,也可以做到关系型数据库所能做的一切(但这就变得棘手了)。 - user93
3个回答

2
这是一个非常广泛的主题,涵盖了从建模和实施到IT和支持的所有内容。在没有详细了解您的情况的情况下,在这里真正回答所有这些问题是不可能的。但是,您似乎正在探索选项和途径。因此,作为一位已经实施了许多系统的人,我将提供一些通用的思考方向。
每个人似乎都认为他们的新数据库范式可以替代关系数据库。因此,请对这些声明保持怀疑态度。
我喜欢按照三种基本模型来思考:关系、文档和图形。根据您的问题空间,其中一种甚至多种模型可能是正确的答案。除了关系型(基于SQL)之外,我不会使用任何其他类型的数据库进行财务交易。如果您正在构建CMS,则文档数据库是正确的选择。如果我的应用程序正在建模网络(道路、人员、连接、网络等),我会使用Neo4J。
就生产质量而言,在每个类别中都有可靠的选项。关系型数据库有很多。对于文档数据库,我会选择MongoDB或更高级别的JCR系统,例如Apache Jackrabbit。对于图形数据库,我只有使用Neo4j的经验,并且对我来说非常稳定。
无论您做什么,请不要相信“我们拥有解决您所有问题的一种技术”的炒作。它不存在,而且会限制您的思维。

1
我现在相信Neo4j可以很好地取代关系型数据库。
  • 它符合ACID标准
  • 尽管社区版缺少一些功能,如热备份,但企业版有
  • 你可以得到支持
  • 乍一看(在新版本中不需要START子句的情况下),它的查询语言CYPHER几乎可以做到SQL所能做的任何事情

但是

  • 更难找到一个CYPHER开发人员而不是SQL开发人员
  • 它没有等效的优化器:与SQL相比,如何编写查询更加重要

虽然它支持复制,并且Neo明确将其作为大数据产品进行营销,但我无法确认它是否足够可扩展,也没有研究过安全方面。

在最近的版本(比上面的问题年轻),可以在标签上定义索引,这类似于关系型DB中的表上的索引,允许O(log(n))查找。

(fyi: Neo4j没有表,但每个节点(~=行)可以有不同的标签,类似于gmail标签。这更加灵活:您不必选择是否将汽车和自行车放在一个车辆表中:自行车将同时具有:vehicle和:bicycle标签。)
回答最初的问题:Neo4j几乎不支持模式强制执行。Neo建议在数据库上实现自动一致性测试,您可以在发布周期的接受测试实例上运行该测试。

"要找到一位CYPHER开发者比找到SQL开发者更为困难", 但是一名初级的CYPHER开发者可以做到MATCH (a:part)-[:consumes*]->(b:part),返回b,不确定一名初级的SQL开发者是否知道如何进行递归查询。" - Yoann Maingon

0

使用企业级数据库,如Oracle,将为您提供许多功能,这些功能可能是Neo的一部分,也可能不是。这些包括:

  • ACID事务
  • 高可用性/备份/备用
  • 能够使用SQL以最有效的方式获取数据,使用基于成本的优化器 - 数据库根据您的最新统计数据确定检索数据的最佳方式
  • 可扩展性、分区
  • 支持
  • 安全性

如果您要自己编写应用程序的大部分功能,并且不需要关系型数据库管理系统提供的结构和高级功能,或者如果您的数据结构更适合基于图形的数据库,则可以尝试Neo。大多数公司应用程序使用传统的关系型数据库服务器之一的原因是有道理的,但在未来情况可能会有所改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接