图数据库之TinkerPop Provider
Apache TinkerPop 提供了图数据库的抽象接口,方便第三方实现自己的图数据库以接入TinkerPop 技术栈,享受TinkerPop 的Gremlin、算法等福利。TinkerPop将这些第三方称为“Provider ”,知名的Provider包含janusGraph、neo4j、hugegraph等。
Provider包含:
- Graph System Provider
- Graph Database Provider
- Graph Processor Provider
- Graph Driver Provider
- Graph Language Provider
- Graph Plugin Provider
Graph Structure API(图谱数据结构)
Graph最高层的抽象数据结构包含 Graph(图), Vertex(顶点), Edge(边), VertexProperty(属性) and Property.
基于这些基础数据结构,就可以对进行基本的图谱操作。
Graph graph = TinkerGraph.open(); //1
Vertex marko = graph.addVertex(T.label, "person", T.id, 1, "name", "marko", "age", 29); //2
Vertex vadas = graph.addVertex(T.label, "person", T.id, 2, "name", "vadas", "age", 27);
Vertex lop = graph.addVertex(T.label, "software", T.id, 3, "name", "lop", "lang", "java");
Vertex josh = graph.addVertex(T.label, "person", T.id, 4, "name", "josh", "age", 32);
Vertex ripple = graph.addVertex(T.label, "software", T.id, 5, "name", "ripple", "lang", "java");
Vertex peter = graph.addVertex(T.label, "person", T.id, 6, "name", "peter", "age", 35);
marko.addEdge("knows", vadas, T.id, 7, "weight", 0.5f); //3
marko.addEdge("knows", josh, T.id, 8, "weight", 1.0f);
marko.addEdge("created", lop, T.id, 9, "weight", 0.4f);
josh.addEdge("created", ripple, T.id, 10, "weight", 1.0f);
josh.addEdge("created", lop, T.id, 11, "weight", 0.4f);
peter.addEdge("created", lop, T.id, 12, "weight", 0.2f);
- 创建一个基于内存存储的TinkerGraph 实例(TinkerGraph是官方实现的,基于内存的Graph)
2 .创建一个顶点
- 创建边
上面的代码构建了一个基本的图,下面的代码演示如何进行图谱的操作。
实现 Gremlin-Core
一个标准的Graph Provider需要实现OLTP 和OLAP两类接口,官方推荐学习TinkerGraph(in-memory OLTP and OLAP in tinkergraph-gremlin),以及 Neo4jGraph (OLTP w/ transactions in neo4j-gremlin) ,还有 Neo4jGraph (OLTP w/ transactions in neo4j-gremlin) ,还有 HadoopGraph (OLAP in hadoop-gremlin) 。
- 在线事务处理 Graph Systems (OLTP)
1. 数据结构 API: `Graph`, `Element`, `Vertex`, `Edge`, `Property` and `Transaction` (if transactions are supported).
2. 处理API : `TraversalStrategy` instances for optimizing Gremlin traversals to the provider’s graph system (i.e. `TinkerGraphStepStrategy`).
- 在线分析 图系统 (OLAP)
- Everything required of OLTP is required of OLAP (but not vice versa).
- GraphComputer API:
GraphComputer
,Messenger
,Memory
.
OLTP 实现
需要实现structure包下的interface,包含Graph
, Vertex
, Edge
, Property
, Transaction
等等。
-
Graph
实现时,需要命名为XXXGraph
(举例: TinkerGraph, Neo4jGraph, HadoopGraph, etc.).- 需要兼容
GraphFactory
,也就是提供一个静态的Graph open(Configuration)
方法。
- 需要兼容
OLAP 实现
需要实现:
-
GraphComputer
: 图计算器,提供隔离环境,执行VertexProgram,和MapReduce任务. -
Memory
: A global blackboard for ANDing, ORing, INCRing, and SETing values for specified keys. -
Messenger
: The system that collects and distributes messages being propagated by vertices executing the VertexProgram application. -
MapReduce.MapEmitter
: The system that collects key/value pairs being emitted by the MapReduce applications map-phase. -
MapReduce.ReduceEmitter
: The system that collects key/value pairs being emitted by the MapReduce applications combine- and reduce-phases.
作者:Jadepeng 出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi 您的支持是对博主最大的鼓励,感谢您的认真阅读。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
- 应用自然语言处理(NLP)解码电影
- 不引入新的数组,实现数组元素交换位置函数
- (30) 剖析StringBuilder / 计算机程序的思维逻辑
- Java初始化顺序
- ConcurrentHashMap使用示例
- (40) 剖析HashMap / 计算机程序的思维逻辑
- nginx配置https(亲测可用)
- linux中无 conio.h的解决办法
- 运用适配器模式应对项目中的变化
- 开车啦!小爬虫抓取今日头条街拍美女图
- C语言中随机数相关问题
- 算法决策兴起:人工智能时代的若干伦理问题及策略|AI观察
- Win10配置人工智能学习平台Tensorflow的正确姿势
- mysql left( right ) join使用on 与where 筛选的差异
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Basic Level) Practice (中文)1027 打印沙漏 (20 分)
- PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分)
- 关于MySQL varchar类型最大值,原来一直都理解错了
- PAT (Basic Level) Practice (中文)1028 人口普查 (20 分)
- 稀疏矩阵计算器(三元组实现矩阵加减乘法)
- PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
- WPF 获取屏幕某个点的颜色
- 谈一谈递归算法
- 二、类加载器与类初始化深度剖析
- PAT (Basic Level) Practice (中文)1030 完美数列 (25 分)
- 八皇后递归实现
- PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
- PAT (Advanced Level) Practice 1021 Deepest Root (25 分)
- ESlint + stylelint + VSCode自动格式化代码(2020)
- PAT (Basic Level) Practice (中文)1032 挖掘机技术哪家强 (20 分)