我正在做一个项目,我们使用Neo4j作为数据库。我有一个为应用程序构建的远程数据库,并托管在云中。还有另一个数据库(本地数据库)托管在客户端的位置。问题是:有没有办法同步两个数据库?是否有任何直接的COTS产品可用于此同步?
o7jaxewo1#
虽然这可能是一个老问题,可能不再关心阿尼什巴普纳,我仍然想提供一个答案,以防它证明有价值的任何人谁最终在这里。过去,当我需要一个解决方案来比较和同步Neo4j开发数据库与Neo4j生产数据库时,我也面临过类似的挑战。尽管在几年的时间里进行了多次搜索,但我从未遇到过令人满意的解决方案。自从Anish Bapna在回应乔时问道:“有没有一种更简单的方法或者某种工具可以做到这一点?“我觉得这是相关的,在今年年初,我创建了自己的Neo4j图形比较工具,可以做什么正是被要求。它的名字是“Compare41”,可以在https://www.circles-arrows.com/上访问。为了保持完全的透明度,以防它不明显,我与圆圈箭头有密切的联系。
vuktfyat2#
这取决于你运行的版本。如果您使用企业版,您可以立即进行同步,但是如果您使用社区,您必须自己进行同步。我通过记录所有修改本地数据库上数据的查询,然后在远程数据库上重放来实现这一点。下面的代码是一个用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); } }
注意-您需要确保只重播一次,并且按顺序重播查询。
2条答案
按热度按时间o7jaxewo1#
虽然这可能是一个老问题,可能不再关心阿尼什巴普纳,我仍然想提供一个答案,以防它证明有价值的任何人谁最终在这里。
过去,当我需要一个解决方案来比较和同步Neo4j开发数据库与Neo4j生产数据库时,我也面临过类似的挑战。尽管在几年的时间里进行了多次搜索,但我从未遇到过令人满意的解决方案。
自从Anish Bapna在回应乔时问道:“有没有一种更简单的方法或者某种工具可以做到这一点?“我觉得这是相关的,在今年年初,我创建了自己的Neo4j图形比较工具,可以做什么正是被要求。它的名字是“Compare41”,可以在https://www.circles-arrows.com/上访问。
为了保持完全的透明度,以防它不明显,我与圆圈箭头有密切的联系。
vuktfyat2#
这取决于你运行的版本。如果您使用企业版,您可以立即进行同步,但是如果您使用社区,您必须自己进行同步。
我通过记录所有修改本地数据库上数据的查询,然后在远程数据库上重放来实现这一点。下面的代码是一个用C#实现的例子
然后你可以使用任何你想要的方法在服务器之间传输字符串数据(我使用的是RESTful服务),并使用重播:
注意-您需要确保只重播一次,并且按顺序重播查询。