2016-10-29 5 views
0

こんばんは、のNeo4j自動インデックス新しいユーザーの作成

私は少しここに混乱し、これを処理する方法について興味があります。

私はneo4j-php-clientを使用してNeo4j 3.0で新しいユーザーを作成しています。私が思っているのは、user_idの自動インクリメントについてです。

$client->run("CREATE (n:User:Artist) SET n += {infos}", ['infos' => ['id' => $id, 'first_name' => $fname, 'last_name' => $lname, 'slug' => $slug, 'born' => $born, 'bio' => $bio, 'password' => $pass, 'email' => $email, 'ip' => $ip, 'date_created' => $date_created, 'date_modified' => $last_updated, 'last_login' => $last_login, 'verified' => $verified, 'notified' => $notified]]); 

現在のデータはMySQLデータベースからインポートされましたが、現在はNeo4jから新しいユーザーを作成しようとしています。多分私はここに何かを見逃しているでしょう。

おかげで、 グラント

答えて

0

自動インクリメントプロパティには、組み込みの機能はありません。

MATCH (n:User:Artist) 
WITH COALESCE(MAX(n.user_id) + 1, 1) AS new_user_id 
CREATE (n:User:Artist) 
SET n.user_id = new_user_id 
SET n += {infos} 

データセットが大きい場合は、あなたがに周り:Statusノードのいくつかの種類を維持することによってこの問題を回避することができます:あなたのデータセットが大きくなるにつれて、実質的に遅い得ようとしているがしかし、あなたは、それを置き換えることができますこれらのプロパティを追跡しますが、手動でこの自動インクリメントを実行する必要があります。

+0

これは意味がありますか、これを別の方法で行うべきですか? そして、各ノードがNeo4jによって割り当てられるように見える: を持っているので、いくつかのタイプのAIを行うようです。 – Grant

+0

また、ゆっくりと明確にすることができます、私はあなたが作成時に意味するものと仮定します。私はこれが読み込み側を遅くするのを見ることができません。 – Grant

+0

新しい 'user_id'を割り当てるたびに' MAX'集計を実行しなければならないので、書込みの方が遅くなります。ノードを識別できる別の一意のプロパティまたはプロパティの組み合わせがある場合は、別のIDプロパティは必要ありません。また、内部IDはプロパティではなく、他のすべての識別子を結びつけるためにカーネルが使用する鍵であり、即座に設定することができます。 –

0

代替案として、自動インクリメントされたシーケンス識別子の代わりに生成されたuuidを使用する方法も考えられます。

数学的には、uuidはグローバルに一意である必要があります。また、型と実装ライブラリによっては、衝突する可能性が非常に低いです。

APOCプロシージャはuuid生成関数を提供しています。使用しているサーバーサイド言語のuuidジェネレータを検索することができます。

関連する問題