Это зависит от того, какая у вас версия. Если вы используете Enterprise Edition, вы можете синхронизироваться из коробки, однако, если вы используете Community, вам придется делать это самостоятельно.
Я делаю это, записывая все запросы, которые изменяют данные в локальной базе данных, а затем воспроизводят их в удаленной базе данных. Приведенный ниже код является примером выполнения этого в С#.
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);
}
}
ПРИМЕЧАНИЕ. Вам необходимо убедиться, что вы воспроизводите только один раз и повторяете запросы по порядку.
person
joe
schedule
28.07.2016