图数据库简介
讲到NoSQL,常会联想到文档数据库mongodb和key/value数据库redis,其实NoSQL代表了一个非常广的分类,凡是不以 SQL 为中心的关系型数据库均为NoSQL。图数据库属于NoSQL的一种。具体NoSQL下包含哪些数据库,可以查看:http://nosql-database.org/
何为图数据库
在说图数据库之前需要先了解下什么是图。形式上,图是点和边的组合;术语上,图是「一些节点」和「关联这些节点的联系」的组合。图广泛存在于世界之中,从人与人之间的联系、工厂与消费者之间的联系到电话与数据中心网络节点之间的关系、基因和蛋白质之间的关联,都会涉及大量的高度关联数据。这些数据构成了庞大的图,图数据库就是呈现和查询这些关联的做好的方式。
如图中的小型社交网络图,「点」被标记为用户,每个用户有一个名字(微博名字不允许重复);用户之间的关注关系就是他们之间的联系,也就是「边」。
实际场景中的图要比上图复杂的多的多,一个节点只有一个名字属性,一个边只有一个关注标签是不可能满足需求的,所以带标签的属性图(labeled property graph)是目前最流行的图模型形式。带标签的属性图有几个特点:
它包含节点和联系
节点上有属性,如年龄、性别、学历、情感状态等。
节点上有一个多个标签,比如动漫、科技、美食等。
联系有名字和方向,并且总有一个开始节点和结束节点。
联系也有属性,比如关注、夫妻、跑男团等。
图数据库也可称为面向/基于图的数据库,对应的英文是Graph database。图数据库的基本含义是以“图”这种数据结构存储和查询数据,不是存储图片的数据库。图数据库的基本存储单元为:节点、关系、属性。图数据库的代表有Neo4J、FlockDB、InfoGrid、AllegroGraph、GraphDB等。
图数据库与关系数据库
图数据库并不是用来取代关系型数据库的,而是针对一些复杂类的查询提供另外一种解决思路。图数据库有其特定的应用场景,而这些特定的应用场景如果使用 MySQL 数据库等往往会有巨大的性能开销。
假设在一个社交关系数据库中,我们只考虑用户和用户之间的朋友关系(这里我们注意,对于两个用户A,A认为B是A的朋友,并不代表B认为A是B的朋友,这里考虑的是一种有向关系),针对用户A,假如我们想分析谁是用户A的朋友,这个查询通常会比较快,但是我们如果查询“谁的朋友的朋友是用户A”,这个时候如果我们的表没有经过特殊设计,我们是需要遍历整个关系表的,如果是更复杂的多层反向查询问题,那么这个代价只会更高。同样的,在商品数据库中,我们查询某个客户买了哪些商品通常效率比较高,但是我们要查询”哪些客户买了这个商品”甚至是“有哪些买了这个商品的客户也买了那个商品”的这种多层关系的时候,数据库通常就显得力不从心了。
关系型数据库缺少联系。关系型数据库是建立在关系模型基础上的数据库,简单来说就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。联系一般出现在数据表的建模阶段,作为连接表的方式,常见的就是外键。但是随着离群数据(离群值指在数据中有一个或几个数值与其他数值相比差异较大)的增加,数据结构的宏观结构会越发的复杂和不规整,关系模型将造成大量表连结、稀疏行和非空逻辑检查,这会阻碍性能,并使已有的数据库难以响应业务需求的变化。
实际上,关系型数据库在处理反向查询以及多层次关系查询的时候通常开销较大。相比之下,图数据库在处理这类问题就能发挥更大的优势,原因主要有如下几点:
同等的看待节点和边(关系),节点和边都是一等公民并建立表
采用双向指针,原生的图存储,在查节点之间的关系通常可以做到常数级别
图形数据库每个对象是一个节点,之间的关系是一条边。相对于关系数据库来说,图形数据库善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询——在关系数据库中,由于这些查询会导致大量的表连接,从而导致性能问题,而且在设计使用上也不方便。
图形数据库适合用于社交网络,推荐系统等专注于构建关系图谱的系统。
图数据库的优势:
更好,更快速的查询和分析:图数据库为查询相关数据(无论大小)提供了卓越的性能。 图模型提供了固有的索引数据结构,因此它不需要为给定条件的查询加载或接触不相关的数据。这使得它成为更好、更快的实时大数据分析查询的绝佳解决方案。这与HDFS系统相反,HDFS系统具有为数据湖(Data Lake)、顺序扫描和追加新数据(不随机查找)而构建的架构。在这样的系统中,每个查询都涉及文件的大部分。使用图数据库,查询只能触及相关的数据。
更简单和更自然的数据建模:使用关系型数据库建模的人都需要了解数据库的规范化和参照完整性的严格规则。 一些NoSQL数据库则走向了另一个极端,将所有类型的数据放在一个大型表中。 另一方面,在图数据库中,可以定义任意类型的顶点类型来表示对象,并定义边类型来表示特定的关系。 图模型的语义和你想要的语义完全一样,没有标准化也没有浪费。 此外,图模型支持面向对象的思维,因为每个书面查询都需要明确的语义。 没有任何隐藏的假设,比如在关系型SQL中需要知道FROM子句中的表。
同时支持实时更新和查询:图数据库支持对大图形数据的实时更新,同时支持查询。
数据结构的灵活性:图数据库具有灵活的schema修改。用户可以不断添加或删除新的顶点、边和属性,扩展或缩小数据模型。这对管理不断变化的对象类型特别方便。大多数图数据库可以在线修改schema,同时继续提供查询。 相比之下,关系数据库不能轻易地支持在现代数据管理时代如此普遍的频繁schema变更。
建议继续学习:
- hbase介绍 (阅读:11031)
- 基于SSD的数据库性能优化 (阅读:7412)
- TT的作者出新作品鸟:kyoto tycoon (阅读:6844)
- 数据库开发规范 (阅读:3381)
- 国内互联网公司数据库访问层调查 (阅读:3134)
- 数据库程序开发原则:不要删除数据 (阅读:2933)
- 《big data glossary》之MapReduce (阅读:2603)
- NoSQL数据库探讨之一 - 为什么要用非关系数据库? (阅读:2572)
- NoSQL or Relational ? (阅读:2446)
- 数据库发展史知识普及 (阅读:2048)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:标点符 来源: 标点符
- 标签: 图 数据库
- 发布时间:2019-01-01 20:44:30
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] android 开发入门
- [52] Go Reflect 性能
- [52] 图书馆的世界纪录
- [49] 【社会化设计】自我(self)部分――欢迎区
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [38] 程序员技术练级攻略
- [32] 视觉调整-设计师 vs. 逻辑