如果有的话,图形数据库如何水平扩展?
Posted
技术标签:
【中文标题】如果有的话,图形数据库如何水平扩展?【英文标题】:How can graph databases scale horizontally, if at all? 【发布时间】:2011-10-09 11:23:05 【问题描述】:对于键值、文档和列族数据库,我知道您可以通过键空间中的复制和分片组合进行横向扩展。但是,对于最短路径等常见的图形操作,这些似乎并没有真正从复制中获得任何好处......而且我看不出你如何在没有找到独立子图的情况下对图形数据库进行分片(非常困难)。
是否有尝试解决此问题的图形数据库?目前这方面的研究是什么?
【问题讨论】:
好问题。对图形数据库进行分片是一个难题。在关系模型下,分片应该比在图形数据库或任何其他“导航”数据库中容易得多。有趣的是,到目前为止,NOSQL 解决方案主要基于导航模型而不是关系模型,尽管 RM 似乎更适合 NOSQL 渴望的东西。这可能是因为这是一个相对不成熟的领域,并且导航数据库可能比关系数据库更便宜且更容易进入市场。 【参考方案1】:复制可用于任何类型的数据库 - 它只是创建多个数据副本,因此您可以提供比单个服务器处理的查询更多的查询。
分片稍微复杂一些,但实际上与键/值或文档存储并没有太大区别,因为内部边必须表示为简单的列表。
虽然在大多数情况下确实不可能找到独立的子图,但实际上并没有必要。只要处理查询的节点能够从其他节点获取数据,本地可用的数据只是一种性能优化。
设置完成后,您有很多选项可根据您使用的图表类型优化性能 - 例如,在社交图表中,您可能会使用位置来为用户选择节点,因为您知道大多数连接都是本地的。
我不知道现有的任何内置分片的图形数据库,可能是因为对于一般情况,该问题更难解决,并且边缘数据的小尺寸意味着您需要一个非常大的图形才能超过容量单个服务器。
【讨论】:
奇怪,我不知道图形数据库不支持分片... Neo、Ttitan 甚至许多多模型数据库(例如 ArangoDB)都支持分片...(不支持分片)意味着查询很容易...... ;-) Neoo4j 声称内置了分片【参考方案2】:Neo4j 支持分片,并正在尝试解决分片问题。请看http://jim.webber.name/2011/02/16/3b8f4b3d-c884-4fba-ae6b-7b75a191fa22.aspx
【讨论】:
【参考方案3】:GoldenOrb 是一个旨在创建水平可扩展图形数据库的概念。它是作为开源发布的,但该项目现在似乎已经死了(指向 GitHub 的链接已离线)。它基于 Hadoop。
尽管如此,这种模型还不能被认为是一个功能齐全的图形数据库,因为对于图形数据库的某些用例而言,需要在节点之间共享的信息量太大且过于复杂。计算的发展,分层缓存分层架构,可以让它被认为是完全可扩展的和事实上的图数据库。
所以总的来说,这个日期的答案是“不”,不完全。
托管该项目的原始网站是这样的:http://goldenorbos.org
【讨论】:
【参考方案4】:查看http://thinkaurelius.com/
对于 Titan,他们使用 Cassandra、HBase 或 BerkeleyDB 作为后备存储,这些存储固有地具有存储的可扩展性特征。
【讨论】:
【参考方案5】:ArangoDB 是一个多模型图形数据库,它可以像文档存储一样水平扩展,也适用于图形。它遵循图的混合索引方法。
借助 SmartGraph 功能,可以通过用户定义的分片键(例如区域、客户、类别或任何其他属性)对图数据集进行分片,并将顶点及其边分布到同一台机器上。然后查询引擎知道给定查询所需的数据位于何处,将请求发送到所需的机器并在本地执行查询。对于许多横向扩展用例,这可能是一个合适的解决方案。https://www.arangodb.com/why-arangodb/arangodb-enterprise/arangodb-enterprise-smart-graphs/
【讨论】:
以上是关于如果有的话,图形数据库如何水平扩展?的主要内容,如果未能解决你的问题,请参考以下文章