1、什么是图数据库
先看下图,关系数据库是以二维表方式存储数据,而图数据库作为NoSQL(非关系型数据库)的一种,是基于图模型,存储实体及实体间关系的一项技术。
图数据库的关键要素是两个:节点(实体,通常也包含实体的属性),线(关系)。以下图为例,节点就是具体的人,而线就是人之间的关系。
图数据库基于图模型以一种直观的方式存储和展示这些关系。因为是基于事物关系的模型表达,图因此也具有天然的可解释性。所以被广泛应用于关联信息的搜索,以及社会网络的分析场景中。
2、图数据库对比传统关系数据库的优势
将示例图扩展
.高性能
以查询要求“张旻”与“何竹”是否有亲属关系为例,关系型数据需要对全表递归扫描关联,且扫描次数需要依赖于穷举后的次数,而如果是图数据库,输入节点名称“张旻”与“何竹”,并根据图连通性(最小联通算法)判断即可获得结果。
这是因为在关系信息的处理场景下,随着数据量的增多和关系深度的增加,关系型数据库由于查询时需要记录间甚至表之间连接操作,从而导致较大的查询和关联成本,性能较差。而图数据库是在存储结构上直接把节点及其关联节点连接在一起。这样,当需要查询一个节点的关联节点时,直接从节点循着链接出发去寻找就可以了,而不需要遍历所有节点,大大节省了查询时间。
简单来说,关系型数据库会随着查询层次的加深、数据量的加大,查询性能会逐渐恶化,使用图数据库查询时,查询工作量仅与被查询的节点关系数有关,而与全局节点数无关,这样当全局节点数变多、关系变得更复杂时,子图的查询工作量不会有太大变化。另外,即使是查询层次变深,对于图数据库来说,只是多查了一层子图,逻辑比较清晰,不会像关系型数据库那样增加遍历工作量。
.直观
图模型是基于事物关系的模型,更符合人们的直观理解,也具备天然的可解释性。
3、图数据库与知识图谱
知识图谱是2012年,由Google提出,其本质是大规模的语义网络,包含实体、属性及其之间的各种语义关系。而图数据库是知识图谱的存储引擎,并且是海量关系数据的计算平台。
知识图谱最早应用在搜索的优化中,先看下图,相对于百度获得的更偏热点的搜索结果,Magi更多是将特朗普作为一个实体,返回其关系网络,及个人标签卡片,并且标注出每条关系的网页来源,其背后即是通过对文本解析后获得结构化数据,并结合机器学习,深度挖掘实体之间的关系,从而返回得到实体的标签、关系网络。
简言之,知识图谱是将知识,以及知识挖掘的过程,做到了可视化,从而具备可解释性。
安利一下网站:https://magi.com/
4、有哪些图数据库工具
这一段不展开做介绍,网上有相应的测评结果:https://www.1data.info/content-643.html
主要提一下Neo4j,其在单机笔记本电脑上即可安装测试,对于新手,有以下特点:
(1)支持SQL查询语言 Cypher
(2)遵循属性图数据模型
(3)支持UNIQUE约束
(4)支持通过Neo4j数据浏览器对数据库进行操作
(5)支持完整的ACID(原子性,一致性,隔离性和持久性)规则
(6)支持查询的数据导出到JSON和XLS格式,并支持Load等方式导入数据
5、neo4j的应用尝试
以网上获取到的电影数据为例(原始文件需要的线下可以给)
实体、关系
这份数据里,最直观的实体是电影,演员,在这里对数据做结构化处理后,获取到4000+电影,33000+演员
而演员在不同的电影里的角色不同,有的甚至是导演,而角色只会产生在电影和演员两个实体之间,即为关系,获取到关系在8万个关系对
这里对于实体的属性,电影选择了电影名称,猫眼url,电影类型,上映时间和地点,拍摄方,以及获取奖项;对于演员,由于原始数据信息较少,所以属性只是将做过的角色作为一项技能属性。
导入neo4j的语句如下:
LOAD CSV WITH HEADERS FROM "file:///film.csv" AS line
CREATE (:film { film:line.film, url:line.url, type:line.type, take:line.take, duration:line.duration, area:line.area, showtime:line.showtime, prize:line.prize})
LOAD CSV WITH HEADERS FROM "file:///actor.csv" AS line
CREATE (:actor { actor:line.actor, role:line.role})
展示
由于大部分电影涉及到大量演员,展示的图过于复杂,现将图的范围缩小,根据特定演员去查询子表
由于近期郑爽比较火,所以查她,其演过5部电影,均是以演员身份
其跟张恒吵得很凶,那他们两个是怎么认识的呢,用以下语句查询两节点之间最短路径,发现闫妮和张恒2018年合作了电影,而闫妮和郑爽之间合作了画壁,那么张恒和郑爽有没有可能是通过闫妮认识的呢?(此张恒可能并非彼张恒,仅做测试而已)
MATCH n=allshortestPaths((a:actor {actor:"郑爽"})-[*]-(b:actor {actor:"张恒"})) return n
6、探讨
以上仅是一个粗略的介绍,大家可以想一下,对于产品创新领域,能否将现有成熟的产品或者商业模式进行拆解,如下:
1、实体:商业模式中的参与方,产品中的工具或者具体技术
2、关系:参与方(公司或者团队或者个人)与成功商业创新之间的关系,具体技术或者工具与失败or成功产品之间的关系
3、最后以时间轴,进行滑动窗口分析,是不是可以看出行业在不同阶段,市场上对于创新所需元素的变化?