0

我正在尝试设计一个配置/设置管理系统,我正在考虑将其存储在键值存储中。

我有一个多部分键 - OrganizationId + TenantId + UserId + ApplicationId 而 value 是一个序列化的配置/设置对象。密钥的多个部分是分层的 - 即用户 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. A B C D
  2. a, b, c, 0
  3. a, b, 0, 0
  4. 一, 0, 0, 0

有什么方法可以在一次通话中实现这一目标吗?我可以维护任何其他数据结构来实现这一点?我可以用什么算法来解决这个问题?

提前致谢 !!

4

1 回答 1

1

这是您的两个示例设置

(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

我没有将原始数据扩展超过两倍,我可以通过使用返回最大位置 <= 查询位置的单个查询来计算任何位置的设置。

于 2012-05-05T05:10:29.000 回答