Amazon S3 のようなアプリケーションのデータ モデルを設計する必要があります。この問題を、ユーザー、バケット、オブジェクトという 3 つの主要な概念に単純化してみましょう。このモデルを設計するには多くの方法がありますが、ここでは 2 つ挙げます。
3 種類 - ユーザー、バケット、オブジェクト。各オブジェクトには、その親としてバケットがあります。各バケットには、その親としてユーザーがあります。ユーザーはルートです。
動的種類 - ユーザーはユーザーの種類に保存され、バケットはバケットの種類に保存されます - #1 と同じです。ただし、バケット内のオブジェクトは、「<BucketID>_Object」という名前の動的な種類に格納されます。バケットとオブジェクト エンティティの間に親子関係はなくなりました。この関係は、オブジェクトの種類の名前によって確立されます。
#1 はもちろん、より直感的で伝統的なモデルです。#2 は急進的であると主張する人もいれば、ばかげていると言う人もいるかもしれません。
なぜ私は#2について考えているのですか?- 私のアプリケーションでは、オブジェクトに定義されたプロパティがバケットごとに異なる場合があります。これらのプロパティは、バケットの作成時にユーザーによって指定されます。また、オブジェクトのすべてのプロパティはクエリ可能である必要があります。バケットごとの動的なオブジェクトの種類により、これらの要件をサポートできます。さらに、オブジェクトの種類がルートの種類になったため、先祖フィルターを適用する必要がなくなりました。つまり、各オブジェクト プロパティのインデックスを無料で取得できます。モデル #1 では、祖先フィルターを適用する必要があります。つまり、クエリを実行するすべてのプロパティに対してカスタム インデックスが必要です。
雑な説明で申し訳ありません。わからなかったらもっと頑張ります。
私の質問は - #2 は完全に法外なモデルですか? #2では、私の種類は潜在的に数万に及ぶ可能性があります. それは大丈夫ですか?カスタム インデックスの数に制限があることは理解しています。しかし、動的な種類にカスタム インデックスを作成するのではなく、自動インデックスのみに依存しています。
ありがとう、キール