这个概念跟关系型数据库的表分区是类似的,也就是在图结构数据量非常大的时候,怎么通过分布式的形式对图进行切分。
在关系型数据库的表分区的应用中
我们对表进行分区可能需要考虑的目的主要是:
一个表存为多个分区之后的join和查询的问题。
同理:我们在设计图分区策略的时候同样需要考虑的是,图进行分区之后,在做图迭代算法(并行计算)时,最小化在数据量的传输,最小化IO操作,只有减少这部分的开销,才能提高图分区的性能。
一般而言,业界主要有这么几种分区的技术:
edge-cut:边分割
边分割的方式一般适合在图数据中low-degree的数据分布中,也就是中图的连接入度或者出度(有向图)比较少的情况,这样vertex的分割就会比较均匀,减少跨多个集群的数据交换;
vertex-cut:点分割
点分割的方式跟边分割的情况相反,在high-degree的图数据分布的情况下,也就是节点的度特别大,通过点分割,就能够同样减少跨多个集群的数据交换,同时减少节点的副本;如PowerGraph的实现方式;
hybrid-cut:动态混合分割
混合分割的技巧通常需要依赖于图计算架构采集的动态的统计信息,
- 首先需要对图的数据分布情况做估计,
- 然后再决定图分割的策略,使用点分割还是边分割的方式,
这种分割方式比较复杂,如Flink Gelly图计算架构就采用这种混合的分割方式;
hash/random partitioning:哈希,随机分区
这种分区方式比较简单粗暴,一般是使用边的hash或者节点的hash来分区,这种方式分区比较简单,但是性能不能保证;
比如OrientDB采用的就是基于hash的分区方式;
总的来说,使用分区技术的图分析架构,一般都是定位为OLAP的解决方案,目前还没有OLTP性能不错,也支持分区的图数据库引擎,商业产品TigerGraph和微软的GraphEngine是少数宣称既支持OLAP也支持OLTP的产品,后续的文章可以重点分析分析
详细请参考:https://blog.csdn.net/temotemo/article/details/83382835
本人还是似懂非懂,以后慢慢补充!!!