13

“图形数据库 – 转换 a–> RDBMS”

Neo4j 站点似乎暗示您可以在 RDBMS 中做的任何事情,都可以在 Neo4j 中做。

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


我对 Neo4j 感兴趣

  • 能够快速修改数据“模式”
  • 自然表达实体而不是关系和规范化的能力
  • ...这导致了高度表达的代码(比 ORM 更好)

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


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

我特别关心这些:

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

3 回答 3

2

这是一个非常广泛的主题,涵盖了从建模和实施到 IT 和支持的方方面面。在这里要真正回答所有这些问题是不可能的,尤其是在没有详细说明您的情况的情况下。但是,您似乎正在探索选项和途径。所以,作为一个实施了许多系统的人,我将传递一些一般性的思考。

每个人似乎都认为他们的新数据库范式是关系数据库的替代品。所以,对这些说法持保留态度。

我喜欢从 3 个基本模型的角度来思考:关系、文档和图形。根据您的问题空间,其中一项或多项是正确答案。除了关系(基于 SQL),我不会做任何金融交易。如果您正在构建一个 CMS,那么文档数据库就是您要走的路。如果我的应用程序正在建模网络(道路、人员、连接、网络等),我使用 Neo4J。

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

无论您做什么,都不要相信“我们拥有解决您所有问题的一种技术”这样的炒作。它不存在,它会缩小你的思维范围。

于 2014-10-23T18:03:32.027 回答
1

我确信 Neo4j 现在是关系数据库的一个很好的替代品。

  • 符合 ACID 标准
  • 虽然社区版缺少热备份等功能,但企业版有
  • 你可以得到它的支持
  • 乍一看(在不需要 START 子句的新版本中),它的查询语言 CYPHER 几乎可以做任何 SQL 可以做的事情

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

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

在最近的版本中(比上面的问题更年轻),可以在标签上定义索引,其工作方式类似于关系数据库中表的索引,允许 O(log(n)) 查找。

(仅供参考:Neo4j 没有表格,但每个节点(~=row)可以有不同的标签,类似于 gmail 标签。这更灵活:您不必选择是否将汽车和自行车放在一个车辆表或不是:自行车将同时具有 :vehicle 和 :bicycle 标签。)

回答最初的问题:Neo4j 几乎不支持模式强制。Neo 建议在您的数据库上实施自动化一致性测试,作为发布周期的一部分,您可以在验收测试实例上运行这些测试。

于 2015-01-02T08:38:42.940 回答
0

使用诸如 oracle 之类的企业数据库将为您提供许多可能属于或不属于 neo 的特性。这些包括:

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

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

于 2014-07-29T18:50:16.097 回答