A Workload‑Adaptive Streaming Partitioner for Distributed Graph Stores(2021)

本文主要是介绍A Workload‑Adaptive Streaming Partitioner for Distributed Graph Stores(2021),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用于分布式图存储的工作负载自适应流分区器

对象:动态流式大图
划分方式:混合割
方法:增量重划分
考虑了图查询算法,基于动态工作负载
考虑了双动态:工作负载动态;图拓扑结构动态
缺点:分配新顶点时不做过多处理(不考虑初始化分的均衡),仅通过散列的方式分配节点,仅对变化后的图分区进行顶点重分配,需要维护所有节点中的活动顶点,对每个活动顶点进行计算,才能确定需要重新分配的顶点。

摘要:

  流式图划分方法最近引起了人们的关注,因为它们能够利用有限的资源扩展到非常大的图。然而,许多此类方法没有考虑工作负载和图特征。这可能会增加节点间通信和计算负载不平衡,从而降低查询性能。此外,现有的工作负载感知方法不能始终如一地提供良好的性能,因为它们没有考虑图形应用程序中不断出现的动态工作负载。我们通过提出一种名为 WASP 的新颖的工作负载自适应流分区器来解决这些问题,旨在实现低延迟和高吞吐量的在线图查询。由于每个工作负载通常包含频繁的查询模式,因此 WASP 利用现有工作负载来分别捕获频繁访问和遍历的活动顶点和边。该信息用于启发式地提高分区的质量,方法是避免活动顶点集中在与其访问频率成比例的几个分区中,或者通过降低与其遍历频率成比例的活动边的切割概率。为了评估 WASP 对图形存储的影响并展示该方法如何轻松地插入到系统顶部,我们在基于分布式图形的 RDF 存储中利用它。我们对三个合成和真实图形数据集以及相应的静态和动态查询工作负载进行的实验表明,WASP 针对最先进的图形分区器实现了更好的查询性能,特别是在动态查询工作负载中。

引言

  现实世界的图表(例如社交网络和网络图表)通常很大、不断变化并且同时被许多客户查询。因此,单个数据库服务器不再能够提供用于管理此类图的计算资源,以及为其客户端应用程序提供优质服务[13]。传统的解决方案是采用服务器垂直扩展和全复制的方式,成本高昂甚至无法实现。这导致分布式图存储的成本效益设计依赖于大型廉价商品服务器集群上的水平分区或分片以及图数据的并行处理。
  现有的图划分策略大多是针对静态图设计的。当它们用于顶点和边不断变化的动态图(例如语义网和社交网络)时,需要在一批变化后对图进行重量级重新分区,这在大图中可能需要几个小时[41, 48 ,54]。因此,一些图存储(例如 OrientDB、Titan 和 Microsoft Trinity [43])使用朴素的分区方法,例如基于随机哈希的分区,其中每个顶点及其关联边都被分配给哈希桶中的服务器 [11 ]。然而,这些方法可能会导致昂贵的分区间遍历(通信开销大),从而极大地影响查询的性能。因此,一些图存储(例如 Neo4j [53]、HypergraphDB [24] 和 DEX [31])避免了图数据集的分区。
  由于查询工作负载和图拓扑的不断变化,实际图中的分区质量可能会下降。自适应图分区器可以通过利用流方法[35]以及所获得的分区对上述变化的增量适应来处理这个问题。这通常会导致在线监视现有查询工作负载和图拓扑的变化,然后是分区之间某些顶点的可能移动(会产生系统开销)。这种调整可能会给系统带来开销,并可能降低在线查询的效率和吞吐量。因此,自适应策略在时间和内存需求方面应该是“轻量级的”。到目前为止,已经有一些关于工作负载驱动的分区策略的研究工作,以实现在线低延迟图查询[12,5,13-17,21,33,37,56]。然而,仍然存在一些重大缺陷
在这里插入图片描述

  • 1、现有的策略大多与工作负载无关(例如,[10, 22]),因为它们假定遍历边或访问顶点的概率相同,而这并不总是适用于不同的查询工作负载。换句话说,他们没有考虑频繁的查询模式和图元素访问的局部性,这可能会降低系统性能。例如,图 1 描述了一个简单的属性图和查询工作负载。运行以顶点为中心的分区器后,我们得到最佳分区{P1,P2}。但是,这对于工作负载来说并不是最佳的。由于最前沿的“?x authors?y”,每个查询可能需要昂贵的分区间遍历。
  • 2、现有的策略大多与图拓扑无关,因为它们不区分高度和低度顶点,这可能导致负载不平衡。在混合切割模型中,对低度顶点采用以顶点为中心的划分,而高度顶点的入射边则通过以边为中心的划分进行划分。只有两个图分析引擎 [9, 29] 利用混合切割模型。然而,还没有工作负载驱动的分区策略利用该模型。
  • 3、许多现有的工作负载感知策略无法适应查询模式频率波动的动态工作负载。例如,WARP [21]、Partout [17] 和 Peng 等人。方法[37]利用给定的查询日志来提取频繁的查询模式,从而对关联的三元组模式进行分区以增加访问局部性。然而,此类策略有两个缺点:(1) 随着时间的推移,频繁查询模式的流行程度可能会发生变化。据此,我们对大英博物馆(BM)查询日志进行了一些研究[40]。它的时间跨度为2014年4月12日至2014年10月16日,记录了超过120万条查询请求。前四种频繁查询模式的每日到达率如图 2 所示。我们将四种模式的频率添加在一起,因为它们遵循相似的到达趋势。正如我们所看到的,尽管在 2014 年 8 月 4 日到 2014 年 8 月 22 日的短时间内很频繁(每天超过 150 次),但这些模式在大多数时间都不常见。因此,基于具有临时峰值的频繁查询模式的分区计划大多数时候会导致查询效率低下。(2)随着时间的推移,现有的频繁查询模式可能会过时。换句话说,未来的查询很少能被过去的查询日志所反映
    在这里插入图片描述
      为了解决上述问题,我们提出了一种工作负载自适应流图分区器,名为 WASP,它也是拓扑感知的。WASP是自适应工作负载的,它根据现有查询工作负载中频繁遍历的活动边和频繁探索的活动顶点,逐步调整分区(最初通过图顶点的随机散列获得)。从这个意义上说,我们的分区器将活动顶点分布在与访问频率成比例的分区之间。这将导致现有计算负载的平衡,从而增加吞吐量。另一方面,它降低了活动边的切割概率,与它们的遍历频率成正比。因此,属于同一查询的活动顶点可能被并置到同一分区中,这反过来又减少了查询响应时间。WASP通过跟踪活动权重来监视活动边和顶点,活动权重越大意味着活动越多。为了适应现有的工作负载,减少旧的活动边和顶点的影响,WASP利用了一组活动边日志,每个日志存储在一个计算节点中。通过将(现有工作负载的)新的活动边插入边缘日志,(以前工作负载的)旧的活动边逐渐从日志中删除。这种移除将旧的活动边及其相关的旧活动顶点变为被动点,在调整图分区时不再考虑被动点。WASP具有拓扑感知能力,利用混合切割模型,将对高度顶点的探索分布在多个节点上,从而提高了吞吐量。我们的贡献总结如下。
  • 我们提出了一个专用的成本模型来根据频繁的查询模式和图拓扑来管理顶点重新分配。该模型决定应该移动哪个顶点以及移动到哪里,以便最大化重新分配增益。同时,保留每个计算节点上的负载平衡。
  • 我们提出增量轻量级元数据管理,其中数据结构主要是权重计数器。因此,诸如计算托管在不同节点上的活动顶点的兴趣度之类的耗时计算被权重的连续更新所取代。我们利用 Redis [7] 以键值对的形式快速内存存储和访问每个节点中的各种权重。
  • 我们使用现实世界和合成图数据集进行广泛的评估。结果表明,在动态工作负载方面,我们的方法比最先进的图存储要快得多,并且增加了访问图的高度顶点的并行性

背景

  平衡 k 路图分区将图划分为 k 个不相交且平衡的分区,并最小化切割大小。这是一个众所周知的 NP 难问题,其中计算负载平衡(为了最大化并行性)和数据访问局部性(为了最小化节点间通信)是两个相互冲突的问题 [18]。这导致了许多图数据集的启发式划分方法,这些方法可以分为两个正交类别:以顶点为中心/以边为中心和离线/在线。
  以顶点为中心的分区器将每个源顶点及其关联边分配到同一分区中,这反过来又增加了局部性。然而,相应的目标顶点可能被分配给不同的分区,这导致切割它们之间的边切割。这些分区器旨在跨节点执行顶点的平衡分配,以及最小化边切割的数量。尽管以顶点为中心的分区器促进了局部性,但它们可能会严重影响幂律图的计算负载平衡。换句话说,通过将高度顶点的所有边分组在一起,节点的子集会过载。另一方面,以边为中心的方法倾向于将与特定顶点相关的边分配到不同的分区中。但是,边的顶点会在与边位置相同的节点中复制。这些分区器旨在跨节点执行边的平衡分配,并最大限度地减少副本数量。尽管以边为中心的分区器缓解了高度顶点的计算负载不平衡,但它们通常由于较差的局部性而导致更高的通信和同步成本[19]。
  离线或非流式分区器,例如 METIS [25],需要访问整个图数据集,以便在分区之前执行预处理。然而,由于大量使用内存和高计算成本,它们对于非常大的图的扩展性很差,这反过来又影响了在线(非分析)查询处理的性能。这种分区方法后来通过并行化技术得到了改进,例如 ParMETIS [26]。这些并行策略仍然需要全局视图,从而降低了它们的可扩展性
  由于针对大型图扩展离线方法很困难,因此引入了在线或流式方法,随着新的更改流入系统,这些方法会不断更新分区。更准确地说,它们根据输入图的局部知识(例如流元素的当前属性和先前的信息)一次对传入的顶点(对于以顶点为中心的分区)或边(对于以边为中心的分区)进行分区的。这些流方法是一次性的,因为在将顶点或边分配给分区后,不会执行重新分配。由于这些方法的在线性质,轻量级启发式方法(例如 Fennel [49])用于决定在何处分配传入元素。然而,由于图元素被分配一次,图的新流元素可能会恶化其先前的分区。因此,流方法有多种扩展 [34, 50],其中图在几次传递或迭代中被划分。但是分区的质量仍然依赖于流元素的顺序,因为可能没有足够的输入图的局部知识

相关工作

  近年来,为了支持大规模动态图的低延迟查询执行,提出了几种在线分区策略。他们的目标是提高离线图分析的性能,如[27,30,39,42,51,52,55,12,13],或在线图查询的性能,如[10,13 - 17,21,22,32,33,37,38,56],其工作负载驱动的性能与我们在本研究中的工作更相关。由于我们只回顾了图分区方法的一个方面,感兴趣的读者可以参考最近关于图分区的调查[6,20,35]。
  Hermes[33]是一种工作负载驱动的分区方法,其中每个顶点知道其在每个分区中的邻居数量、每个分区的权重和分区的总权重。节点是基于其承载顶点的权重来平衡的,其中顶点的权重表示对它的查询频率。当顶点的权重改变时触发顶点重新分配。将顶点从源分区重新分配到目标分区的增益是它在目标分区中的邻居比源分区中的邻居多多少。Peng等人[36,37]提出了一种工作负载驱动的分区方法,该方法从具有代表性的查询工作负载中挖掘频繁的查询模式。然后,它将相同频繁模式的匹配放到相同的片段中,以改善整个工作负载。
  WARP[21]是一种工作负载驱动的复制方法,根据其主题,RDF三元组最初使用METIS进行分区。然后,它使用一个代表性的查询工作负载,使用n-hop保证方法[23]在集群中复制频繁访问的三元组。给定一个用户查询,WARP确定其中心顶点和半径。如果查询在n跳保证范围内,则WARP将查询发送到所有服务器,这些服务器并行计算查询。否则,查询将被分解为子查询,并为这些子查询创建分布式查询计算计划。子查询由所有服务器并行计算,并将结果发送到合并它们的主服务器。Partout[17]也是由工作负载驱动的,它从具有代表性的查询工作负载中提取频繁的查询模式,并使用它们将数据划分为片段。
  Loom[15]是一种流分区策略,它假定给定图形模式及其相对频率的查询工作负载。在工作负载期间,它发现边缘遍历的常见模式。然后将子图模式匹配查询与这些常见模式进行比较,并尝试通过将每个匹配分配到单个分区来减少频繁遍历的子图的分区间遍历。Taper [16] 将任何给定的初始分区作为起点,并通过估计给定路径查询工作负载的遍历概率来迭代增强它。然后使用它们跨分区交换选定的顶点,并减少分区间遍历的概率。
在这里插入图片描述
  表 1 总结了支持在线图形查询的最先进的工作负载驱动分区策略。Loom、Partout、WARP 和 Peng 等方法基于了解先验查询工作负载。此外,Taper 假定现有路径查询工作负载中模式的给定频率。通过利用这些先验知识,可以突出显示未来查询共同针对的数据集部分。然而,实际上不仅提前掌握这些知识可能很困难,而且这种策略也不能(适当地)适应变化。这将导致分区的质量下降,因为在没有重新分区的情况下,工作负载会不断变化。Hermes考虑了均匀的边缘遍历频率,尽管现实世界图的边缘权重不均匀。另一方面,WARP广泛利用图顶点的复制来改善其访问的局部性。然而,维护副本意味着额外的元数据管理,这反过来又增加了系统开销。更改工作负载也会使副本变得无用,从而增加存储开销。相反,WASP可以采用任何给定的初始分区,且无需预先假定工作负载。此外,它通过不使用复制来避免额外的存储开销。WASP还利用超割模型来缓解高度顶点的负载不平衡并提高并行性。

WASP框架

在本节中,我们将更详细地描述 WASP 的设计。

数据和查询模型

  在本文中,数据由属性图模型表示,因为它已经被广泛接受,并在许多图数据库系统中使用,如Neo4j和Titan。定义如下:
在这里插入图片描述
  直观地说,G是一个有向、有标记和有属性的多重图,其中每个顶点代表一个实体,并具有一个标签或类型以及与该实体相关的一组属性(可能为空),每个边表示实体之间的二元关系,并具有一个标签和一些属性。
  在线图查询可以分为两大类,即路径查询模式匹配查询[11]。因此,我们假设查询工作负载W ={<Q1, f1>, <Q2, f2>,…,<Qn, fn>}作为一组路径查询或模式匹配查询[2,3]及其频率,由基于探索的查询处理器处理[44,57]。模式匹配查询Q遵循与属性图相同的结构,但不允许其顶点VQ,边EQ,标签LQ和属性值ValQ只包含常量,它也允许变量。路径查询确定连接属性图的两个顶点的路径是否存在,可以将其视为模式匹配查询的子集。

工作负载特征

  由于查询工作负载通常是动态的(通过更改关联查询的频率),因此图分区的质量可能会随着时间的推移而降低。因此,WASP 根据以下定义将工作负载特征编码为顶点和边权重
  给定一个属性图 G,对于每条方向边 <u, v>∈EG,其中 u 和 v 在 VG 中,分别驻留在节点 N 和 M 上,有一个遍历权值 𝜔(<u, v>) 表示遍历该边所传递的数据量
  更详细地说,在处理查询 Q 的过程中,从源顶点 u 到目标顶点 v 的遍历将 Q 和 u 从 N 发送到 M,其中 Q 的处理继续,然后接收 u 所需的探索结果。该权重从默认最小值 0 开始,表示其对应的被动边尚未被遍历。通过在现有查询工作负载期间遍历一条边,边的权重逐渐增加,同时减少切边的概率。给定一个属性图 G,对于每个顶点 v ∈ VG ,其中 v 托管在节点 N 上,有一个活动权重 𝜔(v),它等于 v 的关联边的总权重
  更详细地说,由于任何向 v 或从 v 的遍历都需要探索它的邻域,𝜔(v)表示通过访问相应的局部索引对节点 N 施加的计算负载(参见第4.4节)。因此,通过在现有查询工作负载期间访问活动顶点,其活动权重将大于0。作为说明,图3a显示了样本属性图的顶点/边权重。在该图中,越粗的边在图形上表示遍历频率越高的边。
在这里插入图片描述

顶点重新分配

  Fennel流启发式[49]用于大规模图的在线一次分区,其中新添加的顶点被分配(仅一次)给具有最多邻居的现有分区;与此同时,应该对较大的分区进行惩罚,以防止其相对于托管顶点的数量变得过大。该启发式如Eq. 1所示,其中v表示待分配的顶点,N(v)表示v的邻居集合,Vi表示第i个节点上承载的顶点集合,n表示节点数, α \alpha α β \beta β为参数。
在这里插入图片描述
这种一次通过的流启发式算法类似于图的动态分区,其新流的顶点/边被增量地添加到现有分区中[45,49]。然而,一次分区在四个方面无法适应工作负载:(1)一个已分配的顶点永远不会被重新分配;(2)不考虑去除顶点/边;(3)考虑边遍历的均匀频率,(4)分区可能无法根据其承载顶点的总活动权进行平衡。这些缺点促使我们使用自适应工作负载的选择性重分配,这种重分配会不断地重新访问活动顶点,并在适当的时候重新分配它们。这就需要在计算节点的主内存中维护一些基于工作负载的元数据。这种信息量是无法与给定图形数据集的巨大信息量相比的。更详细地说,根据现有的工作负载,假设v∈Si,其中Si是托管在第i个节点上的活动顶点集。以下元数据需要在第i个节点的主存中维护:

  • 在每个节点上托管的 v 的兴趣度,其中每个度从默认最小值0初始化。更详细地说,v对第j个节点的兴趣度(j∈[1…]n])称为Dj(v),它表示v与第j个节点上驻留的顶点之间的关联边的总权重。在查询遍历期间,Dj(v)通过从v向第j个节点上的顶点发送请求来递增,反之亦然。因此,𝜔(v)可以简单地通过v对所有节点的兴趣度求和来计算。请注意,默认值为零的度数不会存储在内存中。它们在图3中也没有显示。
  • 第i个节点的活度权值,称为𝜔(Si)。它表示承载在该节点上的所有活动顶点的聚合活动权重。
  • 托管在第 i 个节点上的边缘日志,称为 l l li。日志存储与第 i 个节点上的活动顶点相关的所有活动边和相应的权重。更详细地说,在现有工作负载期间,最近遍历的边事件与托管在第 i 个节点上的活动顶点有关,被插入到 l l li 的顶部。因此,不再遍历的边e(即属于以前的工作负载)逐渐移到日志的底部,并最终移出日志。这就把e变成了一条被动边,它的权值被设为0,这反过来又改变了e端点的局部性程度。更准确地说,假设e的权值是w,它的端点是u驻留在第j个节点上,v驻留在第i个节点上,那么w要从Di(u)和Dj(v)中减去。w也从𝜔(Si)和𝜔(Sj)中减去。
  • 每个边日志都有一个可配置的大小Δ,它是为所有节点统一设置的,因为它们的日志包含几乎相同数量的活动边。这是因为在查询时通过以边为中心的高度顶点分区减轻了负载倾斜(参见4.3.3节)。当Δ太小时,每个日志存储现有工作负载中遍历的活动边的子集。这意味着会移出一些属于工作负载的频繁遍历的边,并错误地使它们成为被动的。另一方面,当Δ太大时,每个日志存储以前工作负载期间遍历的活动边,而不是现有的边。在这两种情况下,由于不精确的顶点重分配,分区的质量可能会受到影响。Δ的选择和影响将在5.4节中讨论。

  如上所述,出于两个原因,我们的框架使用简单的散列分区方案对节点间的顶点进行初始分区。首先,在为分区分配新顶点时不涉及复杂的逻辑。其次,对于给定的顶点,我们可以简单地查找它的原始托管节点。因此,承载新到达顶点的初始节点可以通过对顶点ID的散列简单地找到。但是,重新分配顶点需要使用查找表来查找它的新托管节点。这个表可以通过一组查找变量以分布式方式实现。更准确地说,每个重新分配的顶点 v 都有一个查找变量作为元数据存储在 v 的初始节点中。注意,只要 v 驻留在初始节点上,就不需要这个查找变量。
  我们的选择性重新分配启发式算法如Eq. 2所示。
在这里插入图片描述
  这种重新分配以顶点 v 作为输入,计算集群中每个节点的分数,并确定得分最高的节点作为 v 的潜在目标节点。为了保证对节点的活动权值进行均衡的划分,有一个惩罚函数 ω ( S i ) ∣ S i ∣ × n \frac{{\omega ({S_i})}}{{\left| {{S_i}} \right| \times n}} Si×nω(Si),其中每个节点的活动权值越高,其得分就越低。
  为防止源节点欠载,要求为:{𝜔( S s {{S_s}} Ss)−𝜔(v)}≥(2−Φ)×Ω,其中Ω表示所有节点的平均聚合活动权值。另外,参数Φ∈[1,2]表示分区的最大负载不平衡程度。例如,Φ= 1表示要求所有节点具有相同的活动权重总和。如果源节点负载不足,则不允许顶点 v 被移动。另一方面,在潜在目标节点(假设是第t个节点)上检查条件:{𝜔( S t {{S_t}} St)+𝜔(v)}≤Φ×Ω,以防止超载。如果节点过载,则在下一个得分最高的节点上检查条件;不过载则选择第 t 个节点作为目标节点。
  假设分区的质量由一对质量因素决定:(1)分区内遍历的概率(衡量局部性)( ξ \xi ξ)和(2)表明现有分区不平衡程度的负载不平衡因子( ϕ \phi ϕ)。这些因素定义如下:
在这里插入图片描述
选择性重分配改进 ξ \xi ξ,因为边的权重越高,切割它的概率越低。换句话说,通过增加边的权重,可以增加其端点分配在同一节点上的兴趣。 ξ \xi ξ 的值越高意味着在现有查询工作负载期间跨分区遍历的概率越小
  图 3 说明了选择性重新分配的一个例子,假设有三个节点, Φ= 1.6 ,并且选择顶点 v3 进行重新分配。

顶点重新分配数据维护

  重新分配顶点 v 会导致将其拓扑数据从作为源的第 i 个节点移动到作为目标的第 j 个节点。此类数据包括 v 与其他顶点的关系以及 v 的属性。它还需要维护相关的元数据,如下所示:(1)将所有与v相关的活动边(及其权值)从 l l li中移除并插入到 l l lj中;(2)将 v 对所有节点的兴趣度移动到目标节点;(3)对于每个与u和v相关的活动边e, u对源节点和目标节点的兴趣度发生变化。更准确地说,将𝜔(e)从Di(u)中减去,再加上Dj(u),(4)改变源节点和目标节点的总活动权值。更准确地说,将w从𝜔(Si)中减去并添加到𝜔(Sj)中,并且(5)将v在其初始节点中的查找变量更新为指向目标节点。
  在重分配过程中,源节点的查询处理器不回答v上的任何请求,以防止它们访问不一致的数据。因此,在查询处理器中维护请求队列,从而使v上的所有请求排队。通过完成重新赋值,v的查找变量指向目标节点。因此,v上的请求将从队列中释放并重定向到目标节点。

顶点重新分配时间

  重新分配顶点的时机对于在分区质量和上述数据/元数据维护开销之间取得平衡至关重要。回想一下,通过改变一个顶点的活动权值,它对不同节点的兴趣程度可能会改变。反过来,这会触发检查重新分配顶点的可能性。另一方面,通过增加顶点的活动权值,对不同节点的兴趣程度的新探索的影响可以忽略不计。因此,在一次重新分配后,只有在进行了类似数量的新探索后,我们才会检查另一次重新分配的可能性。更详细地说,假设重新分配阈值 k,则在 {k, 2 × k, 4 × k, …, 2i× k, …} 次探索后触发顶点重新分配。这显着减少了顶点的重新分配次数。例如,如果k等于10,对于活动权重为10,240的顶点,最大重新分配次数仅为10。目前,我们使用固定的重新分配阈值。重新分配阈值的选择和影响将在5.3节中讨论。

高度顶点

  高度活跃的顶点可能会显著降低在线查询的效率和吞吐量。更准确地说,它们的大邻居可能会在它们的托管节点上产生显著的处理开销,以及在它们的事件边上产生大量的网络流量。作为说明,图4a描绘了一个高度活跃的顶点u,驻留在节点N1上,其邻居分散在N1到N3之间。另外,假设在模式匹配查询Q中有一个图遍历,输入图中的顶点t、u和v1到v100,000是查询中顶点t、u和V的实例。因此,从源顶点u到目标顶点v1到v100,000的遍历需要收集和处理大量的结果,这些结果被发送回N1。此外,从驻留在节点N2上的源顶点t到目标顶点u的遍历会导致从N1到N2发送回大量收集到的结果。
在这里插入图片描述
  WASP通过指定和分割高度顶点缓解了这些问题。因此,对于每个顶点u,当u的度(进出边的度)超过一个可配置的分割阈值时,它被认为是一个高度顶点,这反过来导致u的边被划分,从而顶点u与其邻居并置。更详细地说,出边u→v与其目标顶点v并置,入边u←v与其源顶点v并置。因此,由于u的邻居是通过哈希随机分布的,所以u的边是均匀分布的。这将统一地将查询处理开销分配给托管其拆分的所有节点。如图4b所示,顶点u被分成三个顶点u '、u '和u ',分别驻留在N1、N2和N3上。因此,从作为源顶点的t遍历到作为目标邻居的u的分叉,将导致在所有节点之间划分流量负载。分割阈值的选择和影响将在5.5节中讨论。

实验评价

  在本节中,我们将在广泛的实验中评估WASP,以全面测试其针对不同静态和动态查询工作负载的适应性和性能。
  硬件/软件设置我们已经在C/ c++中实现了WASP。更详细地说,MPICH-3.1.4库和ZeroMQ10套接字用于跨节点通信。WASP部署在一个有10个同质节点以点对点方式连接的集群上,每个节点有48GB RAM, 16个2.4GHz的四核cpu, 160GB SATA HDD,运行Debian Linux 6.0.6。
  数据集和查询工作负载 我们使用三个合成数据集和真实数据集(见表2)以及对这些数据集的六个查询工作负载进行了实验。WatDiv[1]和LUBM[47]是两个合成属性图基准,我们创建了两个数据集,每个数据集包含超过10亿个边。我们使用它们的查询模板生成器分别生成20个和14个基本模板或模式。然后我们为每个模板实例化1K个查询。因此,我们为WatDiv创建了两个工作负载,即WatDiv- sw和WatDiv- dw,每个工作负载总共包含20K个查询。前者通过在没有波动频率的情况下对所有模式的查询进行洗牌来模拟静态工作负载。后者通过连续执行相同模式的查询来模拟动态工作负载。类似地,我们为LUBM创建LUBM- sw和LUBM- dw工作负载,每个工作负载总共包含14K查询。
在这里插入图片描述
  由于WatDiv和LUBM都是合成的,我们也使用DBpedia[28]作为通过众包从Wikipedia中提取的真实属性图数据集。我们从DBpedia查询日志[40]中提取了44个查询模板,从2014年4月12日到2014年10月16日,记录了超过170万个查询请求。我们之所以使用这个日志,是因为它也被其他最先进的图分区器所使用,这反过来又会产生公平的比较。我们删除了有解析错误或运行时错误的查询,最后仍然有120万个查询。和前面一样,我们创建了两个工作负载,即DBpediaSW和DBpedia-DW,每个工作负载总共包含44K个查询。请注意,DBpedia查询日志中的大多数查询只包含一个或几个三重模式,因此DBpedia的模板比其他数据集简单得多。
  关于表1,我们比较了WASP和Hermes[33],后者是唯一没有查询工作负载先验知识的策略。我们还将Peng等人的方法[36]作为基于了解先验查询工作负载的策略的代表进行了比较。它已经显示出对WARP[21]和Partout[17]具有更快的查询响应时间。

分区质量

  我们首先研究了三个分区器在六个静态和动态工作负载下实现的分区间遍历(IPT)比率。在图6a中,x轴显示了10个单元的WatDiv-SW查询流,每个单元包含2K个查询。y轴表示通过执行每个单元的查询获得的IPT比率。从图中可以看出,Hermes和WASP通过顶点重分配策略逐步提高了数据访问局部性,IPT比率逐渐降低。但是由于Hermes没有考虑活动边的权值,所以相应的递减率比WASP要低。另一方面,尽管WASP和Hermes最初通过简单的散列策略对图数据集进行分区,但Peng等人的方法[36]在假设对WatDiv-SW工作负载有先验知识的情况下对整个图数据集进行分区。因此,该图显示了一个几乎稳定的小于0.1的IPT比率,因为Peng等人的方法已经将每个频繁模式的匹配分配到相同的分区。
在这里插入图片描述
  相反,对于如图6b所示的WatDiv-DW查询流,Peng等方法的IPT比率非常高(大于0.8)。更详细地说,它基于第一个工作负载单元中的频繁查询模式对图数据集进行分区,假设对该单元有先验知识。然而,现有的频繁查询模式在随后的单元中会发生变化,这将导致IPT比率的严重增加,因为Peng等人的方法不是工作负载自适应的。另一方面,WASP和Hermes使自己适应了WatDiv-DW查询流。在工作负荷期间,WASP中的IPT比率大约在0.3到0.4之间波动。然而,Hermes的比率上限在0.6到0.7之间,因为它考虑了均匀的边遍历频率,尽管在现实场景中不均匀。类似的推理可以用来证明从LUBM和DBpedia数据集获得的结果。类似的推理可以用来证明从LUBM和DBpedia数据集获得的结果。如图6c所示,在执行LUBM-SW查询流之后,WASP获得了比WatDiv-SW更好的IPT比率(接近0.27),而WatDiv-SW的IPT比率(接近0.43),如图6a所示。这是由于LUBM中存在比WatDiv更复杂的长路径查询。更详细地说,更复杂的查询导致更多的边遍历,这导致WASP识别热(hot)边并配置其端点顶点。另一方面,如图6e所示,与图6a, c相比,WASP和Hermes的行为更接近。这是因为DBpedia中存在简单的短路径查询。
在这里插入图片描述
在这里插入图片描述
  请注意,IPT 比率的提高并不一定会导致查询性能的提高,除非存在均衡的负载分布[35]。因此,我们研究三个分区器实现的“计算”负载平衡。在这方面,尽管Hermes和Peng等人的方法利用现有的工作负载来实现均衡的负载分布,但它们在WatDiv和DBpedia中表现不佳,因为非常高度顶点的所有边都被分组在一起。这将导致一部分机器在计算上被高度活跃的顶点过载。另一方面,WASP拆分这些顶点(见4.3.3节)。因此,图7显示了分区策略在三种静态工作负载上实现的负载不平衡系数( ϕ \phi ϕ)。如图所示,在所有工作负载中,WASP都比其他负载实现了更好的负载不平衡。
在这里插入图片描述

结论及未来工作

  为了在分布式图存储中实现低延迟和高吞吐量的在线查询,我们提出了一种新的**自适应工作负载(顶点重分配)拓扑感知(混合割)**流分区器WASP。由于每个查询工作负载通常包含流行的或类似的查询,因此WASP捕获在现有查询工作负载中经常访问和遍历的活动顶点和边。利用这些信息,通过避免活动顶点集中在与其访问频率成比例的几个分区中,或者通过减少与它们的遍历频率成比例的活动边的切割概率,可以提高分区的质量。我们的实验表明,WASP显著减少了查询工作负载期间的分区间遍历次数。它能够处理不断变化的查询工作负载和图拓扑,同时保持分区的质量。未来,我们计划通过基于工作负载的复制来提高静态工作负载中查询的性能,其中顶点的复制方案(即顶点的副本数量以及这些副本分配到的分区)将根据顶点的读/写频率动态变化。

这篇关于A Workload‑Adaptive Streaming Partitioner for Distributed Graph Stores(2021)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820772

相关文章

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S

终止distributed tensorflow的ps进程

1.直接终止: $ ps -ef | grep python | grep 文件名 | awk {'print $2'} | xargs kill文件名为当前运行的程序,名称如:distribute.py 2.查找pid,后kill: $ ps -ef | grep python | grep 文件名 | awk {'print $2'}$ kill -9 <pid>

Neighborhood Homophily-based Graph Convolutional Network

#paper/ccfB 推荐指数: #paper/⭐ #pp/图结构学习 流程 重定义同配性指标: N H i k = ∣ N ( i , k , c m a x ) ∣ ∣ N ( i , k ) ∣ with c m a x = arg ⁡ max ⁡ c ∈ [ 1 , C ] ∣ N ( i , k , c ) ∣ NH_i^k=\frac{|\mathcal{N}(i,k,c_{

周期性清除Spark Streaming流状态的方法

在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积性的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子: 现在的问题是,PV并不是一直累加的,而是每天归零,重新统计数据。要达到在凌晨0点清除状态的目的,有以下两种方法。 编写脚本重启Streaming程序 用crontab、Azkaban等在凌晨0点调度执行下面的Shell脚本