图数据库Titan在生产环境中的使用全过程+分析
来源:互联网 发布:手机照片编辑软件 编辑:程序博客网 时间:2024/04/28 10:05
注:本文以Hbase作为backend,并以下图为例
0、数据模型
Titan在Hbase中的存储结构
Table “名称:titan”
Column Family 1:e
CF2:?
Column:
’knows’的ID+IN+点1的ID+边8的ID
Column:
’created’的ID+OUT+点3的ID+边11的ID
Column:
’created’的ID+OUT+点5的ID+边10的ID
Column :
’name’的ID
Column :
’age’的ID
RowKey
v1的ID
Weight=1.0
Weight=0.4(字符串?)
Weight=1.0
Name=”josh”
Age=32
上面的RowKey和ColumnKey都是合成的,实际存成HBase的字符数组中,所以直接查看只能看到二进制串,必须知道相应格式才能解析出来。例如边的ColumnKey中有个表示方向的标记IN或OUT,代码中是这样的:
1、创建一个图
<pre name="code" class="java">// Gremlinconf = new BaseConfiguration();conf.setProperty("storage.backend","hbase");conf.setProperty("storage.hostname","77.77.77.77,77.77.77.78");conf.setProperty("storage.tablename","graph1");g = TitanFactory.open(conf);
setProperty("storage.tablename","graph1");
2、插入节点
g.addVertex([name:"marko", age:29]);
那么Titan是如何执行这条语句的呢?即如何把点v1放入到本文开头描述的hbase的数据模型中呢?
g.addEdge(g.v(1),g.v(4),"created",[weight:23]);
首先从图中读取ID为1和ID为4的两个结点,接下来就是对Rowkey为1和4的两个行进行写入操作。在HBase的大表中专门有一行保存了边和点的属性名和id的对应关系。如果图g中已经有了Label为“created”的边,就在该行中找到该Label的ID。否则新建一个新的ID和Label的对应关系表示“created”的ID,并保存在该行中。
在1所在的行中建立一个新的Column,Column名字是一个混合的二进制字段,其中包含了“created”的ID,边的方向(out),vertex-centric indices排序用的sort key(本例为空),相邻的邻接点的ID差值(4-1的前一个邻接点的ID)和这条边自身的独有ID。这个Column的Value则是混合了Label的signature(本例为空)和所有Property(weight=23)的另一个二进制字段。
在4所在的行中建立了另一个相对应的Column,保存了4的入边。3、存储一个图
4、根据属性查询节点
g.V.has(“age”, GREATER_THAN, 10).has(“name”, “marko”)
当用户调用hasNext时,titan根据对应的索引找到其rowKey位置,在用户调用next时输出
5、遍历查询
查询上图中,v1出度边为know的邻居中,age>10的节点,查询语句为g.v(1).out('know').has(age,gt,10);- 图数据库Titan在生产环境中的使用全过程+分析
- 图数据库Titan在生产环境中的使用全过程+分析
- 图数据库Titan/Gremlin查询过程分析
- 图数据库Titan的使用总结
- MySQL数据库环境使用全过程
- MySQL数据库环境使用全过程
- MySQL数据库环境使用全过程
- Ceilometer在生产环境应用可行性分析
- Tomcat在生产环境中的性能优化
- Elasticsearch在生产环境中的优化
- Django在生产环境中的部署
- Django在生产环境中的部署
- 图数据库 Titan 快速入门
- 在生产环境中使用 virtualenv
- 使用Docker在生产环境部署应用
- 在生产环境使用Docker部署应用
- 回顾:在生产环境中使用Haskell
- rinetd 在生产环境要谨慎使用
- Java的 字节流 InputStream 类及其子类 FileInputStream 的使用
- 【微机原理】-存储器
- Multiply Strings
- UTC时间与北京时间的差多久
- 三大数据库连接语句
- 图数据库Titan在生产环境中的使用全过程+分析
- Android中原始资源文件使用详解
- DAy8-自动完成输入内容
- Android实战技巧:深入解析AsyncTask
- Ba64 编码处理上传图片的参数失效问题
- Letter Combinations of a Phone Number
- Windows平台Mysql使表名支持大写
- js类,静态类,方法属性继承!
- 经典面试题:计算0.01+0.02+0.03+......+1.0 = ? 的值,值是50.5