Ich evaluiere Neo4j für den Einsatz als Datenspeicher in einer interaktiven Anwendung. Mit dem Code unten bekomme ich ungefähr 40 ms für das Hinzufügen einer Beziehung, die für unsere Bedürfnisse viel zu langsam wäre, da unsere Modelle Zehntausende von Beziehungen haben können. Ist das typische Leistung? Irgendwelche Tipps zur Verbesserung des Codes? Ich habe mit 12 Relationstypen und insgesamt 6652 Relationen getestet.Neo4j Beziehung schreiben Leistung mit Neo4j.Driver.V1
using (var session = driver.Session())
{
foreach (var relationType in relationTypes)
{
var nodeArray = relationType.Value.Select(n => new Dictionary<string, string> {{"from", n.Item1}, {"to", n.Item2}}).ToArray();
var dictionary = new Dictionary<string, object> {{"nodes", nodeArray}};
var relationCommand =
string.Format(
"UNWIND $nodes as node WITH node.from as from, node.to as to "
+ "MATCH (f {{nodeId:from}}), (t {{nodeId:to}}) "
+ "CREATE (f)-[:" + relationType.Key + "]->(t) ");
session.Run(relationCommand, dictionary);
}
}
Sie verwenden keine Beschriftungen und daher keine eindeutigen Einschränkungen/Indizes. Ihre Abfrage ist überhaupt nicht optimiert –
Es ist sicherlich nicht optimiert. :) OK, also werden Labels benötigt, um MATCH effizient zu machen? –
Labels + eine indizierte/eindeutige Einschränkung auf die Eigenschaft, die Sie passen auf (hier nodeId) so Lookups sind O (1) + 1: label + Eigenschaft –