图数据库入门指南
一、图数据库的特点
图数据库是面向关联关系图数据的存储数据库,在基于图的数据增加、删除、查询、修改等方面做了不同于其他数据库的设计。在图数据的操作抽象上,采用基于顶点的视角,比如顶点通过其所有出边访问其邻接顶点,这一类的操作也是图数据库系统设计的核心。
二、图数据库的性能
在关联关系的处理上,关系型数据库处理不可避免要用到表的JOIN操作,非常影响性能。而图数据库则是类似指针直接跳转访问,在典型查询上比关系数据库通常有2到3个数量级的性能优势。
三、兼容性比较
现实中的项目通常是不断演进的,意味着数据内容甚至数据格式也会不断发生变化。在关系型数据库中,这意味着表结构的变化,或者多个新表的建立,对源数据的改动非常大。而在图数据库里,仅需添加新的顶点、边、属性,设置为对应的类型即可。从本质上说,一个表代表一个类型的数据,一个顶点代表一个特定的数据,意味着关系数据库更关注数据的类型,而图数据库更关注数据的个体,识别其关联关系。
四、图数据库的直观性
顶点和边的图模型相比于表模型更符合人的思维方式。比如我们面对面用纸笔交流介绍社交网络关系,会自然而然地使用点边的方式画出来,这正是图模型。如果采用关系型数据,先将人物建表,再将关系建表,最后将数据进行映射,需要高度的抽象思维。在图数据上进行分析查询时,也可以直观地通过点边连接的拓扑,交互式找到想要的数据。因此有一种说法是:与关系型数据库相比,图数据关系才是真的处理“关系”的。
分类 | 模型 | 优势 | 劣势 | 典型系统 |
关系型数据库 | 表结构 | 数据高度结构化,一致性强,软件成熟度高 | 面向多跳的关联关系查询低效或不支持 | MySQL,Oracle |
键值数据库 | 哈希表 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 | Redis |
列存储数据库 | 列式数据存储 | 查找速度快;支持分布横向扩展;数据压缩率高 | 数据插入效率偏低、按行的数据操作性能受限 | HBase |
文档型数据库 | 键值对扩展 | 数据结构要求不严格;表结构可变;不需要预先定义表结构 | 查询性能不高,缺乏统一的查询语法 | MongoDB |
图数据库 | 图结构 | 针对关联关系的建模、操作非常高效 | 高度结构化的数据处理能力不及关系型数据库 | Neo4j、JanusGraph |
五、总结
数据库在设计的实现上没有优劣高低之分,而是对不同的使用场景的适应性不同,比如高度结构化的数据在关系型数据库中能实现快速的逐行访问和数据一致性,海量的简单数据在键值对数据库上有最优的可扩展性,关联关系则在图数据库上有最好的模型和性能。