Database design 图形数据库如何水平扩展(如果有的话)?

Database design 图形数据库如何水平扩展(如果有的话)?,database-design,graph,nosql,scalability,Database Design,Graph,Nosql,Scalability,对于键值、文档和列族数据库,我知道您可以在键空间中通过复制和分片的组合进行扩展。但是,对于常见的图形操作,如最短路径等,这些操作似乎并没有从复制中获得任何好处……而且我看不出在不找到独立子图的情况下如何分割图形数据库(非常困难) 是否存在试图解决此问题的图形数据库?这方面的最新研究是什么?复制对于任何类型的数据库都很有用-它只是创建多个数据副本,这样您就可以提供比单个服务器所能处理的查询更多的查询 切分稍微复杂一些,但实际上与键/值或文档存储没有太大区别,因为内部边缘必须表示为简单列表 虽然在大

对于键值、文档和列族数据库,我知道您可以在键空间中通过复制和分片的组合进行扩展。但是,对于常见的图形操作,如最短路径等,这些操作似乎并没有从复制中获得任何好处……而且我看不出在不找到独立子图的情况下如何分割图形数据库(非常困难)


是否存在试图解决此问题的图形数据库?这方面的最新研究是什么?

复制对于任何类型的数据库都很有用-它只是创建多个数据副本,这样您就可以提供比单个服务器所能处理的查询更多的查询

切分稍微复杂一些,但实际上与键/值或文档存储没有太大区别,因为内部边缘必须表示为简单列表

虽然在大多数情况下不可能找到独立的子图,但实际上并没有必要。只要处理查询的节点能够从其他节点获取数据,让数据在本地可用只是一种性能优化

一旦你设置好了,你就可以根据你正在使用的图形的类型来优化性能,例如在社交图形中,你可以使用位置为用户选择节点,因为你知道大多数连接都是本地的


我不知道有任何现有的图形数据库内置了分片功能,可能是因为在一般情况下,这个问题更难解决,而且边缘数据的小尺寸意味着您需要一个非常大的图形才能超过单个服务器的容量。

Neo4j支持分片,并正在尝试解决分片问题。请看一看

GoldenOrb是一个旨在创建水平可伸缩图形数据库的概念。它是以开源的形式发布的,但该项目现在似乎已经死了(GitHub的链接处于脱机状态)。它是基于Hadoop的

尽管如此,鉴于需要在节点之间共享的信息量对于图形数据库的某些用例来说太大和复杂,这种模型还不能被认为是一个完全有能力的图形数据库。计算、分层缓存和分层体系结构的发展,可能使它被认为是完全可伸缩的,并且是一个事实图数据库

因此,总的来说,这个日期的答案是“不”,而不是全部

托管该项目的原始网站如下:

签出


对于Titan,他们使用Cassandra、HBase或BerkeleyDB作为支持存储,这与存储的可伸缩性特征有着内在的联系。

ArangoDB是一个多模型图形数据库,它可以像用于图形的文档存储一样水平扩展。它遵循图形的混合索引方法


使用SmartGraph功能,用户可以通过用户定义的切分键(例如,区域、客户、类别或任何其他属性)切分图形数据集,并将顶点及其边分布到同一台机器上。然后,查询引擎知道给定查询所需的数据驻留在哪里,将请求发送到所需的机器并在本地执行查询。对于许多扩展用例,这是一个合适的解决方案。

好问题。切分图形数据库是一个困难的问题。在关系模型下,切分应该比在图形数据库或任何其他“导航”数据库中容易得多。有趣的是,到目前为止,NOSQL解决方案大多基于导航模型,而不是关系模型,尽管RM似乎更适合NOSQL所渴望的东西。这可能是因为这是一个相对不成熟的领域,导航数据库可能比它们的关系数据库更便宜,更容易进入市场。奇怪的是,我不知道有哪个图形数据库不支持分片。。。Neo、Ttitan甚至许多多模式数据库(如ArangoDB)都支持分片。。。(这并不意味着查询很容易…;-)Neoo4j声称内置了切分功能