2017-04-12 4 views
1

나는 타이탄에게 새로운 것을 알았습니다. 그리고 그걸 연구하기 시작했을 때, 그레맥과 씽크 패드와 같은 새로운 것들이 너무 많아서 혼란 스러웠습니다. rexter 등.타이탄 카탄드라를 백엔드로 사용 : 자바로 그래프를 생성, 저장 및 트래킹하기

내가 원한 것은 카산드라를 백엔드로하여 타이탄을 사용하는 자바의 예다. 그래프를 만들고, 카산드라에 저장하고, 다시 검색하고, 트래버스합니다. 아주 간단한 것도 많은 도움이 될 것입니다.

내가 실행 한 java에서 기본 예제가 있습니다. 나는이 프로그램을 실행할 때

BaseConfiguration baseConfiguration = new BaseConfiguration(); 
    baseConfiguration.setProperty("storage.backend", "cassandra"); 
    baseConfiguration.setProperty("storage.hostname", "192.168.3.82"); 

    TitanGraph titanGraph = TitanFactory.open(baseConfiguration); 

    Vertex rash = titanGraph.addVertex(null); 
     rash.setProperty("userId", 1); 
     rash.setProperty("username", "rash"); 
     rash.setProperty("firstName", "Rahul"); 
     rash.setProperty("lastName", "Chaudhary"); 
     rash.setProperty("birthday", 101); 

     Vertex honey = titanGraph.addVertex(null); 
     honey.setProperty("userId", 2); 
     honey.setProperty("username", "honey"); 
     honey.setProperty("firstName", "Honey"); 
     honey.setProperty("lastName", "Anant"); 
     honey.setProperty("birthday", 201); 

     Edge frnd = titanGraph.addEdge(null, rash, honey, "FRIEND"); 
     frnd.setProperty("since", 2011); 

     titanGraph.shutdown(); 

그래서, 나는 카산드라 로그를 관찰하고 그것은 키 스페이스라는 이름의 타이탄 다음과 같은 테이블 생성 :

  • titan_ids을
  • edgestore
  • graphindex
  • system_properties
  • 시스템 로그
  • txlog
  • edgestore_lock_
  • graphindex_lock_
  • system_properties_lock_

나는이 테이블에 사용되는 모르는 그들이 어떻게 데이터를 저장한다.

두 개의 꼭지점과 가장자리 사이의 가장자리를 그래프로 만드는 프로그램을 실행 한 후. 나는 테이블을 쿼리하고 각각의 테이블에서 16 진수 값을 발견했다.

나는 다음과 같은 질문을했다 :

  1. 그래프는 카산드라에 저장되는 방법?

  2. 이제이 그래프에서 'x'가 카산드라에 저장되어 있다고 가정 해 보겠습니다. 다른 그래프 'y'를 작성하여 저장했다고 가정 해보십시오. 특정 그래프를 검색하고 트래버스 할 수있는 방법은 무엇입니까? 왜냐하면 일반적인 cql 쿼리에서 테이블과 컬럼이 쿼리한다는 것을 알기 때문입니다. 어떻게 'x'와 'y'를 구분할 것인가?

  3. Java에서 샘플 코드를 게시하여 샘플 CSV 데이터를 사용하여 그래프를 만들 수 있도록 도와 줄 수 있습니까? 카산드라 (Cassandra)에 저장하고 동일한 그래프의 일부 트래버스 예제를 저장하십시오. 이해할 수있는 그러한 예제가 없기 때문에 많은 도움이 될 것입니다.

+0

Titan이 정말로 필요합니까? Datastax는 Cassandra에 관한 그래프를 가지고 있습니다. http://www.datastax.com/dse-graph-campaign/index.html –

+0

@ cricket_007 DSE는 내가 믿는 상용 제품입니다. 그래서 DSE를 위해 돈을 절약 할 수 없다면 titan을 사용하는 것이 좋은 대안입니다. [JanusGraph] (https://github.com/JanusGraph/janusgraph)도 좋은 무료 대안입니다. –

+0

@FilipeTeixeira –

답변

6

몇 가지 질문이 있으니 최대한 답장을 드려야합니다.

질문 1 : 데이터가 DB로 유지하는 방법에 관심이 당신이보고 here을해야하는 경우

이 자세히 티탄 데이터 모델에 대해 설명합니다. 커밋 로그와 테이블로 변환하는 것이 얼마나 좋은지 잘 모르겠습니다 만 시작일뿐입니다.

질문 2 :

그래서 당신이 keysoace으로 돌아가 셨습니다 이유는 당신이 당신의 자신을 제공하지 않았기 때문에 titan입니다했다. 일반적으로 서로 관련이없는 다른 그래프를 만들 때 그래프를 다른 키 공간에 저장합니다. 이것은 다음과 같이 수행됩니다

같은 keysoace에 연결되지 않은 여러 그래프를 만들 수 있습니다 물론
BaseConfiguration baseConfiguration = new BaseConfiguration(); 
baseConfiguration.setProperty("storage.backend", "cassandra"); 
baseConfiguration.setProperty("storage.hostname", "192.168.3.82"); 

//First Graph 
baseConfiguration.setProperty("storage.cassandra.keyspace", "keyspace1"); 
TitanGraph titanGraph1 = TitanFactory.open(baseConfiguration); 

//Second Graph 
baseConfiguration.setProperty("storage.cassandra.keyspace", "keyspace2"); 
TitanGraph titanGraph2 = TitanFactory.open(baseConfiguration); 

설명 된대로 here

질문 3 :

가로드 된 질문의 비트가 요구하고있다 샘플 CSV 마이그레이션 나는 한 걸음 물러서서 스스로에게 물어 보라. 무엇을 모델링하려고 하는가?

제품 목록과 해당 제품을 구입 한 사람들의 목록을 저장하려고합니다. 이이 모델 수있는 방법의 군중이있다 그러나 위해 지금 사람과 제품을 정점 후 구매를 대표 사이의 모서리 것을 말한다 단지 수 있습니다 :

//Initliase graph 
BaseConfiguration baseConfiguration = new BaseConfiguration(); 
baseConfiguration.setProperty("storage.backend", "cassandra"); 
baseConfiguration.setProperty("storage.hostname", "192.168.3.82"); 
baseConfiguration.setProperty("storage.cassandra.keyspace", "mycustomerdata"); 
TitanGraph graph = TitanFactory.open(baseConfiguration); 

//---------------- Adding Data ------------------- 
//Create some customers 
Vertex alice = graph.addVertex("customer"); 
alice.property("name", "Alice Mc Alice"); 
alice.property("birthdat", "100000 BC"); 

Vertex bob = graph.addVertex("customer"); 
bob.property("name", "Bob Mc Bob"); 
bob.property("birthdat", "1000 BC"); 

//Create Some Products 
Vertex meat = graph.addVertex("product"); 
meat.property("name", "Meat"); 
meat.property("description", "Delicious Meat"); 

Vertex lettuce = graph.addVertex("product"); 
lettuce.property("name", "Lettuce"); 
lettuce.property("description", "Delicious Lettuce which is green"); 

//Alice Bought some meat: 
alice.addEdge("bought", meat); 
//Bob Bought some meat and lettuce: 
bob.addEdge("bought", meat, lettuce); 

//---------------- Querying (aka traversing whcih is what you do in graph dbs) Data ------------------- 
//Now who has bought meat? 
graph.traversal().V().has("name", "meat").in("bought").forEachRemaining(v -> System.out.println(v.value("name"))); 

//Who are all our customers 
graph.traversal().V().hasLabel("customer").forEachRemaining(v -> System.out.println(v.value("name"))); 

//What products do we have 
graph.traversal().V().hasLabel("customer").forEachRemaining(v -> System.out.println(v.value("name"))); 

위의 예는 타이탄의 간단한 사용하는 것입니다. 나는 당신이 그것을 사용하는 것에 익숙해 질 수 있도록 [tinkerpop] 문서를 실행하는 것이 좋습니다. 하루가 끝날 때 Tinkerpop API를 통해 titan과 상호 작용합니다.

다소 도움이 되었기를 바랍니다.

관련 문제