性能 SQL Server 2017 图表与 Neo4j

Posted

技术标签:

【中文标题】性能 SQL Server 2017 图表与 Neo4j【英文标题】:Perfomance SQL Server 2017 Graph vs Neo4j 【发布时间】:2019-07-09 08:07:23 【问题描述】:

我正在研究图形数据库。我偶然发现了 SQL Server 2017,并了解到他们添加了使用图形数据库的选项。但我对性能有一些不确定性。我观看了几个关于这个 SQL Server 2017 Graph 的 Youtube 视频、教程和论文。例如this page。

记住上面的图片。当我试图找到一个节点时,时间复杂度是否真的是 O(n)? Neo4j 等其他图形数据库的性能是否相似?我只是在谈论节点查找而不是最短路径算法等。

我也有一种感觉,SQL Server 中的图形功能只是变相的关系数据库。这是正确的吗?

提前致谢。

【问题讨论】:

"...SQL Server 中的图形功能只是伪装的关系数据库。" - 正如他们所说,“口红涂在猪身上”。 为项目选择图形数据库取决于许多不同的因素,而不仅仅是速度。 Microsoft CosmosDB 是一个强大的图形引擎。它可以扩展到许多不同的地理位置。但与 Azure SQL 2017 相比价格昂贵。如果您已经拥有 RDBMS 数据并想做图形处理,Azure SQL 2017 是正确的路径。 【参考方案1】:

graph databaserelational database with graph capabilities 在数据存储方式方面存在很大差异。

简单总结,当存储triple ( aka 2 nodes connected by a relationship )时,底层数据库的区别将是:

Neo4j,三元组以图形的形式存储在磁盘上,节点具有指向它们之间关系的指针,因此在检索期间它只是从节点追逐的指针 SQL like : 一个节点存储在一个表中,另一个节点存储在另一个表中,但您可以将query 作为图形,但该操作实际上会生成JOIN

基于这两个事实,我们可以说,在原生图中,连接是在写入时执行的,而不是在非原生图中在查询时进行连接。

当您听到distributed 图形、分区、行星尺度等时要非常小心。如果您开始建立必须通过网络遍历的关系,您将总是遇到性能问题。大多数分布式图平台还指出,为了获得最佳性能,您必须将所有内容存储在一个分区上(这违背了分区的目的)。

【讨论】:

但是如果您在 SQL 中的“图表”在 1 个索引表中怎么办?比你不加入,对吧? 好吧,我认为您不能在一个表格行中代表(person)-[:WORKS_FOR]->(company)->[:LOCATION]->(city)-[:IN_PROVINCE]->(province)<-[:LOOK_FOR_JOB_IN_PROVINCE]-(applicant)。如果您有一个表,您将跨多行进行连接;-) 是的,你是对的。我认为所有节点都保存在一张表中,所有边都保存在一张表中。但是您应该按类型存储它们 (docs.microsoft.com/en-us/sql/relational-databases/graphs/…)。笨蛋,这篇文章是2018年写的,以前没发现过这个。不过谢谢你的回答!帮了大忙!

以上是关于性能 SQL Server 2017 图表与 Neo4j的主要内容,如果未能解决你的问题,请参考以下文章

表与视图 SQL Server 的性能

SQL Server 和实体框架性能改进

SQL Server死锁图:请解释一下

带有 SQL 后端的高性能仪表板

SQL SERVER 查看sql语句性能与执行时间

MySql 性能问题与 SQL-Server