CosmosDB Gremlin APIを使用してソーシャルネットワークを構築したいのですが、良いパーティションキーを選ぶ方法を理解できません。CosmosDB gremlin APIを使ったソーシャルネットワークの設計方法は?
わかりやすくするために、アプリケーションは他のユーザー(Instagramスタイル)に従うユーザーと、ユーザーがフォロワーを配置できるグループ(Google Plus Circlesスタイル)を作成できるユーザーのみで構成されているとします。
- APPUSERそして、次のような関係があります:
のは、グラフデータベースは、これらの頂点を持っているとしましょう
- APPUSERを - 所有している - > FollowerGroup を
- AppUser - following - > APPUSER
- APPUSER - belongsToの - > FollowerGroup
私はappUserIdは、パーティション・キーのための良い候補だろうと考えました。そうすれば、そのユーザーに関連するすべてのもの(投稿、写真など)は同じパーティションに保存されます。
私のジレンマは、他のユーザーに従うことです。パーティションキーがappUserIdの場合、各ユーザーのデータは、それぞれのパーティションに分割されます。これは、パーティション間で書き込みを広げ、データを均等に広げるというルールを満たすためには最適です。
しかし、クエリを実行しているときに、ユーザーがフォローしているすべてのユーザーを言い、ステータスを取得する場合はどうなりますか。 20人をフォローしているとします。そのデータを取得するためのクエリは、20個のパーティションをまたがってすべてのデータを取得する必要があります。最も性能の高いクエリを同じパーティションから取得するルールには従いません。
もっと良いパーティションキーを使用できる人はいますか?データをモデル化するより良い方法は?
"PartitionKey"や "Key"のようなPartitionKeyを一般的なものにして、挿入/読み込みパターンを最適化できるようにアプリケーションで設定してください。 –