Graph DataBase介绍

本文介绍了图形数据库(Graph Database)在处理复杂图状结构数据时的优势,特别是对于社会关系分析的高效性。文章以Skull DB为例,详细阐述了其数据结构、实现、性能以及在139说客(移动微博)中的应用,展示了如何使用图形数据库存储和处理用户关系数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

分析社会关系这类复杂图壮结构的海量数据,使用图形数据库(Graph DataBase)是最好的选择。– 作者:李祎

《程序员》介绍各种NoSQL 数据库的文章已经很多,不过大部分都是基于文档存储 (例如mongo DB)或键值(key-value) 存储(例如Redis 和Hbase)的。 本文介绍NoSQL 数据库中大家不是很熟悉的图形数据库(Graph DataBase),它拥有什么特性,以及它适合那些项目。希望开发者阅读本文后,能从中获得一些启发,在今后实施类似项目时多一种技术选择。

作为NoSQL数据库的一个类型,图形数据库(Graph Database)很长时间都局限在图理论相关的学术圈子里,在业界使用得并不广泛。直到近十年电子商务业务模式逐步成熟,电商们需要对用户在他们网站的购买行为进行分析、发掘用户潜在喜好的商品,开始大量使用到了图理论相关的数据挖掘算法,图形数据库才从实验室慢慢走进实际的软件工程项目中。特别是随着Facebook为代表的SNS网站兴起,对上千万的用户行为和关系数据进行挖掘,发掘其商业价值越发成为迫切的需求和工程难题。 工程师们发现使用图形数据库来存储和计算这些海量数据会更为高效和方便, 这极大推动了图形数据库的发展和它在NoSQL世界的知名度。 现在业内比较著名的图形数据库有Twitter网站的FlockDB , 以及开源项目中的Neo4j 和Infogrid。

Graph Database 的基础概念

  • 点(Node)表示一个实体,例如人,商品,或是一个账户。
  • 边 (Edge)也称做关系(relation),表示点和点之间的连接关系,例如用户A买了商品B。通常边是有方向性的,例如用户A购买了商品B,就表示为A->B;如果是用户A和用户C互相都认识,这种关系就是双向的,表示为A<->B。
  • 属性(propertis)表示点(Node)和边(Edge)所附带的信息,例如一个用户,他带有的属性可能是年龄30岁,爱好篮球等等。需要注意的是,每个点的属性(properties)是动态的,例如同样是用户A和C,A有属性“年龄30岁”,C却没有。但是它却包含属性“职业工程师”。

把点(Node),边(Edge),属性(properties) 概念融合在一起,就可描述出一个图(graph)。图1描述了模拟《黑客帝国》的小型社会图(social graph)。

matrix
(图1)

其中每个头像都代表了一个点(Node), 注意Morpheus有的属性(propertis) rank:Captain, 在其他点都没有这个属性。 边(Edge)用蓝色箭头表示,箭头方向表明两者的关系,边也可拥有属性(properties),例如Morpheus 认识Trinity 包含属性 age:12 years。当千万个点和边被关联起来,这张Social Graph就被无限放大,构成了一张描述了整个虚拟社区的人际关系图。图形数据库就是用来存储这张海量数据关系图的最优工具,没有之一。

传统的关系型数据库和其他NoSQL数据库不能最优化的存储上述社会关系数据。 一方面,每个点包含的属性是不同的。 如果是在关系型数据库中建立的表结构,则需要有许多列的大型表,其中很多行的许多列是空的(稀疏表), 查询时需要联结大量表、使用深度嵌套的SQL。这导致了拙劣的性能,不适合高性能查询。另一方面,图形数据库针对图算法,提供了很多高效的操作特性,这也是它在图计算中优于关系数据库和其他类型NoSQL数据库的地方。例如:

  • 遍历(Traversal): 不同于其他NoSQL数据库,图形数据库支持一系列图遍历的操作。例如图1中,找到Thomas和Architect之间的最短路径。 通常遍历(Traversal)操作需要传入两个参数,一个是启始点(star Node),一个是使用何种遍历规则(traversal specification)。遍历返回的结果,可能是零个,一个或多个点Node的集合。
  • 事件(Events):这个和关系型数据库中的触发器比较类似,当某个事件发生触发某个操作。不同之处在于,关系数据库不能将事件通知到数据库外的应用程序。而对于图形数据库来说,它有可编程的监听接口来供外部程序监听各类事件。例如图1中,外部程序可以注册事件监听器(Event Listener),当 Smith 的vers
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值