Pensare al nodo-id come a un dettaglio di implementazione (come il rowid dei database relazionali, può essere usato per identificare i nodi ma non dovrebbe essere invocato per non essere mai riutilizzato).
Aggiungere le chiavi naturali come proprietà al nodo e quindi indicizzare i nodi con la chiave naturale (o abilitare l'autoindicizzazione per essi).
E..g nella API Java:
Index<Node> idIndex = db.index().forNodes("identifiers");
Node n = db.createNode();
n.setProperty("id", "my-natural-key");
idIndex.add(n, "id",n.getProperty("id"));
// later
Node n = idIndex.get("id","my-natural-key").getSingle(); // node or null
con auto-indicizzatore si sarebbe abilitare l'auto-index per il campo "id".
// via configuration
GraphDatabaseService db = new EmbeddedGraphDatabase("path/to/db",
MapUtils.stringMap(
Config.NODE_KEYS_INDEXABLE, "id", Config.NODE_AUTO_INDEXING, "true"));
// programmatic (not persistent)
db.index().getNodeAutoIndexer().startAutoIndexingProperty("id");
// Nodes with property "id" will be automatically indexed at tx-commit
Node n = db.createNode();
n.setProperty("id", "my-natural-key");
// Usage
ReadableIndex<Node> autoIndex = db.index().getNodeAutoIndexer().getAutoIndex();
Node n = autoIndex.get("id","my-natural-key").getSingle();
See: http://docs.neo4j.org/chunked/milestone/auto-indexing.html E: http://docs.neo4j.org/chunked/milestone/indexing.html
fonte
2012-01-29 13:16:23
Grazie Michael, esattamente quello che dovevo sapere. Questa roba non è ovviamente troppo tradizionale, tuttavia la documentazione e la discussione sono molto chiare sul campo! –
@Michael Hunger quando chiamate n.setProperty ("id", "my-natural-key"); stai creando un ID diverso dal nodo del nodo generato automaticamente che neo4j crea correttamente?O si tratta di un tentativo di sovrascrivere l'id che neo4j sta usando? –
@ michael-hunger È possibile aggiungere una proprietà di incremento automatico? O devo creare ID univoci per i nodi che creo? – satoru