Mein aktuelles Szenario ist wie ich habe ich Produkte, Kunde und Verkäufer Knoten in meinem Graph Ökosystem. Das Problem, das ich bin vor ist, dass ich EinzigartigkeitWie kann man eine einzelne Kante in einem Graphen für eine gegebene order_id sicherstellen?
, um sicherzustellen, habe
(customer)-[buys]->product
mit order_item_id als Eigentum der kauft Beziehung edge.I haben, um sicherzustellen, dass es ein einzigartiger Rand mit Kaufeigenschaft für eine gegebene order_item_id. Auf diese Weise möchte ich sicherstellen, dass meine Graphinsertion idempotent bleibt und für eine gegebene order_item_id keine wiederholten Kaufkanten erzeugt werden.
eine order_item_id Eigenschaft Erstellen
if(!mgmt.getPropertyKey("order_item_id")){
order_item_id=mgmt.makePropertyKey("order_item_id").dataType(Integer.class).make();
}else{
order_item_id=mgmt.getPropertyKey("order_item_id");
}
Was ich bisher gefunden habe ist, dass eindeutigen Index bauen könnte mein Problem lösen. wie
if(mgmt.getGraphIndex('order_item_id')){
ridIndexBuilder=mgmt.getGraphIndex('order_item_id')
}else{
ridIndexBuilder=mgmt.buildIndex("order_item_id",Edge.class).addKey(order_item_id).unique().buildCompositeIndex();
}
Oder ich kann auch so etwas wie
mgmt.buildEdgeIndex(graph.getOrCreateEdgeLabel("product"),"uniqueOrderItemId",Direction.BOTH,order_item_id)
- verwenden Wie soll ich diese Einzigartigkeit der einzelnen Käufen für eine gegebene order_item_id Rand gewährleisten. (Ich habe keinen Anwendungsfall basierend auf order_item_id suchen.)
- Was ist der grundlegende Unterschied in einen Index auf der Kante zu schaffen mit buildIndex und mit buildEdgeIndex?
noch einmal für detaillierte Informationen .are Leistungsprobleme so schwerwiegend, dass wir Sperren überspringen können und Datenbankkonsistenz auf dem Spiel steht? Gibt es einen Leistungsnachteil, selbst wenn ich keine Echtzeit-Ergebnisse von titan db benötige? Haben schwere Sperreneinfügungen Auswirkungen auf Leseabfragen? –
Die Leistungsbeeinträchtigung hängt wirklich von der Größe des Diagramms und der Rate ab, mit der Sie Daten einfügen. Bei der Skalierung werden Sie wahrscheinlich immer das Sperren vermeiden wollen, um die Schreibleistung zu erhalten. Wenn Sie wirklich an Geschwindigkeit interessiert sind, denke ich, dass es am besten ist, einen Leistungstest mit und ohne Sperren einzurichten und zu sehen, welche Art von Lese- und Schreibleistung Sie erhalten. – jbmusso
Ich kam mit Pre-Insertion-Check, der mir geholfen hat, Index an den Rändern zu überspringen. Es prüft die Existenz bestimmter Kante vor dem Erstellen. Ich bin immer noch nicht in der Lage zu verdauen, Schlösser wegen der Geschwindigkeit loszulassen (vielleicht meine ACID-Wurzeln). Ich denke, der Aufwand für den Post-Import-Job wird groß sein. Ist das Loslassen von Locks auch bei Vertex-Einfügung akzeptabel? –