2017-10-11 4 views
-1

CosmosDB Gremlin APIを使用してソーシャルネットワークを構築したいのですが、良いパーティションキーを選ぶ方法を理解できません。CosmosDB gremlin APIを使ったソーシャルネットワークの設計方法は?

わかりやすくするために、アプリケーションは他のユーザー(Instagramスタイル)に従うユーザーと、ユーザーがフォロワーを配置できるグループ(Google Plus Circlesスタイル)を作成できるユーザーのみで構成されているとします。

  • FollowerGroup
    • APPUSERそして、次のような関係があります:

      のは、グラフデータベースは、これらの頂点を持っているとしましょう

      • APPUSERを - 所有している - > FollowerGroup
      • AppUser - following - > APPUSER
      • APPUSER - belongsToの - > FollowerGroup

      私はappUserIdは、パーティション・キーのための良い候補だろうと考えました。そうすれば、そのユーザーに関連するすべてのもの(投稿、写真など)は同じパーティションに保存されます。

      私のジレンマは、他のユーザーに従うことです。パーティションキーがappUserIdの場合、各ユーザーのデータは、それぞれのパーティションに分割されます。これは、パーティション間で書き込みを広げ、データを均等に広げるというルールを満たすためには最適です。

      しかし、クエリを実行しているときに、ユーザーがフォローしているすべてのユーザーを言い、ステータスを取得する場合はどうなりますか。 20人をフォローしているとします。そのデータを取得するためのクエリは、20個のパーティションをまたがってすべてのデータを取得する必要があります。最も性能の高いクエリを同じパーティションから取得するルールには従いません。

      もっと良いパーティションキーを使用できる人はいますか?データをモデル化するより良い方法は?

    +0

    "PartitionKey"や "Key"のようなPartitionKeyを一般的なものにして、挿入/読み込みパターンを最適化できるようにアプリケーションで設定してください。 –

    答えて

    2

    これはソーシャルネットワークの古典的な問題であり、複数回呼び出されています。これについて読むためにオンラインで入手できる多くのリソースがあります。本質的には

    、それはスケールアウトグラフのクロスパーティションを行くクエリを避けるために、非常に難しいです。

    最終的なデザインの選択は実際には次のようになります。1.処理する予定のスケール 2.クエリの作業負荷(たとえば、すべてのクエリ)。すべてのクエリと頻度を把握している場合は、パーティション戦略を最適化できます。

    +0

    リンクありがとうございます。私はそれらをチェックする必要があります。 – Treyphor

    関連する問題