http://notes.duyichao.site/2018/12/24/知识图谱入门——知识存储/
图数据库
图数据库更适合深层次数据查询,
在深度为2时(即朋友的朋友),两种数据库性能相差不是很明显;深度为3时(即朋友的朋友的朋友),很明显,关系型数据库的响应时间30s,已经变得不可接受了;深度到4时,关系数据库需要近半个小时才能返回结果,使其无法应用于在线系统;深度到5时,关系型数据库已经无法完成查询。而对于图数据库Neo4J,深度从3到5,其响应时间均在3秒以内。
- Why Graph DB?
学过数据结构这么课程的同学脑海中应该或多或少有图的概念。
1.1 什么是图?
图由两个元素组成:节点和关系。
每个节点代表一个实体(人,地,事物,类别或其他数据),每个关系代表两个节点的关联方式。这种通用结构可以对各种场景进行建模 - 从道路系统到设备网络,到人口的病史或由关系定义的任何其他事物。
1.2 什么是图数据库?
图数据库(Graph database)并非指存储图片的数据库,而是以图这种数据结构存储和查询数据。
图形数据库是一种在线数据库管理系统,具有处理图形数据模型的创建,读取,更新和删除(CRUD)操作。
与其他数据库不同,关系在图数据库中占首要地位。这意味着应用程序不必使用外键或带外处理(如MapReduce)来推断数据连接。
与关系数据库或其他NoSQL数据库相比,图数据库的数据模型也更加简单,更具表现力。
图形数据库是为与事务(OLTP)系统一起使用而构建的,并且在设计时考虑了事务完整性和操作可用性。
1.3 两个重要属性
根据存储和处理模型不同,市面上图数据库也有一些区分。
比如:
Neo4J就是属于原生图数据库,它使用的后端存储是专门为Neo4J这种图数据库定制和优化的,理论上说能更有利于发挥图数据库的性能。
而JanusGraph不是原生图数据库,而将数据存储在其他系统上,比如Hbase。
① 图存储
一些图数据库使用原生图存储,这类存储是经过优化的,并且是专门为了存储和管理图而设计的。并不是所有图数据库都是使用原生图存储,也有一些图数据库将图数据序列化,然后保存到关系型数据库或者面向对象数据库,或其他通用数据存储中。
② 图处理引擎
原生图处理(也称为无索引邻接)是处理图数据的最有效方法,因为连接的节点在数据库中物理地指向彼此。非本机图处理使用其他方法来处理CRUD操作。
- 对比
2.1 与NoSQL数据库对比
NoSQL数据库大致可以分为四类:
键值(key/value)数据库
列存储数据库
文档型数据库
图数据库
Neo4j是一个具有原生处理(native processing)功能和原生图存储(native graph storage)的图数据库
其中原生处理过程 就是说 不是使用索引查找的,而是使用免索引零连接来确保高性能的遍历的 索引类似列表 而免索引类似tree、有向无环图等存储的。
原生图存储就是 节点、属性、关系分开存储,然后 每个都是固定大小,可以快速定位去寻找相应的位置。
neo4j neostore.nodestore.db:存储 node neostore.propertystore.db:存储属性 neostore.relationshipstore.db:存储关系
一个重要的设计点是 store 中存储的 record 都是固定大小的,固定大小带来的好处是:因为每个 record 的大小固定,因此给定 id 就能快速进行定位。
具体在下面链接中。
图数据库的内部结构 (NEO4j)
图数据库介绍图数据库源起欧拉和图理论 (graph theory),也可称为面向/基于图的数据库,对应的英文是Graph Database。图数据库的基本含义是以“图”这种数据结构存储和查询数据。它的数据模型主要是以节点和关系 (边)来体现,也可处理键值对。它的优点是快速解决复杂的关系问题。
图具有如下特征:
包含节点和边
节点上有属性 (键值对)
边有名字和方向,并总是有一个开始节点和一个结束节点
边也可以有属性
原生数据库:包括基于main memory和基于disk。
非原生数据库
RDBMS:基于关系数据库
Schema-based:需要设计表结构
Schema-free:不需要设计表结构
基于NoSQL
Key-value:如Redis
Column family
Document store:如MongoDB
Graph database:如Neo4j(广义上的原生数据库)
开源数据库
开源数据库——RDF4J
处理RDF数据的Java框架
使用简单可用的API来实现
RDF存储
支持SPARQL endpoints
支持两种RDF存储机制
支持所有主流的RDF文件格式
开源图数据库——gStore C++
gStore从图数据库角度存储和检索RDF知识图谱数据;
gStore支持W3C定义的SPARQL 1.1标准,包括含有Union,OPTIONAL,FILTER和聚集函数的查询;gStore支持有效的增删改操作
gStore单机可以支持1Billion(十亿)三元组规模的RDF知识图谱的数据管理任务。
商业图数据库
Virtuoso
智能数据,可视化与整合
可扩展和高性能的数据管理
支持Web 扩展和安全
XML SQL RDF FREE TEXT 都可以
Allgrograph
一个现代的,高性能的,支持永久存储的图数据库
基于Restful接入支持多语言编程
Stardog
原生图数据库介绍
Neo4J
参见百度百科:Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
Neo4j数据存储:
OrientDB
OrientDB是一个用Java实现的开源NoSQL数据库管理系统。它是一个多模式的数据库,支持图形、文档、键值对、对象模型和关系,也可以为图数据库的管理与记录之间的提供连接。
Titan(小规模不推荐使用)
弹性和线性增长的数据和用户的可扩展性
数据分布和复制性能和容错性
支持增删改查,支持一致性
支持各种后端存储
支持全局图数据分析,报告,并通过ETL连接大数据平台
支持全文检索
Benchmark
常用的Benchmark
常用衡量指标
1 Load Time
2 Repository Size 存储库大小
当知识图谱越大时,希望读写性能呈线性增长时的斜率低
3 Query Response Time 查询响应时间
单Query:是否使用了Cache
多Query:mix query使得cache失效,大多存在与冷启动,即cache无预先保存与Query相关的结果情况
4 Throughputs 吞吐量
单Query
多Query
5 Inference Support 推理支持
一个音乐的知识图谱例子
艺术家 歌曲trackID 专辑 albumID 相互之间的关系如图 string是各个的名字
生成 <> <> . 的TTL数据
生成数据文件