0

Neo4j를 데이터베이스로 사용하는 프로젝트에서 작업 중입니다. 원격 데이터베이스를 응용 프로그램 용으로 빌드하고 Cloud에서 호스팅합니다. 클라이언트의 위치에서 호스팅되는 다른 데이터베이스 (로컬 데이터베이스)가 있습니다.Neo4j - 로컬 데이터베이스를 원격 neo4j 데이터베이스 서버와 동기화하는 방법

질문 : 두 데이터베이스를 동기화하는 방법이 있습니까? 이 동기화에 사용할 수있는 직접 COTS 제품이 있습니까?

+0

저는 이것이 유효한 질문이라고 생각하지만, 과장된 문장을 벗어나는 이유는 다음과 같습니다. 오프 사이트 리소스 또는 제품 권장 사항을 묻습니다. –

+0

이것은 내가 여러분에게 도움이 될 수있는 모든 것이며, 아마도 여러분이 좋아할만큼 많이 도움이되지 않을 것입니다 : http://stackoverflow.com/questions/18830686/export-whole-database-in-cypher-format -ascii-text –

답변

0

실행중인 버전에 따라 다릅니다. Enterprise Edition을 사용하는 경우 즉시 사용할 수 있지만 커뮤니티를 사용하는 경우 직접 수행해야합니다.

로컬 데이터베이스의 데이터를 수정 한 다음 모든 쿼리를 기록한 다음 원격 데이터베이스에서 재생하면됩니다. 아래 코드는 C#에서이 일을 예입니다

var query = _client.Cypher 
       .Match("(p:Person)") 
       .Where((Person p) => p.Id == id) 
       .Set("p = {person}") 
       .WithParam("person", person); 
      query.ExecuteWithoutResults(); 
      RecordQuery(query); 

private static void RecordQuery(dynamic query) 
     { 
      var syncStore = new SynchronisationStore(); 
      var replayQuery = syncStore.Create(); 
      replayQuery.TimeStamp = DateTime.Now; 
      var queryText = query.Query.QueryText.Replace("\r\n", " "); 
      replayQuery.CypherQueryText = queryText; 
      replayQuery.CypherQueryParameters = query.Query.QueryParameters; 
      syncStore.Store(replayQuery); 
     } 

그런 다음 사용하여 문자열 서버 사이의 데이터 (나는 RESTful 서비스를 사용) 및 재생을 전송하려면 어떤 방법을 사용할 수 있습니다

public void ReplayQuery(ReplayQuery replayQuery) 
     { 
       foreach (var pair in replayQuery.CypherQueryParameters) 
       { 
        replayQuery.CypherQueryText = replayQuery.CypherQueryText.Replace("{" + pair.Key + "}", SerializeWithoutQuote(pair.Value)); 
       } 
       var query = new CypherQuery(replayQuery.CypherQueryText, new Dictionary<string, object>(), CypherResultMode.Set, null); 

       _client.Connect(); 
       ((IRawGraphClient) _client).ExecuteCypher(query); 
      } 
     } 

참고 - 한 번만 재생하고 질의를 순서대로 재생해야합니다.

+0

좀 더 간단한 방법이 있습니까, 아니면 어떤 도구를 사용할 수 있습니까? 나는 커뮤니티 에디션 버전 3을 가지고있다. –

+0

나는 이것을 할 수있는 도구를 모른다. 따라서 Neo4j Enterprise의 천문학적 인 비용을 스스로 부담하거나 포기해야합니다. 위의 코드와 재생 쿼리를 문자열로 저장하는 일부 메커니즘과 동기화가 성공했는지 여부를 나타내는 플래그 (MongoDB 사용)를 사용하면 1 일 내에 실행해야합니다. – joe

관련 문제