Graph

本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph。1.5h的talk,听完自觉意犹未尽。本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西能Match。这里记录了一些笔记与各位分享,希望各位园友一起跟着邵斌老师来感受一下Graph的魅力。
Lecture是以三个领域的对比娓娓道来的:Graph、Image与Graphics。直观上讲,Image象征图像处理,Graphics则是计算机图形学。
那么,Graph是什么呢?它其实一点也不神秘。对大多数程序员来说,它可能要比前两者更亲切,因为大部分人都曾在数据结构书中见过它。比如著名的七桥问题,抽象为图的结构,就是这样的:

这里的Graph,我们用图谱来称呼它可能更为合适。和图像图形相比,它显得更抽象一些,所以概括能力也更强:我们可以说一个社交网络是一张图谱,一个人物关系也是一张图谱,图谱在我们生活之中无处不在。引用一句充满哲学意味的话来形容就是:“万物之间皆有联系”。万物组成了一张大大的图谱,每个人都是其中的一个结点。粗浅地了解一下图谱的基本概念以后,就开始进入本次talk的主题。

Challenges

我们在处理大规模的图谱时,会遇到各种各样的挑战,包括但不仅限于以下:

  • 图的多样性
    由于实体和关系的复杂性,图的多样性也是必然事件。笔者以为,图的多样性作为挑战之一,主要是因为它给建设统一的图谱处理系统带来了巨大的困难。不同的图谱依赖的数据特点不一,对于不同的图谱需要的处理方法即使相似,但也还是有不小差异。
  • 计算的多样性
    在图谱处理的背后是大量的计算,所以计算对图谱的处理有很重要的影响。丰富的操作类型决定了多种多样的计算模式,比如:有Online的查询处理,也有Offline的数据分析,不同的操作对应着不同的计算方式,这些都是在构建图谱时所需要面对的challenge。
  • 图的规模
    如果一个任务的计算规模很大,那么我们可以把它分成若干个子任务,在不同的机器上分别跑每个子任务。当每个子任务顺利完成后,我们把子任务的结果汇总合并,就可以得到原任务的结果了。这是传统的做法,也就是MapReduce的大致思路。然而在面对图时,这样的办法就不是很奏效了。最大的困难之处在于:图很难切割。MapReduce是分而治之,但图的处理在第一步上就栽了个跟头。

Design Principles

下面我们来介绍一下在设计一个系统时用到的一些通用的设计准则。

No one size fits all

第一条,也是非常重要的一条设计准则:There is no one-size-fits-all system. What is one size fits all?
没有任何一个系统是可以放之四海而皆准的。当然,现有的系统当然是能够处理图的,从这一方面讲,图这个东西就像链表,数组等,只是一种数据结构,没有什么特别的地方。但是,能够处理只是最基本的功能,我们这里所说的“皆准”指的是:对于不同的数据结构有大致相同的处理性能。
但我们目前分层的体系结构中,在处理图和处理其他数据结构的速度上会有巨大的差异。这种差异主要来源于图区别于其他的一些特性,这些特性恰恰与分层体系结构的设计理念产生了冲突。

Random Access

有计算机基础的同学应该都知道局部性原理。它强调了CPU访存时的一大特性:所访问的存储单元总趋向于在一小块连续区域【更完整准确的解释戳这里】。这样就意味着,当我们访问了一块数据后,接下来一段时间内的活跃数据将是这块数据周围的数据。既然我们可以预测活跃数据,那我们就希望把这些活跃数据预取到访问速度最快的存储器中,以此来减少平均访问数据的时间,这样做代价又小,效果又好。于是,Cache出现了。

但是想象一下,如果我们要对一个图遍历操作,就会在大量的结点之间跳来跳去。图的结构决定了在遍历时是真正的随机存储访问,局部性很弱。在这种局部性概念极度弱化的场景下,一个结点相邻的存储数据刚取到Cache里,跳跃一个相邻结点可能会命中Cache,但再跳跃一个结点,就很难继续命中Cache了。这是制约图处理速度的很重要的一部分原因。
当然,笔者认为,存在大量先验知识的情况下,我们做一些对图结构友好的Cache优化也是可以的。比如统计概率上关联更深的结点,把它们在内存布局上调整靠近,以满足Cache预取的本意(访问最频繁的数据放在最快的存储器中)。

Hard to Divide

之前也提到了,传统的MapReduce无法在图的处理上很好work的主要原因就是图很难Divide。所以也就没有什么高效的分治算法,不好做Partition。

Data Driven

在图谱中,最重要的部分就是支撑图谱的数据。不同的数据组织对图谱的效率影响很大,不仅仅只有算法才会影响图处理的效率。

Tradeoff

我们要做的是一个可work的系统,而不是一个只能供观赏的art。所以在设计一个系统时不能总追求理想化的完美,总要考虑一些 Tradeoff。在图处理的问题上就有一些Tradeoff值得我们考虑:

  1. 要支持online query, offline analytic, 或者两者都支持?
  2. 要针对吞吐量(throughput),还是在响应时间(response time)上做优化?
  3. scale "out" 还是 "up"?
  4. 是否需要事务支持?

在online or offline的选择上,online查询更加注重响应速度,而offline分析则更加注重吞吐量。通常意义来说,online查询更加难以优化。我们上面提到了,在图处理时,数据存取局部性较弱,很难普遍提高响应速度。

图上的并行处理 Parallel Processing of Graphs的更多相关文章

  1. 【ARL】Parallel Processing of Graphs

    Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...

  2. [讲座] Parallel Processing of Graphs

    Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...

  3. 论文解读《The Emerging Field of Signal Processing on Graphs》

    感悟 看完图卷积一代.二代,深感图卷积的强大,刚开始接触图卷积的时候完全不懂为什么要使用拉普拉斯矩阵( $L=D-W$),主要是其背后的物理意义.通过借鉴前辈们的论文.博客.评论逐渐对图卷积有了一定的 ...

  4. Lorenzini:Laplacian与图上的黎曼-罗赫定理

    前两天去听了一下搞代数几何的Dino Lorenzini在交大的两场讲座(“On Laplacian Of Graphs and Generalization”,“Riemann-Roch Theor ...

  5. 2021.11.14 CF1583E Moment of Bloom(LCA+图上构造)

    2021.11.14 CF1583E Moment of Bloom(LCA+图上构造) https://www.luogu.com.cn/problem/CF1583E 题意: She does h ...

  6. yii2组件之多图上传插件FileInput的详细使用

    作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  7. [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上

    将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...

  8. matlab 将多个盒图放在一张图上

    1.boxplot 将多个盒图放在一张图上 x1 = normrnd(5,1,100,1)';x2 = normrnd(6,1,200,1)';X = [x1 x2];G = [zeros(size( ...

  9. ajax 异步插入图片到数据库(多图上传)

    额 大概就这么个样子...截个图 点浏览  选择几张图片 选择完了 确定一下 然后插入数据库 同时在页面中显示插入的图片,代码 也没啥.看下 index.php <html><hea ...

随机推荐

  1. pyspider最佳实践

    pyspider是好东西,非常稳定,很久很久以前架了一个,心冷了一段时间,但人家尽忠职守地持续运行,一直在抓取东西. 结合chrome,抓取代码简直不要太好写,没想到,最头大的,还是它的调度.明明感觉 ...

  2. 时间格式在ios和安卓兼容性的问题:

    在做项目时,在时间显示上遇到一个问题,取后台返回的时间时,在ios手机上时间不显示,安卓手机正常,最后通过Vconsole工具发现,ios不能支持用“—”分割的时间,此外后台返回的时间格式为x年x月x ...

  3. 学习笔记之自然语言处理(Natural Language Processing)

    自然语言处理 - 维基百科,自由的百科全书 https://zh.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7 ...

  4. rem适配移动端

    一.屏幕宽度 / 设计稿宽度 *100 来设置根元素的 font-size   10px = 0.10rem (function (doc, win) { var docEl = doc.docume ...

  5. 从零开始搭建vue+element-ui后台管理系统项目到上线

    前言 之前有些过移动端的项目搭建的文章,感觉不写个pc端管理系统老感觉少了点什么,最近公司项目比较多,恰巧要做一个申报系统的后台管理系统,鉴于对vue技术栈比较熟悉,所以考虑还是使用vue技术栈来做: ...

  6. Oracle数据表字段小写转大写

    BEGIN FOR c IN ( SELECT COLUMN_NAME cn FROM all_tab_columns WHERE table_name = '表名' ) loop BEGIN exe ...

  7. 阿里云ESC-安装nginx

    废话不多说,直接上干货,本人使用putty连接到阿里云ECS 平台(centos7),先输入如下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7 ...

  8. 环境搭建:添加 xgboost 到 Anaconda

    原文参考:https://blog.csdn.net/lvsehaiyang1993/article/details/80619495 原文博主:Big_quant

  9. Vim 简易配置

    Macbook终端vim使用系统剪切板 系统自带的, 可执行程序是 /usr/bin/vim, 安装目录是 /usr/share/vim/, 版本7.3. 我使用 homebrew 后顺手安装了一次 ...

  10. C语言结构体变量字节对齐问题总结

    结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题.从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但 ...