3

我想知道像 Dgraph 和 TigerGraph 这样的数据库如何设法对图进行分片以支持水平缩放而不破坏节点之间的连接,此外还支持许多有趣的算法。
他们声称自己是一个原生图形解决方案,因此像 facebook 或 twitter 这样的方法在这里并非如此。
我想到的唯一解决方案是将图形分布在这么多小型数据库中,这会导致大量节点重复以维护关系。
有任何想法吗 ?
提前致谢

4

1 回答 1

4

所以从技术上讲,关于图分片有两个原则要遵循。第一个是 Edge-Cut,它将边缘分成两部分(传入和传出)并将它们分别存储在不同的服务器中。与边缘关联的每个顶点都分布到集群中的特定服务器。分布式图数据库 Nebula Graph 就是采用这种方法。第二种是Vertex-Cut,它将一个顶点切割成N个部分(取决于顶点有多少边)并将它们存储在不同的服务器中。然后将与顶点关联的每条边分发到集群中的特定服务器。GraphX 就是这样做的。

然而,无论如何,图分片是一个 NP 问题,这比 SQL 中的分片要困难得多。因此,一些供应商的做法可能与仅 Cut-Edge 或 Cut-Vertex 不同。比如你的想法,即传播子图,有点像Neo4j Fabric。一些供应商将整个图结构(不包括属性)放入单个主机内存中,以便获取子图非常快。而一些供应商采用邻接表来分隔图中的节点和边,而没有考虑太多的局部性。

于 2020-06-10T22:15:34.080 回答