在我们常见的数据结构中,图是一种有点冷门,时常被忽视的数据表达方式。大部分场景下,我们的数据关系足够简单,例如,一对一,一对多,这种情况下,表结构(关系数据库)或者文档结构(文档数据库)足以刻画数据之前的关系,对于稍复杂的关联/嵌套数据,通过join和文档嵌套的方式也可以轻松构建,此时在抽象层面,我们可以把数据的结构看作是一个树结构(数仓中也称为星型模型和雪花模型 )。那什么时候会用到图呢?答案是在数据中存在大量多对多的模式(Pattern)时,我们可以应用图数据结构(图数据库)来刻画和解决现实世界的问题。典型的图分析场景有:
- 网络关系的表达与相关优化:社交网络,通讯网络,交通网络
- 推荐算法:网页排序,相似用户推荐
- 关联分析与数据洞察:关键节点分析
- 无监督/半监督学习:社区聚类与挖掘,样本标注
- 数据可视化:可视化数据的关系
下面我们从图的基础概念出发,分别介绍在单机与分布式环境下的图的存储方法,图分析的常见算法。此外,还会重点分析一些图算法的分布式实现以及社区挖掘的应用。