2016-07-27 13 views
0

私はNeo4jをデータベースとして使用しているプロジェクトで作業しています。私はアプリケーションのために構築され、クラウドでホストされているリモートデータベースを持っています。クライアントの場所にホストされている別のデータベース(ローカルデータベース)があります。Neo4j - ローカルデータベースをリモートneo4jデータベースサーバと同期させる方法

質問:2つのデータベースを同期する方法はありますか?この同期に使用できる直接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

関連する問題