0

キー値ストアに保存することを考えている構成/設定管理システムを設計しようとしています。

マルチパート キーがあります - OrganizationId + TenantId + UserId + ApplicationId ですが、値はシリアル化された構成/設定オブジェクトです。キーの複数の部分は階層的です。つまり、ユーザー ID は組織 ID に属するテナント ID に属します。

ビジネス要件として、ユーザー レベル (ユーザー ID) の構成/設定オブジェクトが存在する場合はそれを返すか、テナント レベル (テナント ID) を返すか、組織レベル (組織 ID) オブジェクトを返す必要があります。組織レベルのオブジェクトは常に存在します。

組織レベルのオブジェクトをキーとして -(OrgId - a, TenantId - 0, UserId - 0, AppId - 0) として保存する予定です 同様に、テナント レベルのオブジェクトは - (OrgId - a, TenantId - b, UserId - 0、AppId - 0) など...

特定の構成/設定オブジェクトを返すクエリを取得すると、OrgId(a)、TenantId(b)、UserId(c)、および AppId(d) を入力として取得します。私の仕事は、キー値ストアをクエリして、適切なレベルでオブジェクトを返すことです

最悪の場合、キー値ストアに対して 4 回の呼び出しを行うことで、これを実現できます。

  1. あいうえお
  2. a、b、c、0
  3. a、b、0、0
  4. あ、0、0、0

1回の呼び出しでこれを達成できる方法はありますか? これを達成するために維持できる追加のデータ構造はありますか? この問題を解決するために使用できるアルゴリズムはありますか?

前もって感謝します !!

4

1 に答える 1

1

ここにあなたの2つの設定例があります

(a,0,0,0) => 1
(a,b,0,0) => 2

ここで、可能なすべての組み合わせを辞書順に調べて、何が得られるかを確認するとします。

(a,0,0,0) => 1
(a,0,0,a) => 1
....
(a,b,0,0) => 2
(a,b,0,a) => 2
...
(a,c,0,0) => 1

物事が変化するポイントだけを保存します

(a,0,0,0) => 1
(a,b,0,0) => 2
(a,c,0,0) => 1

元のデータを 2 倍以上に拡張していません。最大の位置 <= クエリの位置を返す単一のクエリを使用して、任意の位置の設定を行うことができます。

于 2012-05-05T05:10:29.000 に答える