4

いくつかのノードタイプまたはフィールドに基づいて複数のインデックスを作成する必要がある場合、より良いアプローチは何でしょうか。たとえば、生徒のグラフを作成し、学校とIDで生徒にインデックスを付けたいとします。

私が理解しているように、私はこのような学校ごとのインデックスを持つことができます:

// add student
Index<Node> index = this.graphDb.index().forNodes(schoolName);
Node node = this.graphDb.createNode();
node.setProperty("id", studentId);
index.add(node, "id", studentId);

// get student
Index<Node> index = this.graphDb.index().forNodes(schoolName);
Node node = index.get("id", studentId).getSingle();

一方、1つのインデックスを使用して、次のようなことを行うことができます。

// add student
Index<Node> index = this.graphDb.index().forNodes("schools");
Node node = this.graphDb.createNode();
node.setProperty("id", studentId);
index.add(node, schoolName + ":id", studentId);

// get student
Index<Node> index = this.graphDb.index().forNodes("schools");
Node node = index.get(schoolName + ":id", studentId).getSingle();

より良いアプローチは何ですか?どちらか一方に利点はありますか?多くのノードが関係している場合、特にパフォーマンス面またはストレージ面で。

ありがとう

4

1 に答える 1

7

あなたのアプローチは完全に有効です。学校のすべての生徒にクエリを実行する場合は、次を使用できます。

Iterable<Node> pupils = index.query(schoolName + ":*");

両方のフィールドをインデックスに追加することもできます。

index.add(node, "schoolName", studentId);
index.add(node, "id", studentId);

次に、複合クエリでそれらをクエリします

Iterable<Node> pupils = index.query("schoolName:"+schoolName + " AND id:"+id);

最初のものはインデックス サイズが小さいですが、2 番目のものはより強力です。パフォーマンスに関しては、それほど大きな違いはありません (ただし、テストして報告することはできます)。

また、学校がノードであり、時間プロパティLEARNS_ATも持つことができるリレーションシップによって生徒がそれに関連付けられているグラフで構造を使用することもできるため、ドメインのモデル化が容易になります。このデモグラフを見るstartend

于 2012-04-27T06:14:13.603 に答える