【问题标题】:hierarchical multi-part key value store分层多部分键值存储
【发布时间】:2012-05-05 01:44:26
【问题描述】:

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

我有一个多部分键 - 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. a, 0, 0, 0

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

提前致谢!!

【问题讨论】:

    标签: algorithm data-structures tree b-tree


    【解决方案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
    

    我没有将原始数据扩展超过两倍,我可以通过使用返回最大位置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 2018-05-07
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      相关资源
      最近更新 更多