越来越⽕的图数据库究竟是什么?
随着社交、电商、⾦融、零售、物联⽹等⾏业的快速发展,现实社会织起了了⼀张庞⼤⽽复杂的关系⽹,传统数据库很难处理关系运算。⼤数据⾏业需要处理的数据之间的关系随数据量呈⼏何级数增长,亟需⼀种⽀持海量复杂数据关系运算的数据库,图数据库应运⽽⽣。
世界上很多著名的公司都在使⽤图数据库。⽐如:
社交领域:Facebook, Twitter,Linkedin⽤它来管理社交关系,实现好友推荐
零售领域:eBay,沃尔玛使⽤它实现商品实时推荐,给买家更好的购物体验
⾦融领域:摩根⼤通,花旗和瑞银等银⾏在⽤图数据库做风控处理
汽车制造领域:沃尔沃,戴姆勒和丰⽥等顶级汽车制造商依靠图数据库推动创新制造解决⽅案
电信领域:Verizon, Orange和AT&T 等电信公司依靠图数据库来管理⽹络,控制访问并⽀持客户360
酒店领域:万豪和雅⾼酒店等顶级酒店公司依使⽤图数据库来管理复杂且快速变化的库存
10-15万汽车既然图数据库应⽤这么⼴泛,越来越多的企业和开发者开始使⽤它,那它究竟什么过⼈之处呢,下⾯我
们来揭开它的神秘⾯纱。
1. Why Graph DB?
学过数据结构这么课程的同学脑海中应该或多或少有图的概念。
1.1 什么是图?
图由两个元素组成:节点和关系。
每个节点代表⼀个实体(⼈,地,事物,类别或其他数据),每个关系代表两个节点的关联⽅式。这种通⽤结构可以对各种场景进⾏建模 - 从道路系统到设备⽹络,到⼈⼝的病史或由关系定义的任何其他事物。
1.2 什么是图数据库?
图数据库(Graph database)并⾮指存储图⽚的数据库,⽽是以图这种数据结构存储和查询数据。
图形数据库是⼀种在线数据库管理系统,具有处理图形数据模型的创建,读取,更新和删除(CRUD)操作。
与其他数据库不同,关系在图数据库中占⾸要地位。这意味着应⽤程序不必使⽤外键或带外处理(如MapReduce)来推断数据连接。
与关系数据库或其他NoSQL数据库相⽐,图数据库的数据模型也更加简单,更具表现⼒。
图形数据库是为与事务(OLTP)系统⼀起使⽤⽽构建的,并且在设计时考虑了事务完整性和操作可⽤性。
1.3 两个重要属性
根据存储和处理模型不同,市⾯上图数据库也有⼀些区分。
⽐如:
Neo4J就是属于原⽣图数据库,它使⽤的后端存储是专门为Neo4J这种图数据库定制和优化的,理论上说能更有利于发挥图数据库的性能。
⽽JanusGraph不是原⽣图数据库,⽽将数据存储在其他系统上,⽐如Hbase。
①图存储
⼀些图数据库使⽤原⽣图存储,这类存储是经过优化的,并且是专门为了存储和管理图⽽设计的。并不是所有图数据库都是使⽤原⽣图存储,也有⼀些图数据库将图数据序列化,然后保存到关系型数据库或者⾯向对象数据库,或其他通⽤数据存储中。
②图处理引擎
原⽣图处理(也称为⽆索引邻接)是处理图数据的最有效⽅法,因为连接的节点在数据库中物理地指向彼此。⾮本机图处理使⽤其他⽅法来处理CRUD操作。
2. 对⽐
2.1 与NoSQL数据库对⽐
NoSQL数据库⼤致可以分为四类:
键值(key/value)数据库
列存储数据库
⽂档型数据库
图数据库
分类数据模型优势劣势举例
键值数据库哈希表查速度快数据⽆结构化,通常只被当作字符串或者⼆进制数据Redis
列存储数据库列式数据存储查速度快;⽀持分布横向扩展;数据压缩率⾼功能相对受限HBase
⽂档型数据库键值对扩展数据结构要求不严格;表结构可变;不需要预先定义表结构查询性能不⾼,缺乏统⼀的查询语法MongoDB
图数据库节点和关系组成的图利⽤图结构相关算法(最短路径、节点度关系查等)可能需要对整个图做计算,不利于图数据分布存储Neo4j、JanusGraph 2.2 与关系型数据库对⽐
关系型数据库实际上是不擅长处理关系的。很多场景下,你的业务需求完全超出了当前的数据库架构。
举个栗⼦:假设某关系型数据库中有这么⼏张⽤户、订单、商品表:
当我们要查询:“⽤户购买了那些商品?” 或者 “该商品有哪些客户购买过?” 需要开发⼈员JOIN⼏张表,效率⾮常低下。
⽽“购买该产品的客户还购买了哪些商品?”类似的查询⼏乎不可能实现。
关系查询性能对⽐
在数据关系中⼼,图形数据库在查询速度⽅⾯⾮常⾼效,即使对于深度和复杂的查询也是如此。在《Neo4j in Action》这本书中,作者在关系型数据库
和图数据库(Neo4j)之间进⾏了实验。
丰田rav4内饰图片他们的实验试图在⼀个社交⽹络⾥到最⼤深度为5的朋友的朋友。他们的数据集包括100万⼈,每⼈约有50个朋友。实验结果如下:
深度MySQL执⾏时间(s)Neo4J执⾏时间(s)返回记录数
20.0160.01~2500
330.2670.168~110 000
41543.505 1.359~600 000
5未完成 2.132~800 000
在深度为2时(即朋友的朋友),两种数据库性能相差不是很明显;深度为3时(即朋友的朋友的朋友),很明显,关系型数据库的响应时间30s,已经变得不可接受了;深度到4时,关系数据库需要近半个⼩时才能返回结果,使其⽆法应⽤于在线系统;深度到5时,关系型数据库已经⽆法完成查询。⽽对于图数据库Neo4J,深度从3到5,其响应时间均在3秒以内。
可以看出,对于图数据库来说,数据量越⼤,越复杂的关联查询,约有利于体现其优势。从深度为4/5的查询结果我们可以看出,图数据库返回了整个社交⽹络⼀半以上的⼈数。
3. Neo4J 和 JanuasGraph
根据DB-Engines最新发布的图数据库排名,Neo4J仍然⼤幅领先排在第⼀位:
Neo4J
Neo4J是由Java实现的开源图数据库。⾃2003年开始开发,直到2007年正式发布第⼀版,并托管于GitHub上。
Neo4J⽀持ACID,集、备份和故障转移。⽬前Neo4J最新版本为3.5,分为社区版和企业版,社区版只⽀持单机部署,功能受限。企业版⽀持主从复制和读写分离,包含可视化管理⼯具。
JanusGraph
JanusGraph是⼀个Linux基⾦会下的开源分布式图数据库。JanusGraph提供Apache2.0软件许可证。该项⽬由IBM、Google、Hortonworks⽀持。JanusGraph是由TitanDB 图数据库修改⽽来,TitanDB从
2012年开始开发。⽬前最新版本为0.3.1。
JanusGraph⽀持多种储存后端(包括Apache Cassandra、Apache HBase、Bigtable、Berkeley DB)。JanusGraph的可扩展性取决于与JanusGraph⼀起使⽤的基础技术。例如,通过使⽤Apache Cassandra作为存储后端,可以将JanusGraph简单地扩展到多个数据中⼼。
JanusGraph通过与⼤数据平台(Apache Spark,Apache Giraph,Apache Hadoop)集成,⽀持全局图数据的分析、报告和ETL。
JanusGraph通过外部索引存储(Elasticsearch,Solr,Lucene)⽀持地理、数字范围和全⽂搜索。
3.1 标记属性图模型倒库移库图解
(1)节点
节点是主要的数据元素
节点通过关系连接到其他节点
节点可以具有⼀个或多个属性(即,存储为键/值对的属性)
节点有⼀个或多个标签,⽤于描述其在图表中的作⽤
⽰例:⼈员节点与Car节点济青高速公路
(2)关系
北京奔驰戴克300c关系连接两个节点
关系是⽅向性的
节点可以有多个甚⾄递归的关系
关系可以有⼀个或多个属性(即存储为键/值对的属性)
(3)属性
属性是命名值,其中名称(或键)是字符串
属性可以被索引和约束
可以从多个属性创建复合索引
德国汽车工业协会(4)标签
标签⽤于将节点分组
⼀个节点可以具有多个标签
对标签进⾏索引以加速在图中查节点
本机标签索引针对速度进⾏了优化
4. Cypher图查询语⾔
Cypher是Neo4j的图形查询语⾔,允许⽤户存储和检索图形数据库中的数据。
举例,我们要查Joe的所以⼆度好友:
查询语句如下:
MATCH
(person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
(foaf:Person)
WHERE
person.name = "Joe"
AND NOT (person)-[:KNOWS]-(foaf)
RETURN
foaf
Joe认识Sally,Sally认识Anna。 Bob被排除在结果之外,因为除了通过Sally成为⼆级朋友之外,他还是⼀级朋友。
5. ⼩结
图数据库应对的是当今⼀个宏观的商业世界的⼤趋势:凭借⾼度关联、复杂的动态数据,获得洞察⼒和竞争优势。国内越来越多的公司开始进⼊图数据库领域,研发⾃⼰的图数据库系统。对于任何达到⼀定规模或价值的数据,图数据库都是呈现和查询这些关系数据的最好⽅式。⽽理解和分析这些图的能⼒将成为企业未来最核⼼的竞争⼒。
发布评论