zoukankan      html  css  js  c++  java
  • titan

    1. 简介
      (1)titan:存储,查询图形结构的数据库。分布式集群环境下,可支持数以千亿级别的点和边,同时支持上千个并发的实时的复杂图形遍历,支持ACID事务。
      (2)架构:支持以下3方面的自由组合

      • 节点和边的存储:
        • Apache Cassandra
        • Apache HBase
        • Oracle BerkeleyDB(测试使用)
      • 图形分析组件:
        • Spark
        • Giraph
        • Hadoop
      • 地理,数值,全文检索支持
        • ElasticSearch
        • Solr
        • Lucene
    2. 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
    3. 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>
      

    (2) thinkerpop - REST协议

    1. “红楼梦宗谱”示例
      (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()+"		");
        }
        System.out.println();
    }
    /**
    _type:vertex		_properties:{name=薛宝钗, age=17}		_id:16496	
    */
    ```
    
    1. 数据展现

      • 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...
    2. 参考网站
      thinkerpop
      gremlin与sql对比查询语法
      sparql-gremlin插件
      DataStax给出的图形查询语言,包括sparql,GraphQL, Cypher, Gremlin

  • 相关阅读:
    JavaScript 获取Select标签选中的项
    ThinkPHP框架学习记录
    .Net踩坑记录
    Java环境配置出现的问题及解决办法
    const 限定符
    利用python进行数据分析-第八章笔记
    利用python进行数据分析-第七章笔记
    利用python进行数据分析-第六章笔记
    利用python进行数据分析-第五章笔记
    利用python进行数据分析-第三章笔记
  • 原文地址:https://www.cnblogs.com/72808ljup/p/5587714.html
Copyright © 2011-2022 走看看