Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 分层多部分键值存储_Algorithm_Data Structures_Tree_B Tree - Fatal编程技术网

Algorithm 分层多部分键值存储

Algorithm 分层多部分键值存储,algorithm,data-structures,tree,b-tree,Algorithm,Data Structures,Tree,B Tree,我正在尝试设计一个配置/设置管理系统,我正在考虑将其存储在键值存储中 我有一个由多部分组成的键-OrganizationId+TenantId+UserId+ApplicationId,而值是一个序列化的配置/设置对象。密钥的多个部分是分层的,即用户id属于属于组织id的租户id 业务需求是这样的,我必须返回用户级别(用户id)配置/设置对象(如果存在),或者返回租户级别(租户id)或者返回组织级别(组织id)对象。组织级对象将始终存在 我计划将带有键的组织级对象存储为-(OrgId-a,Ten

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

我有一个由多部分组成的键-OrganizationId+TenantId+UserId+ApplicationId,而值是一个序列化的配置/设置对象。密钥的多个部分是分层的,即用户id属于属于组织id的租户id

业务需求是这样的,我必须返回用户级别(用户id)配置/设置对象(如果存在),或者返回租户级别(租户id)或者返回组织级别(组织id)对象。组织级对象将始终存在

我计划将带有键的组织级对象存储为-(OrgId-a,TenantId-0,UserId-0,AppId-0) 类似地,租户级别的对象将存储为-(OrgId-a、TENATID-b、UserId-0、AppId-0)等等

当我得到一个返回某个配置/设置对象的查询时,我得到-OrgId(a)、TENTATID(b)、UserId(c)和AppId(d)作为输入。我的工作是查询键值存储,以返回适当级别的对象

在最坏的情况下,我可以通过对键值存储进行4次调用来实现这一点-

  • a、 b、c、d
  • a、 b,c,0
  • a、 b,0,0
  • a、 0,0,0
  • 有没有什么方法可以让我在一次通话中就做到这一点?我可以维护任何其他数据结构来实现这一点吗?我可以用什么算法来解决这个问题


    提前谢谢

    以下是您的两个示例设置

    (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
    
    我没有将原始数据扩展超过两倍,我可以通过使用返回最大位置的单个查询来计算任何位置的设置