3

カテゴリをノードまたはラベルとして実装する必要があるかどうかを決定しようとしています。
特に、カテゴリに属する​​ノードの数を取得するクエリはそれほど簡単ではありません。
ノードはより多くのカテゴリに属する​​ことができなければなりません!

ラベルとしてのカテゴリ、バリアント 1
カテゴリのリストをどこかに保管してから、次のようにします。

MATCH a:cat1, b:cat2, c:cat3, ...

多くのカテゴリを使用すると、多くの列が表示されます..それはあまり良くありません。また、クエリの前処理がたくさんあります。
そこから簡単にカウントできるかどうかさえわかりません。

ラベルとしてのカテゴリ、バリアント 2

MATCH n:category <-- the category label is used to limit the amount of nodes
RETURN DISTINCT labels(n), count(*) as count

次のようなものが返されます。

["category","the actual category label"], 2

完璧に見えますが、ノードに複数のカテゴリがある場合、これは機能しません

["category","cat1","cat2"], 2 <-- two nodes found with category "cat1" and "cat2"
["category","cat1"], 4 <-- four nodes found with category "cat1"

今、私はカテゴリごとのカウントを取得する方法がわかりません...
多分何かで、extract(..labels()..)またはfilter(..labels()..)それを行うことができるかもしれませんが、方法がわかりません。

ノードとしてのカテゴリはい、これは機能します...これは非常に簡単です。しかし、ラベルはノードを分類するためのものではないでしょうか? さらに、私が作成するすべての余分な関係..

たぶん、ラベルとノードの両方として実装する必要がありますか?
次に、ラベルを使用して、カテゴリを持つすべてのノードをすばやく取得できます。ノードを使用すると、カテゴリ数を取得できます。

私はまだこの問題について良い見通しを探しているので、具体的な実装の質問はまだできません。

4

1 に答える 1

6

私の2セント。

あなたの種類のカテゴリの場合、カテゴリごとにノードを使用し、そのカテゴリに属する​​ノードから BELONGS_TO 関係を作成します。私のこの好みにはいくつかの理由があります。

ラベルが追加された理由の 1 つは、多くの人がノードに「タイプ」プロパティを設定していたことです。ラベルについて話す別の方法は、ノードを分類できるという意味で、グラフに少しの「スキーマ」を追加することです。

ラベルの導入には、悪用されるリスクが常にあります。これは、主にグラフを格納するために設計されたデータベースの単なる追加ツールです。極端な場合、ほとんどすべてにラベルを使用して、「タグ付けされた」ノードのストアになる可能性があります。

最後に、リレーションシップのトラバースは、Neo4j が行う最速の処理です。私たちはマイクロ秒の単位を話しています。何千もの関係をノードに追加することを恐れないでください。開発者が定義した「スキーマのような」情報のラベルを残します。

したがって、ユーザーが追加したカテゴリの場合、ラベル付けを優先して、カテゴリ ノードと BELONGS_TO 関係を確実に作成します。

最後に、これはちょっとしたセルフ マーケティングであるという断り書きがあります。ノードごとに数万または数百万のリレーションシップがあり、そのリレーションシップをカウントするだけの場合は、それらのカウントをプロパティとしてノードにキャッシュすることをお勧めします。GraphAware Framework用の「 Relationship Count Module 」というモジュールを開発しました。これはまさにそれを行います。私は修士課程で実証しました。この論文は、数週間後に公開される予定で、このモジュールは、わずか 10 ~ 25% の書き込みスループット ペナルティで、高次数の頂点に対するカウント クエリを数桁高速化するというものです。詳細が必要な場合はお知らせください。

于 2013-09-02T10:11:43.617 に答える