4

我正在从事一个项目,该项目几乎实时执行大量图形操作。我们目前正在使用 Hibernate、MySQL 和 EhCache,但考虑将所有与图相关的持久性转移到像Neo4jTitan这样的图数据库中。

图数据库的性能能比 Hibernate+relational 更好吗?我只是想确保我们不会用六个其他的替换六个。

4

4 回答 4

9

对象图越深,对象/图数据库的性能优势就越大。

超过 7 个 JOIN 时,关系数据库性能显着下降。

CAD/CAM 等几何系统具有材料清单的深度对象图,其性能优于其关系对应物。

关系数据库有一个巨大的优势:关系代数以及数据与访问和操作数据的“方式”之间的清晰分离。但它们并不完美解决所有问题。

于 2013-05-18T00:53:11.567 回答
4

迁移到 neo4j(或某些图形数据库)时的优势是查询时间保持不变(几乎),因此无论数据量增加如何都是可预测的。最好根据您的数据域进行概念验证,因为通用答案通常不适用于 nosql dbs。

取自这里在此处输入图像描述

于 2013-05-18T00:26:32.297 回答
1

图和关系数据库都依赖缓存来提高查询性能。但是,图数据库中的边遍历通常是一个常数时间的操作,如果顶点被缓存,边通常会被缓存。使用 RDBMS,外键遍历需要在目标表上进行 B-Tree 索引查找,这需要 O(log n) 时间。当索引不适合缓存时,数据库将不得不执行缓慢的磁盘搜索操作。

看看比西。如果您的图表适合内存,则查询和更新速度非常快。或者,您可以使用其他蓝图实现,例如 Neo4J 和 Titan,它们可以处理更大的数据集。

于 2013-05-25T03:16:07.313 回答
0

如果您使用的是 Hibernate,那么您将持久保存本质上是对象图的域对象。

数据库是表格结构,可以很好地处理这种关系,但很快就会崩溃。此外,Hibernate 有一个讨厌的习惯,即通过连接拉入整个数据库。

鉴于 Neo4j 的设计以对象关系为核心功能,并且您正在进行域持久化,这种自然设计的契合度肯定会更好。

此外,Neo4j 使用 Lucene(一个愚蠢的快速搜索索引)进行查询,并且可以直接跳转到您的节点进行遍历。

底线:Neo4j 是为令人惊叹的规模和与图形相关的数据的概念而设计的。扩展不会出错,但你会发现工具/库对于这项工作并不像经典数据库连接那样成熟

于 2013-05-18T00:11:20.133 回答