图数据库 JanusGraph
Janusgraph 代码示例:https://blog.csdn.net/O_n_O_/article/details/82706542
知识图谱
###1.什么是知识图谱
知识图谱:是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。
###2.知识图谱应用
知识图谱的应用场景非常广泛:
- 场景一 新闻事件的关联分析
- 场景二 识别反欺诈潜在风险
- 场景三 不一致性验证识别
- 场景四 失联客户管理
- 场景五 知识图谱的可视化展示
知识图谱可以自动推断出新的知识。假设下图左侧是原始的知识图谱,根据两层父子关系,图谱可以自动推断出缺失的祖孙关系,正所谓“爸爸的爸爸是爷爷”。
图数据库
图形数据库:是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。
最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。
图具有如下特征
包含节点和边;
- 节点上有属性(键值对);
- 边有名字和方向,并总是有一个开始节点和一个结束节点;
- 边也可以有属性;
图数据库名称 | 来源 | 了解 |
---|---|---|
Neo4j | 开源图形数据库 | 单机性能明显,企业版是集群模式(非分布式) |
JanusGraph | 开源的分布式图数据库 | 好拓展,支持高并发复杂实时图遍历,支持多存储后端,支持多索引后端,支持事务 |
OrientDB | 开源分布式图形-文档混合数据库 | 从社区的评论来看,性能和可扩展性是个问题,缺乏对纯图形操作的针对性 |
ArangoDB | 多模型数据库 | 插入性能低,相关文档很少 ,对spark支持少 |
HugeGraph | 百度开源图数据库 | 2018.8月发布,中文文档,与janusgraph 很相似,但不支持全文索引(见下图) |
JanusGraph简介
JanusGraph是一个可扩展的图数据库,可以把包含数千亿个顶点和边的图存储在多机集群上。它支持事务,支持数千用户实时、并发访问存储在其中的图。
我们可以将图数据库系统的应用领域划分成以下两部分:
用于联机事务图的持久化技术(通常直接实时地从应用程序中访问)。这类技术被称为图数据库,它们和“通常的”关系型数据库世界中的联机事务处理(Online Transactional Processing,OLTP)数据库是一样的。
用于离线图分析的技术(通常都是按照一系列步骤执行)。这类技术被称为图计算引擎。它们可以和其他大数据分析技术看做一类,如数据挖掘和联机分析处理(Online Analytical Processing,OLAP)。
JanusGraph的功能
JanusGraph最大的一个好处就是:可以扩展图数据的处理,能支持实时图遍历和分析查询(Scaling graph data processing for real time traversals and analytical queries is JanusGraph’s foundational benefit.)。
因为JanusGraph是分布式的,可以自由的扩展集群节点的,因此,它可以利用很大的集群,也就可以存储很大的包含数千亿个节点和边的图。由于它又支持实时、数千用户并发遍历图和分析查询图的功能。所以这两个特点是它显著的优势。
它支持以下功能:
(1)分布式部署,因此,支持集群。
(2)可以存储大图,比如包含数千亿Vertices和edges的图。
(3)支持数千用户实时、并发访问。
(4)集群节点可以线性扩展,以支持更大的图和更多的并发访问用户。
(5)数据分布式存储,并且每一份数据都有多个副本,因此,有更好的计算性能和容错性。
(6)支持在多个数据中心做高可用,支持热备份。
(7)支持各种后端存储系统,目前标准支持以下四种,当然也可以增加第三方的存储系统:
- Apache Cassandra®
- Apache HBase®
- Google Cloud Bigtable
- Oracle BerkeleyDB
(8)通过集成大数据平台,比如Apache Spark、Apache Giraph、Apache Hadoop等,支持全局图数据分析、报表、ETL
(9)支持geo(Gene Expression Omnibus,基因数据分析)、numeric range(这个的含义不清楚)
(10) 集成ElasticSearch、Apache Solr、Apache Lucene等系统后,可以支持全文搜索。
(11) 原生集成Apache TinkerPop图技术栈,包括Gremlin graph query language、Gremlin graph server、Gremin applications。
(12) 开源,基于Apache 2 Licence。
(13) 通过使用以下系统可以可视化存储在JanusGraph中的图数据:
- Cytoscape
- Gephi plugin for Apache TinkerPop
- Graphexp
- KeyLines by Cambridge Intelligence
- Linkurious
Graph
- schema由edge labels, property keys和vertex labels组成
- 显式(推荐)或隐式创建
- 在使用过程中修改的,而且不会导致服务宕机,也不会拖慢查询速度
- 一个 Graph 用于一个 Scheam
- Schema Type首次创建时被赋予元素,且不能修改
Edge多样性:
- MULTI 在一对vertex间可以有任意多个同样label的edge
- SIMPLE 在一对vertex间最多只能有一个同样label的edge
- MANY2ONE 多对一
- ONE2MANY 一对多
- ONE2ONE 某verex中具有同样Label的edge,只能有最多一个incoming edge和最多一个outgoing edge
Vertex value的基数:
- SINGLE 每个KEY只允许一个VALUE (默认)
- LIST 以LIST形式保存VALUE,也即可以有重复值
- SET 以SET形式保存VALUE,不能有重复值
Property Key Data Type:
索引类型:
- Composite Index 通过一个或多个固定的key组合来获取Vertex Key或Edge Mixed Index
- Mixed Index 支持通过其中的任意key的组合查询Vertex或者Edge,使用灵活,效率要比Composite Index低,需要索引后端