一般来说,分布式系统是一组计算机程序,它们在多台独立的服务器上协同工作以实现一个共同的目标。这些服务器指的是商用服务器,而不是大型机。这里用于跨服务器协作的硬件大多基于以太网设备或更高端的远程直接数据存取(RMDA)设备。
构建分布式系统的主要原因是采用软件技术和廉价的硬件设备来取代成本高昂的硬件设备。特别是在大多数私有服务器机房,而不是采用公共云或超级计算机条件下,采购成本是业务决策的重要依据。
除了降低成本,分布式技术的另一个好处是它的可扩展性。通过在原有服务器数量的基础上增加几台服务器,然后结合分布式系统的调度和分发能力,新增的服务器可以用来提供额外的服务。
与购买多台相同数量的服务器或购买高配置的服务器相比,分布式技术可以按需购买服务器,这样降低了过度配置的风险,并提高了硬件资源的利用率。
在分布式技术中,由于数据存储和计算需要在多个独立的服务器上实现,因此必须涉及一系列底层技术。在本文只讨论两个问题:一个是数据复制或副本问题,另一个是如何将大型数据的存储和计算分配给独立的服务器。
商用服务器的硬件可靠性和维护能力远低于大型机。因为在服务器机房中,网线松动、硬盘损坏、电源故障几乎每小时都会发生。解决或避免这些硬件问题是分布式软件系统的基本问题。一种常见的解决方案是在多台服务器上复制数据。一旦部分数据副本丢失,系统仍然可以使用剩余的数据副本提供服务。
而且,当系统的访问负载过大时,还可以通过增加副本来提供更多的服务。此外,还需要一些技术来确保数据副本彼此一致;也就是说,不同服务器上的每个副本的数据是相同的。对于图形数据库,也存在数据复制问题。解决这个问题的方法类似于关系数据库或大数据系统中解决数据复制问题的方法。
单台服务器的硬件、内存和CPU是有限的。如果数据太大,就不可能将所有数据存储在一台服务器上。因此,TB级甚至PB级的数据必须分布到多台服务器上,将这一过程称为数据分区。当一个请求要访问多个数据分区时,分布式系统需要将请求分发到每个正确的数据分区,然后组合结果。
在图形数据库中,分布过程被形象地称为图形分区。一个大图被划分为多个小图,每个小图的存储和计算都存储在不同的服务器上。
与关系数据库和大数据系统中的分区问题相比,图形分区问题更值得关注。
以下来看一个静态图结构,例如CiteSeer数据集,它是一个由3312篇论文及其之间的引用组成的科学论文引用网络,是一个可以存储在单个服务器上的小规模数据集。
Twitter2010数据集是Twitter用户的社交网络,由1271万个顶点和2.3亿条边组成。将这一数据集存储在2022年生产的单一主流服务器上相对容易。然而,这可能需要采购价格非常昂贵的高端服务器。
Web数据共享(WDC)数据集由17亿个顶点和640亿条边组成。在当前主流服务器上存储如此大规模的数据集是困难的或是不可能的。
另一方面,由于人类的数据增长速度快于摩尔定律,并且数据之间的连接或关系的数量以指数形式高于数据生产的速度,因此数据分区问题似乎是图形数据库系统不可避免的问题。这听起来与主流分布式技术中数据的分区或散列方式并没有什么不同。毕竟,数据被分区为多个大数据系统。
数据分区有那么容易吗? 并不是,在图形数据库领域,图形分区问题是技术、产品和工程之间的权衡。
第一个问题:应该分区什么?在大数据或关系数据库系统中,根据记录或字段进行行分区或列分区,或者根据数据ID进行分区,这些在语义和技术上都是直观的。但是,图形数据结构的强连通性给图形数据的分区带来了困难。一个顶点可以通过多条边连接到许多其他顶点,其他顶点也可以通过它们的邻边连接到许多其他顶点。它就像网页一样,几乎是相互链接的。那么对于一个图形数据库来说,应该分区什么才能使语义直观自然呢?(在RDBMS中,这相当于当表中有大量外键时如何对数据进行分区。)当然,也有一些自然的语义划分方法。例如,在新冠疫情下,中国和其他国家的各种毒株传播链是两种不同的网络结构。
然后,引入了第二个问题。
第二个问题:如何保证在数据分区之后,每个分区的数据大致均衡。自然形成的图符合幂次较低,即少数20%的顶点连接到其他80%的顶点,这些少数顶点称为超级节点或密集节点。这意味着少数顶点与大多数其他顶点相关联。因此,可以预期包含超级节点的分区的负载和热点与包含其他顶点的其他分区的负载和热点相比要高得多。
上图为互联网上网站的超链接形成的关联网络的视觉效果,其中超级网站(节点)是可见的。
第三个问题:随着图形网络的增长,原有的分区方法逐渐过时,图形的分布和连接模式发生变化,如何评估和执行重新分区?上图展示了人类大脑中860亿个神经元之间连接的视觉效果。随着人们的学习、锻炼、睡眠和衰老,神经元连接每周都在不断变化。原来的分区方法可能根本无法跟上这些变化。
当然,还有许多其他细节需要考虑。本文尽量避免使用太多的专业术语。
不幸的是,从技术角度来看,没有解决图形分区问题的灵丹妙药,每个产品都必须做出权衡。
以下是不同产品的权衡示例。
Neo4j3.5采用无分区分布式架构。
使用分布式系统的原因是确保在多个副本中写入数据的一致性和可用性。这意味着所有的图形数据都存储在每台服务器上,并且数据的大小不能超过单台服务器的内存和硬盘的容量。可以通过添加多个写副本来保证数据写入过程中单台服务器的故障,并且可以通过添加多个读副本来提高读性能(写性能没有提高)。
这种解决方案可以避免上面提到的图形数据分区的三个问题,理论上,将这样的解决方案称为分布式图数据库并没有什么错。
此外,由于每台服务器上的数据都是完整的,因此ACID事务相对容易实现。
按用户进行分布式和分区的架构通常由Neo4j 4.x Fabric表示。根据用户的业务案例,用户可以指定子图可以放在(一组)服务器上。例如,在一个集群中,产品E的子图放在服务器E上,产品N的子图放在服务器N上(当然,为了服务本身的可用性,这些服务器也可以放在上图中提到的因果集群中)。在这一过程中,对于写和读操作,用户都需要指定一台或一组服务器进行操作。
这个解决方案把上面提到的三个问题留给用户在产品层面上进行决策。因此,这样的解决方案也被称为分布式图数据库。
此外,该解决方案可以保证服务器E中的ACID事务,但是由于服务器E中的顶点与其他服务器中的顶点之间存在一定数量的边连接,因此从技术上无法保证这些边的ACID事务。
该解决方案允许多个副本和图形数据分区,这两个过程需要少量的用户参与。
在TigerGraph的解决方案中,顶点和边在编码之后分散在多个分区中。
上述问题中的前两个问题可以通过对顶点和边进行编码来部分解决。用户可以决定是在分布式系统中还是在单台服务器中读取或计算数据。
但是,这样的一组分区必须以完全相同的副本进行复制(因此向外扩展的粒度是整个图表而不分区),这需要更大的存储空间。
还有一些解决方案的架构设计目的是将图形的可扩展性或弹性相对地置于整个系统设计的最高优先级。假设数据的生成速度快于摩尔定律,数据之间的相互作用和关系比数据生成速度呈指数级增长。因此,有必要能够处理如此爆炸性增长的数据并快速提供服务。
在这个解决方案中,明显的特点是存储层和计算层的分离设计,每一层都具有细粒度可扩展性的能力。
数据在存储层使用哈希或一致哈希解决方案进行分区。哈希是基于顶点或主键的ID执行的,这个解决方案只是解决了第一个问题。
为了处理超级节点和负载平衡问题(第二个问题),引入了另一层B-树数据结构。它将超级节点分割为多个处理单元,在线程之间平衡数据,并向外扩展计算层。
对于第三个问题,其解决方案是使用细粒度分区方法,以便可以执行某些分区的扩展。
这种解决方案也被称为分布式图数据库。
以上提到的四种解决方案在产品和技术级别上进行了不同的权衡,重点放在合适的业务场景上。因此,这些解决方案都可以称为分布式图数据库。
原文标题:Distribution and Partitioning in Graph Databases,作者:Lisa liu
当前名称:详解图形数据库中的分布和分区设计
URL标题:http://www.shufengxianlan.com/qtweb/news36/381536.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联