titan
简介
(1)titan:存储,查询图形结构的数据库。分布式集群环境下,可支持数以千亿级别的点和边,同时支持上千个并发的实时的复杂图形遍历,支持ACID事务。
(2)架构:支持以下3方面的自由组合- 节点和边的存储:
- Apache Cassandra
- Apache HBase
- Oracle BerkeleyDB(测试使用)
- 图形分析组件:
- Spark
- Giraph
- Hadoop
- 地理,数值,全文检索支持
- ElasticSearch
- Solr
- Lucene
- 节点和边的存储:
titan-hbase-es部署范例
(1)版本对应
titan:0.54-hadoop2,hbase:1.1.5 (版本相对宽松),elasticsearch:1.4,rexster-server:2.6
(2)titan server部署rexster-server解压
修改config/rexster.xml文件,添加如下内容
<graph>
<graph-enabled>true</graph-enabled>
<graph-name>titanexample</graph-name>
<graph-type>com.thinkaurelius.titan.tinkerpop.rexster.TitanGraphConfiguration</graph-type>
<graph-location></graph-location>
<graph-read-only>false</graph-read-only>
<properties>
<storage.backend>hbase</storage.backend>
<storage.hostname>localhost:2181,localhost:2182,localhost:2183</storage.hostname>
<storage.hbase.table>facebook</storage.hbase.table>
<index.search.backend>elasticsearch</index.search.backend>
<index.search.elasticsearch.client-only>true</index.search.elasticsearch.client-only>
<index.search.hostname>127.0.0.1</index.search.hostname>
<index.search.index-name>facebook</index.search.index-name>
</properties>
<extensions>
<allows>
<allow>tp:gremlin</allow>
</allows>
</extensions>
</graph>
复制titan jar包到rexster lib
cp TITAN_HOME/lib/* REXSTER_HOME/ext/titan/
- 删除rexster/lib下的lucene相关jar包,会与titan的引起冲突
- 开启rexster
./bin/rexster.sh -s -c ./config/rexster.xml
- 访问http://ip:8182/graphs/titanexample,REST
titan server接口
(1)RexPro二进制协议public class TestClient {
public static void main(String[] args) throws Exception {
RexsterClient client = RexsterClientFactory.open("localhost", "titanexample");
List<Map<String,Object>> result;
result = client.execute("aa=g.V.has('name','saturn');aa.next()");
//result = client.execute("g.getManagementSystem().get(‘cache.db-cache’)");
// result.toString(): [{name="jupiter"}]
System.out.println(result);
client.close();
}
}
<dependency>
<groupId>com.tinkerpop.rexster</groupId>
<artifactId>rexster-protocol</artifactId>
<version>2.6.0</version>
</dependency>
- “红楼梦宗谱”示例
(1)编写blueprint脚本,设置schema,索引,添加将节点数据com.thinkaurelius.titan.core.schema.TitanManagement mgmt = g.getManagementSystem();
//点的属性名
com.thinkaurelius.titan.core.PropertyKey name = mgmt.makePropertyKey("name").dataType(String.class).make();
com.thinkaurelius.titan.core.PropertyKey age = mgmt.makePropertyKey("age").dataType(Integer.class).make();
// 点的标签名
mgmt.makeVertexLabel("people").make(); //该点表示人
mgmt.makeVertexLabel("hobby").make(); //该点是一个运动
// 给点的姓名年龄建索引
mgmt.buildIndex("name",Vertex.class).addKey(name).unique().buildCompositeIndex(); // "search"是配置文件中的标识符
mgmt.buildIndex("vertices",Vertex.class).addKey(age).buildMixedIndex("search"); // mixedIndex是外部索引,用es存储索引 // 边的属性
mgmt.makeEdgeLabel("father").multiplicity(com.thinkaurelius.titan.core.Multiplicity.MANY2ONE).make();
mgmt.makeEdgeLabel("mother").multiplicity(com.thinkaurelius.titan.core.Multiplicity.MANY2ONE).make();
mgmt.makeEdgeLabel("hobby").multiplicity(com.thinkaurelius.titan.core.Multiplicity.MULTI).make();
com.thinkaurelius.titan.core.PropertyKey time = mgmt.makePropertyKey("time").dataType(Integer.class).make();
com.thinkaurelius.titan.core.EdgeLabel love = mgmt.makeEdgeLabel("love").signature(time).make();//什么时候确立爱情挂席
mgmt.buildEdgeIndex(love,"lovetime", Direction.BOTH, com.thinkaurelius.titan.core.Order.DESC,time);
mgmt.commit(); //插入点
com.thinkaurelius.titan.core.TitanTransaction tx = g.newTransaction();
Vertex jiazheng = tx.addVertexWithLabel("people"); // 贾政
jiazheng.setProperty("name","贾政");
jiazheng.setProperty("age",48);
Vertex jiabaoyu = tx.addVertexWithLabel("people"); // 贾宝玉
jiabaoyu.setProperty("name","贾宝玉");
jiabaoyu.setProperty("age",18);
Vertex wangfuren = tx.addVertexWithLabel("people"); // 王夫人
wangfuren.setProperty("name","王夫人");
wangfuren.setProperty("age",47);
Vertex xuebaochai = tx.addVertexWithLabel("people"); // 薛宝钗
xuebaochai.setProperty("name","薛宝钗");
xuebaochai.setProperty("age",17); Vertex cixiu = tx.addVertexWithLabel("hobby");
cixiu.setProperty("name","刺绣");
Vertex zuoshi = tx.addVertexWithLabel("hobby");
zuoshi.setProperty("name","作诗"); //插入边
jiabaoyu.addEdge("father",jiazheng);
jiabaoyu.addEdge("mother",wangfuren);
ElementHelper.setProperties(jiabaoyu.addEdge("love",xuebaochai),"time",1001); // 贾宝玉爱林黛玉,"time"属性为1001
wangfuren.addEdge("hobby",cixiu);
xuebaochai.addEdge("hobby",zuoshi); tx.commit();
(2)通过RexPro协议发送脚本到服务器
java public static void main(String[] args) throws Exception { RexsterClient client = RexsterClientFactory.open("localhost", "titanexample"); List<Map<String,Object>> result; BufferedReader br = new BufferedReader(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("facebook-gremlin"))); String str=""; StringBuffer sb = new StringBuffer(); while((str = br.readLine())!=null){ sb.append(str); } System.out.println(sb.toString()); result = client.execute(sb.toString()); System.out.println(result); client.close(); }
(3)rest api
shell curl -XGET http://localhost:8182/graphs/titanexample/vertices #查看所有边 curl -XGET http://localhost:8182/graphs/titanexample/edges curl -XGET http://localhost:8182/graphs/titanexample/keyindices curl -XGET http://localhost:8182/graphs/titanexample/vertices/16400/in #查询节点的入射边 curl -XPOST http://localhost:8182/graphs/titanexample/vertices/11111?name=zhangsan&age=24 #创建节点 curl -XPOST http://localhost:8182/graphs/titanexample/edges?_outV=<id>&_label=friend&_inV=2&<key>=<key'> #创建节点间的边
(4)gremlin查询示例,查询贾宝玉的父亲
```shell
gremlin> g.V.has('name','贾宝玉').next().out('father').name
==>贾政
```
(5)全文检索节点,按照es的格式封装的map
```java
result = client.execute("g.indexQuery(\"vertices\", \"v.age:(17)\").vertices().get(0).getElement()");
for (Map<String, Object> map : result) {
for (Map.Entry<String, Object> en : map.entrySet()) {
System.out.print(en.getKey()+":"+en.getValue()+"\t\t");
}
System.out.println();
}
/**
_type:vertex _properties:{name=薛宝钗, age=17} _id:16496
*/
```
数据展现
- Sigma.js it's a free and open source tool for graph visualization quite nice. Linkurious is using a fork version of it as far as I know in their product.
- VivaGraph it's another free and open source tool for graph visualization tool - but it has a smaller community compared to SigmaJS.
- D3.js it's the factotum for data visualization, you can do basically every kind of visualization based on that, but the learning curve is quite steep.
- Gephi is another free and open source desktop solution, you have to use an external plugin with that probably but it does support most of the formats out there - graphML, CSV, Neo4J, etc...
参考网站
thinkerpop
gremlin与sql对比查询语法
sparql-gremlin插件
DataStax给出的图形查询语言,包括sparql,GraphQL, Cypher, Gremlin
titan的更多相关文章
- Titan DB的一些问题
使用熟悉一点的系统来测试TitanDB,HBASE+ES,记录下来一些小tips. 1.首先TitanDB支持的Hadoop只有1.2.1,所以Hbase自然也只能取到0.98,虽然官网上提供了tit ...
- 图数据库 Titan 高速入门
尤其在互联网世界,图计算越来越受到人们的关注,而图计算相关的软件也越来越丰富.本文将高速展示 Titan这个open source 的图数据库. 注:本文的操作主要基于Titan 官方的两篇文档: - ...
- 深度学习环境搭建(ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn+其他软件)
一.硬件环境 ubuntu 16.04LTS + windows10 双系统 NVIDIA TiTan XP 显卡(12G) 二.软件环境 搜狗输入法 下载地址 显卡驱动:LINUX X64 (AMD ...
- 图数据库titan 和 rexster安装手册
titan是图数据库, rexster是图显示服务 titan 安装 下载 titan 0.3.2 解压 titan-all-0.3.2.zip 到 /opt/hugedata/share/解压后得到 ...
- 牛客国庆集训派对Day1 B. Attack on Titan
B. Attack on Titan 链接 #include<cstdio> #include<algorithm> #include<cstring> #incl ...
- [知识图谱] 环境配置:Java8 + Maven3 + HBase + Titan
1.Java Java8安装配置 2.Maven Linux下的Maven安装与配置 3.Hbase 官方安装教程:http://s3.thinkaurelius.com/docs/titan/1.0 ...
- ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn
硬件环境 ubuntu 16.04LTS + windows10 双系统 NVIDIA TiTan XP 显卡(12G) 软件环境 搜狗输入法 显卡驱动:LINUX X64 (AMD64/EM64T) ...
- Google为远程入侵Titan M芯片提供最高150万美元的赏金
Google最近发布了一项新的公告,旨在提高对发现和报告Android操作系统中的严重漏洞的漏洞赏金的奖励,Google昨天为黑客设定了新的挑战性水平,使他们可以赢得高达150万美元的赏金. 从今天开 ...
- URAL - 1920 Titan Ruins: the Infinite Power of Magic(乱搞)
搞死人的题目,,, 就是在n*n的方格中找路径长度为L的回路. 开始的思路值适合n为偶数的情况,而忽视了奇数的case,所以wa了一次. 然后找奇数case的策略,代码从70多行变成了100多,然后改 ...
随机推荐
- jQuery停止动画和判断是否处于动画状态
1.停止元素的动画 stop([clearQueue][,gotoEnd]); 参数clearQHCHC和gotoEnd都足町选的参数,为Boolean值(ture或flase).clearQueue ...
- UVa 1584 Circular Sequence --- 水题
UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较 ...
- java计算文件32位md5值
protected static String getFileMD5(String fileName) { File file = new File(fileName); if(!file.exist ...
- 黑马程序员——JAVA基础之简述 类的继承、覆写
------- android培训.java培训.期待与您交流! ---------- 继承的概述: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只 ...
- JSBinding + SharpKit / JavaScript 加载流程
首先,现在的方案是游戏启动就加载全部的 JavaScript 代码. 先看下 StreamingAssets/JavaScript/ 文件夹下的目录结构:
- Avoiding PostgreSQL database corruption
TL;DR: Don't ever set fsync=off, don't kill -9 the postmaster then deletepostmaster.pid, don't run P ...
- mysql中的semi-join
1. 背景介绍 什么是semi-join? 所谓的semi-join是指semi-join子查询. 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录.与条件连接相 ...
- 如何用ABBYY把PDF如何转换成HTML
将PDF转换成HTML网页格式,是快速打造专业级网站的方法之一.当用户找到了非常详实的PDF资料,打算将之制作成为网页格式时,如果重新开发往往需要耗费大量的时间,可是又不知道怎么样才可以将PDF文件转 ...
- SQL存储过程相关信息查看转
原文地址:http://www.cnblogs.com/minideas/archive/2009/10/29/1591891.html --1.查看所有存储过程与函数 exec sp_ ...
- jQuery.fn.extend与jQuery.extend
jQuery.extend(),是扩展的jQuery这个类. 假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能.这 ...