2012-01-29 13 views
50

私はNeo4jを初めて使っています - 昨日夕方にそれを試し始めました。neo4jのノード識別子

ノード作成中に生成された自動インクリメント整数ですべてのノードが識別されていることがわかりました。これはいつものケースですか?

私のデータセットは自然な文字列キーを持っていますので、Neo4j割り当てIDと私自身のIDをマップする必要はありません。代わりに文字列識別子を使用できますか?

答えて

64

node-idを実装の詳細と考えてください(リレーショナルデータベースのROWIDのように、ノードの識別に使用できますが、決して再利用されないようにする必要はありません)。

ノードにプロパティとしてナチュラルキーを追加し、ナチュラルキーを使用してノードにインデックスを付ける(またはノードの自動インデックスを有効にする)とします。

E..gのJava APIで:オートインデクサで

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 

あなたの "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(); 

参照:http://docs.neo4j.org/chunked/milestone/auto-indexing.html そして:これは役立つはずhttp://docs.neo4j.org/chunked/milestone/indexing.html

+8

マイケルに感謝します。このようなことは明らかにあまりにも主流ではなく、ドキュメンテーションとディスカッションは非常に軽いです! –

+2

n.setProperty( "id"、 "my-natural-key")を呼び出すと@Michael Hunger;あなたはneo4jが正しく作成する自動生成ノードideとは異なるIDを作成していますか?または、これはneo4jが使用しているIDを上書きしようとしていますか? –

+0

@ michael-hunger自動インクリメントのプロパティを追加することは可能ですか?または、作成するノードに固有のIDを作成する必要がありますか? – satoru

0

は、我々は、自動インデックス作成がのNeo4jで有効になっている場合ことを知っている 一括インポート時に自動的にインデックスをバックアップするためのインデックスを作成します。各ノード が作成され、node_auto_indexという名前のインデックスに追加されます。今、 はここにクールなビットです。元のマニュアルインデックス(バッチインポートの の時刻に)を追加してnode_auto_indexとして名前を付け、neo4jで自動 インデックスを有効にすると、一括挿入されたノードは のように自動インデックスされます。そしてそこから、あなたがノードを作成するたびに、ノード も同様にインデックスを取得します**

出典:Identifying nodes with Custom Keys

0

すべての回答を超えて、neo4jはより速く働き、より良いサービスを提供する独自のIDを作成します。内部システムがID間で衝突しないことを確認してから、同じプロパティを持つノードを作成し、空ノードとしてシステムに表示します。

1

Neo4Jでノード/実数のユニークなIDを設定することは可能です。設定ファイルの1つに設定することで、インデックスを付けるように設定することができます。

また、Neo4j seq idではなく、ノードとエッジに「自然な」IDを指定することを強くお勧めします。これはあなたにdbの行を往復することなく保存します。これは私が過去にしたことです。