1

私はグラフ データベースを初めて使用し、その約束された範囲とパワーに圧倒されました。アプリをデザインするときは、感情的なデザイン パターンと実際のパフォーマンス デザインを一致させることが非常に重要です。私を悩ませている質問の 1 つは、特定の情報をリレーション属性にするか、ノード属性にするかです。これがユースケースです。着信リレーション「service_provider」によって関連付けられているエンティティがあります。開始ノードは、終了ノードへのプロバイダーになります。現在、各サービスプロバイダーは、何らかの契約を介して顧客(または消費者)に関連付けられています。サービスの頻度、サービスごとのコスト、ノーショー料金など。これらの契約の詳細はサービスごとに異なりますが、属性は常に存在します。

したがって、私の質問は、これらのコントラクトがエンティティのペア (サービス プロバイダーとコンシューマー) に接続できる別のノードであるべきか、それとも関係自体の一部であるべきかということです。

私の感情的な感情はそれを関係の一部にすることであり、それが私の説明がそのような絵を描いた理由であることに注意してください. ただし、必ずしもそうであるとは限りません。私のアプローチを締めくくることができるように、あなたの意見を聞きたいです。

質問が間違った場所にあると思われる場合は、より良い場所を提案することを検討してください。

私はすでにドキュメントを参照しました @ docs.neo4j.org 推奨結果のブースト- すべてのドキュメントは、私が言及したことが可能な解決策であることを示しています。しかし、ここに懸念があります-例はリレーション属性についてはライトです-どちらのアプローチの長所と短所も実際には測定していません

同じの複数の関係... @ Stackoverflow - 実際には同じ質問ではありませんが、ユースケースに関連しています。

@bendaizer からの応答を参照すると、ここにパフォーマンスの質問があります。#1と#4(一部)を比較。コントラクトがサービス プロバイダーによって定義されていると仮定すると (少なくともほとんどの場合)、サービス プロバイダーがコントラクトを介してコンシューマーに接続できる唯一の方法です。そのため、契約に囲まれたサービスプロバイダーがあり、契約は消費者に接続されています。サービス プロバイダーで消費者を検索しようとすると、契約の余分なホップを実行する必要があります。#1 によると、同じ契約情報を関係プロパティに入れることができます。すべての契約が一意であると仮定すると、どちらがより良いパフォーマンスを期待できますか? そうする一方で、[「サービス プロバイダー X」のすべての顧客が 1 時間あたり 50 ドルの料金を支払っている - 1 時間あたり 50 ドルは契約情報の一部である] のような質問に答える能力を失いたくありません。

また、Google フォーラムで同じ質問を確認してください。

4

1 に答える 1

2

グラフの実装方法を決定するための一般的な経験則はありません。あなたにはさまざまな選択肢があります、そして私はあなたがあなたが最も簡単であると思うものに固執しなければならないと思いますが、それはあなたに良いパフォーマンスも与えます。

私は実際にあなたのケースで4つのオプションを見て、私の好みの順序でそれらをソートしました:

  • service_providerタイプの関係を定義し、キー/値プロパティ{コントラクト:コントラクトのタイプ}を追加します。次に、プロパティによってリレーションシップにインデックスを付けることができるため、インデックスからコントラクトと対応する開始ノードと終了ノードを取得できます。非常に簡単で、仕事をします。

  • コントラクトタイプのインデックスノードを定義できます。また、ノードに新しいプロバイダーを追加するたびに、そのノードをコントラクトのタイプにリンクします。もちろん、これはプロバイダーが一意であることを意味します。そうでない場合、どのコントラクトがクライアントノードのどのプロバイダーにリンクされているかを区別できません。契約の種類を明示的にパターンで識別して照合するためにデータベースを使用する場合を除いて、正直なところ、これが最善の解決策だとは思いません(高度なグラフマイニングは、計画している場合にのみお勧めします)。

  • コントラクトごとにノードを定義できます(コントラクトタイプごとに1つのノードではなく)、より多くのノードがあります。ただし、これは、「egdeoveredge」タイプの関係が必要な場合に役立つことがあります。これは、個々の分類の目的に当てはまる可能性があります。これは、ノードがさまざまなプロバイダーとさまざまなタイプのコントラクトを持つことができ、コントラクトを特定の機能に個別にアタッチできる場合に役立ちます。

  • ノード間に2つの関係を定義できます。1つはタイプservice_providerで、もう1つはコントラクトのタイプです。情報を保存するだけの場合は、最初のアプローチの方が良いと思います。ただし、この場合は2番目のものをお勧めしますが、これは将来のパターンマッチングにも役立ちます。

ご覧のとおり、グラフで何を計画しているかによって異なります。お役に立てれば !

于 2013-01-11T10:26:15.277 に答える