Titan java读数据的相关api使用 (初学)

原创 2016年06月01日 21:55:47

http://s3.thinkaurelius.com/docs/titan/1.0.0/index.html   titan官方文档链接.

我用的是hbase+es结构.所以先下载hbase.然后下载titan的gremlin终端方便查看数据测试用.titan的需要java1.8以上的配置,这里要注意.

本地java api使用的例子网上太少了= =这里写一些以备以后使用.

首先需要引pom.


<properties>
        <titan.version>1.0.0</titan.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-core</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-hbase</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-es</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-hadoop</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tinkerpop</groupId>
            <artifactId>gremlin-driver</artifactId>
            <version>3.0.1-incubating</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>0.98.2-hadoop1</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-berkeleyje</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

titan自带一个学习测试的例子.和titan文档中的神的故事的例子基本保持一致.类名GraphOfTheGodsFactory

在运行下面程序之前需要先打开本地的hbase

package com.yuchen;

import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.thinkaurelius.titan.core.attribute.Contain;
import com.thinkaurelius.titan.core.attribute.Geoshape;
import com.thinkaurelius.titan.core.attribute.Text;
import com.thinkaurelius.titan.example.GraphOfTheGodsFactory;
import org.apache.tinkerpop.gremlin.process.traversal.Contains;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;

import java.io.File;
import java.util.Iterator;
import java.util.Map;

/**
 * Copyright (c) 2016 Qunar.com. All Rights Reserved
 *
 * @author yuchenwu
 * @date 16-5-30.
 */

public class TestGetTitan {
    public static final String INDEX_NAME = "search";

    public static void main(String[] args) {
        TitanFactory.Builder config = TitanFactory.build();
        config.set("storage.backend", "hbase");
        config.set("storage.hostname", "localhost");
        config.set("index." + INDEX_NAME + ".backend", "elasticsearch");
        //这里的这个/tmp/titan 是本地的路径,需要先创建文件夹
        config.set("index." + INDEX_NAME + ".directory", "/tmp/titan" + File.separator + "es");
        config.set("index." + INDEX_NAME + ".elasticsearch.local-mode", true);
        config.set("index." + INDEX_NAME + ".elasticsearch.client-only", false);
        TitanGraph graph = config.open();

        GraphTraversalSource g = graph.traversal();
//       第一次需要先load这个  将数据导入到本地的hbase中
//       下面的例子可以结合刚才文档中chapter 3 中的例子看
//        GraphOfTheGodsFactory.load(g);
        //对应gremlin内的 g.V().has('name','hercules').next().value('name')
        System.out.println("======" + g.V().has("name", "hercules").next().value("name"));
        //g.V().has('name','hercules').next().values('name','age')
        System.out.println("======" + g.V().has("name", "hercules").next().values("name", "age"));
        Iterator iterator = g.V().has("name","hercules").next().values("name", "age");
        while(iterator.hasNext()){
            Object o  = iterator.next();
            System.out.println("======"+o);
        }

         Vertex saturn = g.V().has("name","saturn").next();

        System.out.println("======"+saturn);

        //g.V(vertex).in("father").in("father").next()  得到 saturn的孙子节点
        System.out.println("======" + g.V(saturn).in("father").in("father").next().value("age"));

        GraphTraversal<Edge, Edge> a =  g.E().has("place", P.eq(Geoshape.point(38.1f, 23.7f)));
        System.out.println("======"+a);
        while(a.hasNext()){
            Edge e = a.next();
            System.out.println("======"+e.keys());
            System.out.println("======"+e.label());
            System.out.println("======"+e.outVertex().value("name"));
            System.out.println("======"+e.inVertex().value("name"));
            System.out.println("======"+e.value("time")+"  :  "+e.value("place"));
        }

        Vertex hercules = g.V().has("name","hercules").next();
        System.out.println("======"+g.V(hercules).out("mother","father").values("name"));
        GraphTraversal<Vertex,Vertex> mF = g.V(hercules).out("mother", "father");
        while(mF.hasNext()){
            Vertex v = mF.next();
            System.out.println("======"+ v.label()+"  :  "+v.value("name"));
        }

        System.out.println("======" + g.V(saturn).repeat(__.in("father")).times(2).next().value("name"));

        GraphTraversal<Vertex,Vertex> monsters = g.V(hercules).out("battled");
        while(monsters.hasNext()){
            Vertex monster = monsters.next();
            System.out.println("======"+monster.label()+"  :  "+monster.value("name"));
        }

        monsters = g.V(hercules).outE("battled").has("time",P.eq(1)).inV();
        while(monsters.hasNext()){
            Vertex monster = monsters.next();
            System.out.println("======"+monster.label()+"  :  "+monster.value("name"));
        }
        Vertex pluto = g.V().has("name","pluto").next();
        //通过out得到住的地方的节点,在in得到所有链接到这个地方的节点,从而得到所有住在这个地方的节点  out 边出去的条件  in  边进来的条件

        GraphTraversal<Vertex,Vertex> liveInTartarusVertex = g.V(pluto).out("lives").in("lives");
        while(liveInTartarusVertex.hasNext()){
            Vertex vertex = liveInTartarusVertex.next();
            System.out.println("======"+vertex.value("name"));
        }



        GraphTraversal<Vertex,Vertex> liveInTartarusVertexNo = g.V(pluto).out("lives").in("lives").where(
                __.is(P.neq(pluto)));
        while(liveInTartarusVertexNo.hasNext()){
            Vertex vertex = liveInTartarusVertexNo.next();
            System.out.println("======"+vertex.value("name"));
        }


        GraphTraversal<Vertex,Vertex> liveInTartarusVertexNot = g.V(pluto).as("x").out("lives").in("lives").where(P.neq(
                "x"));
        while(liveInTartarusVertexNot.hasNext()){
            Vertex vertex = liveInTartarusVertexNot.next();
            System.out.println("======"+vertex.value("name"));
        }

        GraphTraversal<Vertex,Map<String, Vertex>> brothers = g.V(pluto).out("brother").as("god").out("lives").as("place").select("god","place");
        while(brothers.hasNext()){
            Map<String,Vertex> map = brothers.next();
            System.out.println("======"+map);
            for(Map.Entry<String,Vertex> entry:map.entrySet()){
                System.out.println(entry.getKey()+" : "+entry.getValue().value("name"));
            }
        }

        System.out.println("======"+g.V(pluto).outE("lives").next().value("reason"));


        /*GraphTraversal<Edge,Object> reasons = g.E().has("reason").values("reason").is(Text.textContains("loves"));
        System.out.println(reasons);
        while(reasons.hasNext()){
            Object e = reasons.next();
            System.out.println("======"+e);

        }*/

        GraphTraversal<Edge,Edge> reasons = g.E().has("reason").as("r").values("reason").is(Text.textContains("loves")).select("r");
        System.out.println(reasons);
        while(reasons.hasNext()){
            Edge e = reasons.next();
            System.out.println("======"+e.keys());
            System.out.println("======"+e.label());
            System.out.println("======"+e.value("reason"));
        }

        GraphTraversal<Edge,Map<String,Object>> reasons2 = g.E().has("reason").as("source").values("reason").is(Text.textContains("loves")).as("reason").select("source")
                .outV().values("name").as("god").select("source").inV().values("name").as("thing").select("god","reason","thing");

        while(reasons2.hasNext()){
            Map<String,Object> map = reasons2.next();
            System.out.println("======"+map);
            for(Map.Entry<String,Object> entry:map.entrySet()){
                System.out.println(entry.getKey()+" :  "+entry.getValue());
            }
        }
//        System.out.println("======"+);

//        System.out.println("======"+g.V(pluto).out("lives").in("lives"));
        graph.close();
    }
}



Titan学习笔记-初识

Titan 是一个在服务器集群搭建的分布式的图形数据库,特别为存储和处理大规模图形而优化。集群很容易扩展以支持更大的数据集,Titan有一个很好的插件式性能,这个性能让它搭建在一些成熟的数据库技术上像...
  • wulinshishen
  • wulinshishen
  • 2016年10月28日 14:39
  • 4219

Titan学习笔记-API操作记录

了解并学习一下Titan相关的JAVA API操作,以QQ、QQ群关系作为一个示例,记录相关API的使用和操作。 Titan官方的Document还是很好用,解释和说明都非常的详细,遇到相关问题可以随...
  • wulinshishen
  • wulinshishen
  • 2017年09月26日 19:48
  • 437

Java操作图数据库Titan

大数据 05月 19, 2015 阅读(2,844) 评论(0) 目录[-] 1 · Titan简介2 · Java项目搭建3 · 代码实现 Titan简介 Titan 是一个...
  • nysyxxg
  • nysyxxg
  • 2016年05月13日 15:33
  • 1892

Titan - Using HBase

HBase is the Hadoop database. Think of it as a distributed, scalable, big data store. Use HBase when...
  • macyang
  • macyang
  • 2014年09月04日 18:57
  • 2038

Titan连接Hbase后端

步骤1.启动hbase➜ hbase-1.1.2 ./bin/start-hbase.sh starting master, logging to /home/luxh/hbase/hbase-1...
  • u010718606
  • u010718606
  • 2015年12月02日 15:06
  • 1778

Titan Graph DataBase 研究 (三)----Java API使用 上

上一篇说道了如何TitanServer的发布,那么这一章就来说说如何用JavaApI操作Titan,话不多说直接上代码 pom.xml...
  • q2365921
  • q2365921
  • 2017年02月07日 16:42
  • 1522

关于Titan的中文整理

原外文参考:http://s3.thinkaurelius.com/docs/titan/1.0.0/ 数据结构 有向图 一 概念     1、有向图存储-》其实本质并非是一个数据库,而是基于非关系数...
  • Luck_Ape
  • Luck_Ape
  • 2017年10月30日 19:56
  • 598

图数据库 Titan 快速入门

尤其在互联网世界,图计算越来越受到人们的关注,而图计算相关的软件也越来越丰富。本文将快速展示 Titan这个open source 的图数据库。...
  • samhacker
  • samhacker
  • 2014年10月01日 21:38
  • 11695

Java程序API数据接口

API:应用程序接口(API:Application Program Interface) 使用数据接口的作用 1、封装逻辑 数据接口从数据库查询出数据,并组织成json格式,这个逻辑如果在每个终端...
  • cheng_feng_xiao_zhan
  • cheng_feng_xiao_zhan
  • 2016年08月21日 16:51
  • 5004

开始使用Titan

from:http://s3.thinkaurelius.com/docs/titan/1.0.0/getting-started.html   在一开始,有两个神被称为天王星和盖亚。他...
  • albg_boy
  • albg_boy
  • 2017年11月02日 18:01
  • 334
收藏助手
不良信息举报
您举报文章:Titan java读数据的相关api使用 (初学)
举报原因:
原因补充:

(最多只允许输入30个字)