51

ラベル vs ノード プロパティ vs リレーションシップ + ノードをどこで使用するかについての経験則。

例を挙げてみましょう。私は店を持っていて、製品を neo4j に入れたいとします。それらの識別子は製品の SKU です。また、これは衣料品、食品、電化製品のように分類したいと考えています。ユーザーが何でも検索できるように、グラフで無料検索を行い、その検索文字列に関連するすべてのものを返します。

使用する方が良いでしょうか:

  1. のノードがありsku 001、ラベルのタグを付けますFood
  2. のノードがありsku 001、このノードにプロパティがありますcategory:"Food"
  3. とのノードがsku 001あり、 に対して別のノードを作成し、それらを関連付けるためFoodに " " の関係を作成しcategoryます。

プロパティを検索する場合は、ノードのプロパティを検索するよりもトラバースの方がはるかに高速であるため、リレーションシップ + ノードの方が適していると読みました。

ティア

4

2 に答える 2

64

カテゴリにプロパティ、ラベル、またはノードを使用する必要があるかどうかは、データのクエリ方法によって異なります。

(ここでは、かなり小さく、かなり固定された一連のカテゴリがあると仮定します。)

カテゴリ別にクエリを実行するのではなく、他の方法で見つかったノードのカテゴリを返す必要がある場合は、プロパティを使用します。(例: が付いているアイテムのカテゴリは何sku 001ですか?)

カテゴリ別にクエリする必要がある場合は、ラベルを使用します。(例: 10 ドル未満のすべての食品は何ですか?)

それが何であるかを知らずにカテゴリをトラバースする必要がある場合は、ノードを使用します。(例: ユーザーが選択したカテゴリと同じカテゴリで最も人気のある 10 のアイテムは?)

于 2014-03-13T09:26:42.413 に答える
11

このブログ投稿は、ベンチマークが含まれているため、役立つ場合もあります。

「関係」を 4 つの異なる方法でモデル化しました…</p>

  • 特定の関係タイプの使用(node)-[:HAS_ADDRESS]->(address)
  • 一般的な関係タイプを使用してから、エンド ノード ラベルでフィルタリングする(node)-[:HAS]->(address:Address)
  • 一般的な関係タイプを使用し、関係プロパティでフィルタリングする(node)-[:HAS {type:“address”}]->(address)
  • 一般的な関係タイプを使用し、終了ノード プロパティでフィルタリングする(node)-[:HAS]->(address {type: “address”})

<...>

要約すると…特定の関係 #ftw!

于 2016-12-05T10:49:43.687 に答える