Tug のアドバイスは的を射ていたので、私もいくつかの視点を付け加えることができました。
バケットは、RDMS の世界における "データベースのインスタンス化" に (正確ではありませんが) 最も密接に関連していると見なすことができます。その「データベース」内には複数のテーブル/スキーマがあり、それらはすべてバケット内で組み合わせることができます。
バケットは、いくつかの共通の構成パラメーター (RAM クォータ、レプリカ数など) をすべて共有するデータの論理グループと考えてください。特定のデータセットを個別に制御する必要がある場合にのみ、データを複数のバケットに分割する必要があります。その他の理由は、異なるデータセットへの非常に異なるワークロード、またはそれらのデータセットへのワークロードを個別に追跡できるようにしたいという要望に関連しています。
いくつかの例:
-あるデータ セットのキャッシュ動作を別のデータ セットとは異なる方法で制御したい。たとえば、多くの顧客は常に RAM に保存したい「セッション」バケットを持っていますが、RAM にキャッシュされたすべてのデータを必要としない、より大きな「ユーザー プロファイル」バケットを持っている場合もあります。技術的には、これらの 2 つのデータ セットを 1 つのバケットに格納し、Couchbase が RAM に保持するデータをインテリジェントに処理できるようにすることもできますが、セッション データがプッシュされないという保証や制御はあまりできません...独自のバケットでそれを強制できます。また、トラフィックを個別に監視できるという利点もあります。
-一部のデータを他のデータよりも多く複製したい。通常、ほとんどのクラスターでレプリカを 1 つだけにすることをお勧めしますが、ユーザーが特定のデータセットを選択して、さらに時間をかけてレプリケートする場合があります。これは、個別のバケットを介して制御できます。
-同じように、一部のデータのみを別のクラスター/データセンターに複製したいと考えています。これもバケットごとに制御されるため、データを別のバケットに分割できます。
-特定のデータセットへのワークロード (特に書き込み量) にかなり極端な違いがある場合、ビュー/インデックスの観点から、データを別のバケットに分離することは理にかなっています。これは本当なので言及しますが、それが一般的なケースではないことも明確にしたいと思います。このアプローチは、問題を特定した後に使用する必要があります。
この最後の点に関しては、はい、バケットへのすべての書き込みはインデックス作成エンジンによって取得されますが、JSON 内のドキュメント タイプを使用することで、特定のドキュメントの処理を非常に迅速に中止でき、実際に悪影響を与えることはありません。特定のビューには当てはまらない大量のデータが入ってきます。よろしければ、ドキュメントのどの部分がそうではないことを暗示しているのか、特に興味があります。
そのため、一般的に、ほとんどの展開ではバケット数が少なく (2 ~ 3)、5 以上の数しかありません。10 という制限は、統計の内部追跡 (負荷またはバケツにそれがなくても、ここでは問題になりません)。将来のリリースでこのオーバーヘッドを削減する予定は確かにありますが、バケットを少数にするという推奨事項は変更されません。複数の「スキーマ」を単一の論理グループに結合し、ビュー/インデックスを適用できるという利点は、依然として存在します。
私たちは現在、より具体的なガイドラインとサイジングの推奨事項を考えているところです (最初の 2 つのブログは、そうするまでの一時しのぎとして書きました)。
最初のアプローチとして、設計ドキュメントの数を 4 前後に維持することをお勧めします。これは、デフォルトで最大 4 つまで並列処理するためです。この数を増やすことはできますが、CPU とディスクの IO キャパシティを増やして一致させる必要があります。次に、各ドキュメント内のビューの数を比較的低く (おそらく 10 をはるかに下回る) 維持する必要があります。これは、各ドキュメントが順次処理されるためです。
私は最近、かなり大量のビュー (約 8 つの設計ドキュメントと 20 近くのビューを持ついくつかの DD) を持つ 1 人のユーザーと協力しました。明らかにアプリケーションに大きく依存しますが、1 つのインデックスから複数の異なる「クエリ」を生成するようにしてください。リダクション、キープレフィックス (ビュー内)、および照合を使用して、すべてを異なる範囲およびグループ化クエリと組み合わせて、最初は混雑しているように見えるかもしれませんが、実際には非常に柔軟な単一のインデックスを作成できます。
設計ドキュメントとビューが少ないほど、必要なディスク容量、IO、および CPU リソースが少なくなります。残念ながら、魔法の弾丸や厳格なガイドライン番号は決してありません. 最後に、YMMV と独自のデータセットでのテストは、私が書くことができる複数ページの応答よりも優れています ;-)
お役に立てば幸いです。公開したくない特定のユースケースについて具体的な質問がある場合は、遠慮なく直接お問い合わせください。
ペリー