我想知道,像Dgraph和TigerGraph这样的数据库是如何在不中断节点之间连接的情况下,为了支持水平缩放而对图进行分片的,此外还支持许多有趣的算法。
他们声称是一个原生的图形解决方案,所以像facebook或twitter这样的方法在这里不是这样的。
我脑海中出现的唯一解决方案是将图分散到如此多的小型数据库中,这导致了如此多的节点重复来维护关系。
有什么想法吗?
提前感谢
发布于 2020-06-11 06:15:34
因此,从技术上讲,关于图形分片有两个原则要遵循。第一种是Edge-Cut,它将一条边分成两部分(传入和传出),并将它们分别存储在不同的服务器上。与边相关联的每个顶点被分布到集群中的特定服务器。星云图,一个分布式图形数据库,遵循这种方法。第二个是Vertex-Cut,它将一个顶点分成N个部分(取决于顶点有多少条边),并将它们存储在不同的服务器中。然后,将与顶点相关联的每条边分布到集群中的特定服务器。GraphX是这样做的。
然而,图分片无论如何都是一个NP问题,这比SQL中的分片难得多。因此,一些供应商的做法可能与仅切割边缘或仅切割顶点有所不同。例如,你的想法,即扩展子图,有点像Neo4j Fabric。一些供应商将整个图结构(不包括属性)放入单个主机内存中,以便抓取子图非常快。而一些厂商采用邻接表来分离图中的节点和边,而没有过多地考虑局部性。
发布于 2021-02-19 23:13:40
Objectivity/DB是一个自然分布的对象/图形数据库。节点最多可分布在65,000台服务器上。Server-A上的Node-1可以边缘连接到Server-B上的Node-2,无需复制节点。Objectivity/DB是可大规模扩展的,并且以“接近”的实时速度运行。我还可以执行高速导航查询,这些查询计算100度长的路径,并跨越多个服务器。
https://stackoverflow.com/questions/61901331
复制相似问题