其实他并不是没那么爱你,只是因你爱他爱得太深。
老李最近在做推荐相关的项目需要用到图数据库前期调研选型是必须的不然等项目做到差不多时才发现各种坑将后悔不已目前项目已基本完结经过一段时间使用图数据库老李总结了图数据库相关特性并做了些对比
现实世界中的一切事物都处在联系之中如人际关系电脑网络地理数据分子结构模型等无一不处在纷繁复杂的联系之中这种联系形成了一种互相关联的数据联系才是数据的本质所在传统的关系型数据库并不能很好地表现数据的联系而一些NoSQL(Not Only SQL非关系型数据库)数据库又不能表现数据之间的联系同样属于NoSQL范畴的图数据库是以图的结构形式来存储数据的它所存储的就是联系的数据是关联数据本身
关联数据中的联系本来就很复杂若要在关系型数据库中使用结构化形式来表现这种联系则一般不能直接表示处理起来既烦琐又费事并且随着数据的不断增长其访问性能将日趋下降无数的开发人员和数据库管理人员都或多或少地使用过关系型数据库在其应用的规模化进展过程中对于数据库的性能优化往往捉襟见肘陷入窘境图数据库没有模式结构的定义也不需要这些定义它使用非结构化的方式来存储关联数据所以能够直接表现数据的关联特性
图数据库不管是与关系型数据库相比还是与其他NoSQL数据库相比都具有很多前所未有的优势
人物关系图谱
第一是原生数据库代表数据库为neo4jorientdb其原生体现在查点到边或者边到点的时候不需要走原来关系型数据库的B+索引节点本身就有指向索引类似于链表的指针概念
第二是直接在关系型数据库之上构建的图数据库代表为agens graph以及微软的GraphViewSparkGraphX也可以基于关系型存储结构进行转化成图结构然后完成图运算
第三是以Titan/JanusGraph为代表的使用外置nosql存储如hbase以及使用外置的索引生成工具如elasticsearcholap支持外接spark等工具
第四是在图计算上基于batch进行优化的新一代图数据库如dgraphdgraph的存储结构与cayley同样借鉴了google的论文将每个节点的属性也作为一个节点与主节点产生联系这样更有益与基于batch来设计运算方法
就目前情况来看第一块与第二块的项目比较成熟运行来说相对较稳定而第三和第四块仍然处于起步阶段究其原因原生数据库起步早发展时间较长构建于关系型数据库之上的图数据库依托于关系型数据库的稳定效果也不会太差titan起步也较早但是发展缓慢自15年被收购之后开源项目维护停滞直到17年才有在其之上构建的JanusGraph
Titan数据库
1)对于节点间关系可简单快速查询其多层连接关系
2)快速遍历节点
各大开源图数据库优势
老李对比了几家业界常用的开源图数据库得到如下表格
使用性对比
针对使用便捷性
neo4j有几种强大且便利的第三方python包供使用导入数据有自带的csv格式导入工具orientdb自带有一种ETL工具支持多种格式导入数据操作是自研的python包只提供全面的基础功能使用相比neo4j强大的第三方python包来说略麻烦dgraph仅支持GraphQL+-查询语言一种JSON通信方法python需构建出JSON语句进行交互并且返回结果也需要用JSON语句导入格式支持rdf针对数据插入性能
经测试neo4j单条插入每分钟千条左右单条插入很慢批量导入数据需要借助csv导入工具orientdb有自研ETL工具导入速度较快dgraph使用自带工具批量导入数据可达到每秒近2k条数支持压缩包导入(.gz)
neo4j数据库
好了老李也介绍得差不多了针对大数据量需要用到分布式存储并且需要结合hadoop生态老李推荐JanusGraph如果数据量较小只在单机上测试调研老李推荐neo4j