节选自《大数据日知录:架构与算法》十四章,书籍目录在此

对于海量待挖掘数据,在分布式计算环境下,首先面临的问题就是如何将数据比较均匀地分配到不同的服务器上。对于非图数据来说,这个问题解决起来往往比较直观,因为记录之间独立无关联,所以对数据切分算法没有特别约束,只要机器负载尽可能均衡即可。由于图数据记录之间的强耦合性,如果数据分片不合理,不仅会造成机器之间负载不均衡,还会大量增加机器之间的网络通信(见图14-5),再考虑到图挖掘算法往往具有多轮迭代运行的特性,这样会明显放大数据切片不合理的影响,严重拖慢系统整体的运行效率,所以合理切分图数据对于离线挖掘类型图应用的运行效率来说非常重要,但是这也是至今尚未得到很好解决的一个潜在问题。

对于图数据的切片来说,怎样才是一个合理或者是好的切片方式?其判断标准应该是什么?就像上面的例子所示,衡量图数据切片是否合理主要考虑两个因素:机器负载均衡以及网络通信总量。如果单独考虑机器负载均衡,那么最好是将图数据尽可能平均地分配到各个服务器上,但是这样不能保证网络通信总量是尽可能少的(参考图14-5右端切割方式,负载比较均衡,但是网络通信较多);如果单独考虑网络通信,那么可以将密集连通子图的所有节点尽可能放到同一台机器上,这样就有效地减少了网络通信量,但是这样很难做到机器之间的负载均衡,某个较大的密集连通子图会导致某台机器高负载。所以,合理的切片方式需要在这两个因素之间找到一个较稳妥的均衡点,以期系统整体性能最优。

下面介绍两类从不同出发点切割图数据的方法,并分别介绍典型的具体切分算法及其对应的数学分析,首先需要强调一点:在选择具体的切分算法时并非越复杂的算法越可能在实际系统中被采纳,读者可以思考其中的道理,在后面会给出解答。

14.3.1  切边法(Edge-Cut)

现在面临的问题是:给定一个巨大的图数据和p台机器,如何将其切割成p份子图?解决这个图切割问题有两种不同的思路。

切边法代表了最常见的一种思路,切割线只能穿过连接图节点的边,通过对边的切割将完整的图划分为p个子图。图14-6代表将7个节点的图分发到3台机器上,左端展示了切边法方式,图节点的编号代表节点被分发到的机器编号。

          

通过切边法切割后的图数据,任意一个图节点只会被分发到一台机器,但是被切割开的边数据会在两台机器中都保存,而且被切割开的边在图计算的时候意味着机器间的远程通信。很明显,系统付出的额外存储开销和通信开销取决于被切割开的边的数量,图切割时通过的边越多,则系统需额外承载的存储开销和通信开销越高。

前文有述,衡量图数据分片合理与否有两个考虑因素:负载均衡和机器通信量,所以对于切边法来说,所有具体的切割算法追求的目标不外是:如何在尽可能均衡地将图节点分配到集群中的不同机器上这一约束下,来获得最小化切割边数量。

即在每台机器被分发到的节点尽可能均匀的条件约束下,求切割边最少的方法。其中,|V|/p代表所有的节点被p台机器均分所得数值,l≥1代表不平衡调节因子,通过调节l的大小可以控制节点分配的均匀度,当其值为1时,要求完全均分,其值越大,允许的不均衡程度越高。

从上述形式化描述可以看出,lamda约等于1的时候,这个问题本质上是一个图切割中的均衡p路分区(Balanced p-way Partitioning)问题,解决这个问题有很多相关研究(有兴趣的读者可以阅读本章参考文献[4]),但是由于图切割算法的时间复杂度较高,基本不太适合处理大规模数据,所以在真实的大规模数据场景下很少被采用。

在实际的图计算系统中,经常使用的策略是节点随机均分法,即通过哈希函数将节点均分到集群的各个机器中,并不仔细考虑边切割情况。Pregel和GraphLab都采用了这种策略。这种方法的优点是快速、简单且易实现,但是从定理14.1可以证明这种方法会将图中绝大多数的边都切开。

由定理14.1可知,假设集群包含10台机器,则被切割的边比例大约为90%,即90%的边会被切开,而如果包含100台机器,则99%的边会被切开。可见,这种切分方式是效率很低的一种。

14.3.2  切点法(Vertex-Cut)

切点法代表另外一种切割图的不同思路。与切边法不同,切点法在切割图的时候,切割线只能通过图节点而非边,被切割线切割的图节点可能同时出现在多个被切割后的子图中。图14-6右侧是切点法示意图,从图中可看出,图中心的节点被切割成三份,也就是意味着这个节点会同时出现在被切割后的三个子图中。

与切边法正好相反,切点法切割后的图中,每条边只会被分发到一台机器上,不会重复存储,但是被切割的节点会被重复存储在多台机器中,因此,同样存在额外存储开销。另外,如此切割带来的问题是:图算法在迭代过程中往往会不断更新图节点的值,因为某个节点可能存储在多台机器中,也即存在数据多副本问题,所以必须解决图节点值数据的一致性问题。对这个问题,在后面讲解PowerGraph系统时,会给出一种典型的解决方案。

那么,既然切点法图中的边都没有被切割,机器之间是否就无须通信开销了呢?事实并非如此,在维护被切割的图节点值数据一致性时仍然会产生通信开销。所以,对于切点法来说,所有具体算法追求的合理切分目标是:如何在尽可能均匀地将边数据分发到集群的机器中这个约束条件下,最小化被切割开的图节点数目。

即在每台机器被分发到的边尽可能均匀的条件约束下,求平均副本数最少的方法。其中,|E|/p代表所有边被p台机器均分所得数值,l≥1代表不平衡调节因子,通过调节l的大小可以控制边分配的均匀度,当其值为1时,要求完全均分,其值越大,允许的不均衡程度越高。

同样,由于采用复杂图切割算法的时间复杂度太高,所以实际系统中最常用的还是边随机均分

现实世界中的大多数图的边分布都遵循power law法则,理论和实践已经证明,对于遵循这一法则的图数据来说,属于切点法的边随机均分法要比切边法里的节点随机均分法强,其计算效率要高出至少一个数量级。所以总体而言,对于一般情形的图数据,采取切点法要明显优于切边法。

请思考:为何不是越复杂、有效的切分算法越受欢迎?

解答:一般来说,图挖掘算法分为两个阶段。

阶段一:集中式图数据切分与分发;阶段二:分布式图计算。

如果采用复杂的图切割算法,则系统负载均衡好,机器间通信量较少,所以第二阶段运行的效率高,但是采用复杂算法不仅开发成本高,在第一阶段付出的时间成本也很高,甚至因此付出的时间成本要高于在第二阶段产生的效率收益,所以选择何种切分算法也需要有全局的效率权衡。

大数据图数据库之数据分片相关推荐

  1. java 连接janusgraph_基于JanusGraph的大数据图数据库

    导读 知识图谱是近来很火的概念,很多领域都希望能用知识图谱解决一些问题.在零售领域其实也有使用知识图谱的场景,比如阿里使用知识图谱进行商品智能导购以及商品"巡检",而我想试验着把知 ...

  2. 大数据图数据库之TAO数据库

    节选自<大数据日知录:架构与算法>十四章 14.1.2  TAO图数据库 Facebook是目前世界上最著名的社交网站,如果从数据抽象的角度来看,Facebook的社交图不仅包括好友之间的 ...

  3. 大数据图数据库之离线挖掘计算模型

    /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/             author: 张俊林 节选自<大数据日知录:架构与算法>十四章,书籍目录在此 对于离 ...

  4. 知识图谱组队学习Task03——图数据库导入数据

    这里写目录标题 一.知识图谱结构 1 知识图谱实体类型 2.知识图谱实体关系类型 3 知识图谱疾病属性 二.build_graph文件解析 1.总体介绍 2.关键代码解析 项目地址:QASystemO ...

  5. php数据库删除数据,php数据库删除数据的简单示例

    这篇文章主要为大家详细介绍了php数据库删除数据的简单示例,具有一定的参考价值,可以用来参考一下. 对php删除简单示例感兴趣的小伙伴,下面一起跟随512笔记的小编巴闭妹来看看吧! /** * * @ ...

  6. oracle 删除原有的数据,oracle数据库删除数据的两种方式

    当表中的数据不需要是,则应该删除该数据,并释放所占用的空间; 删除表中的数据有delete和truncate两种方式,下面分别介绍: 一.delete语句 (1)有条件删除 语法格式:delete [ ...

  7. 大数据图数据库之MapReduce用于图计算

    /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/                  CopyMiddle: 张俊林 节选自<大数据日知录:架构与算法>十四章,书 ...

  8. mybatis 执行插入操作,insert 返回1,数据库中无数据。数据库中数据的创建时间和插入执行时间不一致。

    大家好,我是烤鸭: 今天记录一下线上的问题,由于不是我们组的代码,所以没参与全程,只是最后有幸听各位大佬探讨解决方案.mybatis 执行插入操作,insert返回1,日志记录和接口返回都正常,但是数 ...

  9. dmp导入数据 oracle_oracle数据库:数据的导入导出及备份

    相信大家在客户现场维护的时候一定会适时地做一些备份操作,对关键业务建立完备的备份机制,本篇文章就是给大家一个linux环境下的参考. 一. 用imp/exp实现数据的导入导出 (一)环境配置 1.执行 ...

最新文章

  1. 有生之年,人工智能会给世界带来什么变化?这里是现代机器人之父Rodney Brooks关于未来的预言
  2. 如何在本机搭建SVN服务器【转】
  3. python掌握程度怎么判断-Python数据分析路上,温故而知新
  4. htmlparser解决PKIX path building failed问题的两种方法
  5. 【2020年第12届全国大学生数学竞赛——资源分享 】【1~11届省赛决赛考题及题解(数学类、非数学类)、推荐学习网址、复习备考书籍推荐】
  6. 初探swift语言的学习笔记一(基本数据类型)
  7. 从0开始学Java——JSPServlet——HttpServletRequest相关的几个路径信息
  8. hp laser103 属性没有配置项_哦?在hp打印机面板上就可以更改打印机ip地址
  9. 【Flask模板】include标签
  10. Elasticsearch学习系列-ElasticSearch 核心概念
  11. 怎么用计算机弹柯南,柯迷们的骚操作有哪些?用计算器弹柯南主题曲,自制缩小药丸...
  12. 【IDEA】idea 运行测试类报错 Failed to resolve org.junit.platform:junit-platform-launcher:1.5.2
  13. Xshell家庭版下载
  14. IDEA Maven 聚合项目(多模块)搭建--最精简
  15. 强口令检测(使用正则表达式)
  16. 多屏显示 全屏后在副显示器_多屏生产力有多重要?联想ThinkVision思逸14显示器...
  17. 经典怀旧软件----PP点点通
  18. 小D课堂-nexus
  19. 鸿蒙初开 原文,《鸿蒙初开,天地混沌》 译文
  20. C++ Learn from菜鸟教程

热门文章

  1. STL 之replace,replace_if,replace_copy,replace_copy_if
  2. STL 之swap, iter_swap, swap_ranges
  3. SQLServer附加数据库提示“版本为661,无法打开,支持655版本……”
  4. COM编程之二 接口
  5. 对弈程序基本技术---最小-最大搜索
  6. 深入了解什么是Docker
  7. Java NIO 介绍和基本demo
  8. 千万不要在深夜提交代码
  9. 用Android Studio开发Java App (Runnable Jar)
  10. 分布式链路跟踪中的 traceid 和 spanid 代表什么?