图数据库是基于图模型的数据库。相比较于关系型数据库,图数据库是真正注重“关系”的数据库。图数据库特点:
- 支持数据的实时增删查改
- 保证ACID事务性
- 提供可视化
- 高可用、备份恢复
全球知名的数据库流行度排行榜网站DB-Engines数据显示,图数据库的关注度增速远超其他类型的数据库。全球最具权威的IT研究与顾问咨询公司Gartner预测未来全球图处理及图数据库的应用市场都将以每年100%的速度迅猛增长。
数据来源:DB-Engines Ranking per database model category
从图中可知,从2013年1月起至今,图数据库的发展一直属于急速上升的模式。越来越多的人开始关注图数据库。
什么是知识图谱
知识图谱是图数据库最广的应用场景。图数据库具有存储和查询两方面的技术优势。
- 存储方面:图数据库提供了灵活的设计模式
- 查询方面:图数据库提供了高效的关联查询
作为图数据库的底层应用,知识图谱可为多种行业提供服务,应用场景涉及电商、金融、法律、医疗、智能家居等多个领域决策系统、推荐系统、智能问答等。
关于知识图谱定义,复旦大学教授肖仰华在其著作《知识图谱》中这么解释:“作为一种知识表示形式,知识图谱是一种大规模语义网络,包括实体、概念及其之间的各种语义关系。
古希腊三杰知识图谱
如下图,柏拉图就是一个实体,他是一个哲学家(概念)
知识图谱发展与应用
知识图谱已被广泛应用在问答、搜索、推荐等系统,已涉及金融、医疗、电商等商业领域,图谱技术成为“兵家必争”之地。
搜索领域
电商领域
- 智能客服
通过构建商品类目-商品信息-评论信息-促销优惠信息-支付信息-物流信息等等,这样一张大的图可以帮助我们对用户所提的问题进行解释回答。
提供一些设计思路
O2O领域
- Query = 乐事黄瓜
- 实体识别: 乐事{品牌}黄瓜{口味}
- 用户搜索意图:黄瓜味,实际属于一种薯片,通过知识数据召回更多“薯片”数据
- 排序: 结合Query和召回的商品进行排序
图数据库选型比较
各个开源图数据库的活跃程度如图所示
摘自:historical trend of graph DBMS popularity
我们对比3个主流开源图数据库:Neo4j、JanusGraph、HugeGraph。
后续我们重点介绍Neo4j的具体使用。
对比点 | Neo4j | JanusGraph | HugeGraph |
品牌知名度 | 最高 | 高 | 国际知名度一般,国内知名度高 |
开源生态 | 社区版开源,但较多限制, 商业版闭源 | 开源,兼容Apache Tinkerpop生态, 主要由IBM提供云上服务 | 开源,兼容Apache Tinkerpop生态, 由百度领头,提供本土化技术与服务 |
图查询语言 | Cypher | Gremlin | Gremlin |
适用场景偏向 | 人工智能、欺诈检测、知识图谱等场景 | 云服务商、具备技术能力深厚的厂商 | 互联网大规模数据场景,网络安全、金融风控、广告推荐、知识图谱等 |
支持数据规模 | 社区版十亿级 | 百亿级以上 | 千亿级以上 |
大规模数据写入性能 | 在线导入速度慢,脱机导入速度较快 | 较慢 | 在线导入速度快,支持覆盖写 |
大规模数据查询性能 | 快 | 较快,性能抖动较严重 | 快,较稳定 |
功能完善程度 | 最完善 | 完善 | 完善 |
Feature迭代速度 | 趋于完善,新功能上线较慢 | Fork自Titan,主要提供后端存储的版本兼容适配,基本很少上线新Feature | 百度自研,2016年项目启动,开源社区新功能迭代更新快速 |
开放及可扩展性 | 无法扩展 | 可扩展,不过代码复杂导致难度较大,内置支持4种后端存储:HBase、Cassandra、Bigtable、Berkeley | 可扩展,插件化机制扩展容易,内置支持6种以上后端存储:RocksDB、Cassandra、HBase、ScyllaDB、MySQL、PostgreSQL等 |
数据导入工具 | 支持CSV在线导入,速度在1万/秒内;支持neo4j-import脱机导入,速度在10万/秒级别,只能用于初始化导入 | 未提供支持 | 支持在线导入,速度在10万/秒级别,支持格式丰富:CSV、TXT、Json,支持从HDFS导入并兼任其各类压缩格式,支持从传统关系型数据库导入,包括MySQL、Oracle、PostgreSQL、SQL-Server等,支持从消息队列导入 |
数据备份恢复 | 支持脱机备份与恢复,需停机状态, 商业版支持在线增量备份与脱机恢复 | 未提供支持,需要用户手动写程序 | 支持在线远程备份,支持在线远程恢复 |
数据增量备份 | 商业版支持,且支持备份数据加密 | 不支持 | 不支持 |
API与客户端 | 支持HTTP API,支持Python、Java、Go、C#、JS语言版本的Client | 支持HTTP API或WebSocket,支持Java、Python、C#、JS语言版本的Client | 支持HTTP RESTful API,原生仅支持Java语言Client; 支持Gremlin API,如果对外暴露Gremlin-Server后可支持Java、Python、C#、JS语言版本的Client |
可视化界面 | 支持,功能丰富 | 不支持,需要用户集成第三方界面 | 支持,功能丰富,支持可视化的数据建模、导入、分析等 |
内置常用图算法 | 提供安装算法包,提供了丰富的基本图算法,包括路径搜索、相似性、中心性、社区检测、链接预测等类别的算法 | 不支持 | 内置提供了基本的图算法,包括路径搜索、协同推荐、中心性、社区发现等类别的算法 |
支持图计算平台集成 | 未提供支持 | 支持Spark GraphX、Giraph等 | 支持Spark GraphX |
基础功能 (属性图的增删该查、持久化存储、元数据、事务、缓存、查询优化、增量更新图) | 支持 | 支持 | 支持 |
ACID事务 | 支持 | 部分支持,根据后端存储而定,Berkeley后端可完整支持事务, Cassandra后端支持原子性提交事务,HBase后端仅支持单行原子性理解,可能导致多行数之间据不一致 | 部分支持,根据后端存储而定,MySQL、PostgreSQL后端可完整支持事务,RocksDB、Cassandra后端支持原子性提交事务,HBase后端仅支持单行原子性;保证最终一致性 |
Schema约束 | 商业版支持,包括属性非空、唯一性等约束,同时也支持Schema-Free | 支持,同时也支持Schema-Free | 支持,包括模式校验、属性非空、唯一性等约束,不允许Schema-Free |
属性索引 | 支持简单索引和复合索引,支持全文索引,依赖第三方Lucene库 | 支持复合索引和混合索引,复合索引允许精确匹配查询,混合索引支持范围查询、全文检索和空间检索,依赖第三方系统ES或Solr | 支持二级索引、范围索引、联合索引、全文索引,允许精确匹配查询、范围查询、全文检索等,均为原生实现不依赖第三方系统,不支持空间检索 |
图存储类型 | 本地存储 | 非本地存储,支持分布式存储 | 非本地存储,支持分布式存储 |
图分区 | 不支持 | 支持 | 支持 |
超级点问题 | 超级点的邻接边查询慢,十字链表存储结构难以加速部分边的查询 | 通过Vertex-Centric索引可缓解 | 通过Vertex-Centric索引可缓解,支持全量获取数据 |
多图实例 | 版本4.0支持 | 支持 | 支持 |
主键ID、自定义ID | 不支持 | 不支持主键ID,有限制的支持自定义Long ID,不过会导致数据不一致 | 支持 |
顶点或边数据的TTL | 不支持 | 支持,可精细到顶点属性粒度 | 支持 |
用户认证与权限控制 | 商业版支持 | 支持用户认证 | 支持用户认证、支持基于用户角色的权限控制 |
高危查询语句限制 | Cypher无关 | 不支持Gremlin高危语句限制 | 支持,可限制用户执行高危Gremlin语句,如禁止访问本地文件、退出进程、打开Socket连接等高危操作 |
运行中语句跟踪 | 商业版支持,包括:列出正在运行的查询语句、中断正在运行的查询 | 不支持 | 同步Gremlin查询不支持跟踪,异步Gremlin查询支持状态跟踪和任务取消 |
LDAP集成 | 商业版支持 | 未提供支持 | 未提供支持,可扩展插件 |
高可用HA | 商业版支持 | 未提供支持 | 商业版支持 |
监控 | 商业版支持 | 支持Metrics监控 | 支持监控接口 |