1. 图数据库
- 数据库分类: 传统的关系数据库和NoSQL数据库
传统的关系数据库:mySQL、oracle
NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种,分别对应titan、ES、hbase、redis。- 图数据库相对于传统关系型数据库的优点
(1)传统关系型数据库为每一类实体建表,但没有对关系进行表示的机制。因此在更多实体引入之后,我们将需要越来越多的关联表,从而使得基于关系型数据库的解决方案繁琐易错。
(2)图数据库由于其独特的设计,为关系和属性的查询提供了快速的解决方案。- 常见的图数据库
titan、neo4j、OrientDB、JanusGraph、HugeGraph、Trinity
1.4 图数据库比较
4.1 neo4j与titan和JanusGraph:
(1)neo4j的用户生态更加完整,使用量多,受欢迎数据库排名第1。
(2)开源版neo4j不支持分布式,而JanusGraph支持分布式。
(3)neo4j的表示语言不直观,没有sql方便
4.3 Trinity与JanusGraph和Neo4j:
Trinity中的边作为Node的属性存在,本身不能具有属性;JanusGraph和Neo4j的边本身是一个对象,可以具有属性
4.4 titan与JanusGraph
JanusGraph是titan的升级版,titan目前已无人维护。
titan存在的问题:
(1)Titan 1.0.0仅仅稳定支持hadoop 1.2.1
(2)Titan 1.0.0采用较新版本的slf4j(1.7.5)和Hadoop采用的slf4j(1.4.3)版本不一致,可能会导致基于Hadoop的Titan图数据库运算,如mr.updateIndex不能正常运行.
(3)Titan 1.0.0,其PageRankVertexProgram,针对大规模顶点(>= 1000万)时,由于程序bug,没有保存部分顶点的PageRank值
2 图查询语句
2.1 总结
SQL:数据以表形式存在,有比较强的schema定义,表间的数据关联以联接(join)的方式实现。这是一种事实标准,大部分人都想把其它问题也转换回SQL或类SQL的方式上来。
SPARQL:面向RDF(Resource Description Framework)的三元组数据,W3C标准,无schema,在研究中应用非常广泛。SPARQL的查询与RDF是一致的,RDF是图,SPARQL查询是子图匹配。
Gremlin:数据以属性图的形式存在,可以认为是上面两种的混合体,属性仍然在表中,但是联接关系是直接以链接(比如指针)的形式存在的。查询的本质是图遍历,擅长解决求图的直径、点到点之间的路径,比如刘德华连接奥巴马需要几度关系。
Cypher: Neoj4数据库使用的图查询语言
2.2 缺点
1、SQL的问题:
这里涉及到一个问题,属性值并不总是单一值(List),而SQL表是有这个假设的(比如MySQL,PostgreSQL是有Array类型的)。针对每一个多值属性都需要进行额外拆表,这对表的管理带来了巨大挑战。查询时频繁地进行多表联接对数据库性能也是个挑战。另外,也可以直接在关系型数据库中存储三元组,但是查询效率并不高。
2、SPARQL:
Free Schema的方式,在使用Gremlin时可能需要创建的很多表,造成使用不便,效率低下,可以考虑这种方式,例如知识图谱的应用场景