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多,然后改 ... 
随机推荐
- Javascript模块化编程(三):require.js的用法【转】
			作者: 阮一峰 日期: 2012年11月 7日 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js ... 
- NOIP2011 普及組 統計單詞數
			题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ... 
- 統計數字(2007年NOIP全国联赛提高组)
			题目描述 Description [问题描述]某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000 个,现在需要统计这些自然数各自出现的 ... 
- Android 中解析 JSON
			有什么不懂的可以去官网去看看:www.json.org 在google android中也有关于解析JSON的类库:JsonReader,但是只能在3.0以后的版本中才可以用,在这里我们用google ... 
- bufferedReader 乱码问题
			public static void main(String arsg[]) throws Exception{ BufferedReader bufferedReader = new Buffere ... 
- 一个非常简单的RPC服务
			1.servicefunctions.php <?php class ServiceFunctions { public static function getDisplayName($f,$l ... 
- XML中CDATA及其字符实体的使用
			在写xml文档时,偶尔会用到一些特殊字符,如<.>.&等,如下面这段程序: <?xml version="1.0"?> <y>if x& ... 
- 安装pgadmin3
			在centos/redhat/系统是x86_64 1.下载适合自己系统的合适的版本http://dl.fedoraproject.org/pub/epel/6/x86_64/ ( yum instal ... 
- SQL 语句中的With(index())
			SELECT m.Member_No, m.FirstName, m.Region_No FROM dbo.Member AS m WITH (INDEX (0)) 强制使用找到的第一个索引. 其 ... 
- asp.net脚本获取不到id,服务器控件id生成html页面id控制
			在配置文件里修改id的生成方式.经过搜索发现是因为使用Sharpmap而在Web.config中加入的一句配置造成的影响. <pages controlRenderingCompatibilit ... 
