顧客データを保存するアプリを検討しています。CouchBaseでのバケットの動作方法を考えると、すべての顧客データは1つのバケットに含まれます。私には2つの選択肢があるようです。
所属する顧客を示すフィールドを各レコードに割り当てることにより、ビューにマルチテナンシーを実装します。
顧客IDであるすべてのキーに係数を設定して実装します。
ただし、ビューを使用するので、両方を実行したいと思います。ケース2の場合、インデックスを作成できるように(または、マップフェーズでキーの一部を引き出して顧客のインデックスを作成できるように)、レコードにデータを含める必要があります。オプション1では、データが必要です。これは、データを取得する際のチェックとしてキーの一部となり、間違った顧客データを送信しないようにします。
問題は、これは複数の顧客が対話するサービスであり、最初の顧客の要求に応じて、一方の顧客がデータを作成し、もう一方の顧客がそれを表示する場合があることです。しかし、控えめに言っても、それを表示することを許可されたすべての人をリストする各レコードにACLを配置することは問題があります。
この質問に答えるための一般的な方法論またはデザインパターンがあるに違いありません。ベストプラクティスへのいくつかの指針をいただければ幸いです。
また、インデックスが特定の関連データと顧客IDの両方でインデックスを作成している場合のパフォーマンスについても懸念しています...多数の異なる顧客は、おそらくインデックスの効率を大幅に低下させます。(しかし、そうではないかもしれません。)