首页 / 专利库 / 电脑编程 / 临时别名 / 存储器读取方法

存储器读取方法

阅读:80发布:2020-05-20

专利汇可以提供存储器读取方法专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种 存储器 读取方法,该方法包括:将用户信息表对应的所有外键索引数据存储在永久存储模 块 ;利用基于主存的索引高频数据缓存模块,将索引高频数据缓存在主存中,根据数据 访问 的累加 频率 进行缓存替换,利用基于一致性散列的缓存结构对主存的缓存区进行管理。本发明提出了一种存储器读取方法,根据存储区块访问频率更准确地捕获数据访问的特征,大幅提高数据查询访问的效率。,下面是存储器读取方法专利的具体信息内容。

1.一种存储器读取方法,用于对非关系数据存储系统进行数据读取,其特征在于,包括:
将用户信息表对应的所有外键索引数据存储在永久存储模;利用基于主存的索引高频数据缓存模块,将索引高频数据缓存在主存中,根据数据访问的累加频率进行缓存替换,利用基于一致性散列的缓存结构对主存的缓存区进行管理。
2.根据权利要求1所述的方法,其特征在于,所述将用户信息表对应的所有外键索引数据存储在永久存储模块,进一步包括:
为保存在用户信息表中的外键属性建立索引表,并将索引表保存在非关系数据存储系统中,每个索引表用来存储管理用户信息表中的待查询外键属性的索引,为用户信息表中待建立索引的外键属性定义如下格式的索引表主键:
<用户信息表索引列名,用户信息表索引列值,用户信息表主键>
其中,索引列名是用户信息表中被索引属性的别名;提供用户信息表中被索引记录的地址,通过用户信息表主键获得用户信息表中被索引的记录;以查询属性为索引表主键,索引表包含用户信息表的部分字段,只将查询中需要辅助性访问的字段存放在索引表的外键属性中;对于多个外键属性列的组合查询,基于多个查询属性列建立索引,使用逗号做分隔符,在多个属性列上建立了索引后,将组合查询转换成基于索引表主键的查询;
所述利用基于主存的索引高频数据缓存模块,将索引高频数据缓存在主存中,进一步包括:
主存高频索引数据缓存采用以下主键格式:
<用户信息表索引列名,用户信息表索引列值>
其中,用户信息表索引列名和用户信息表索引列值的含义与永久索引存储层中相同,主存索引缓存层中的每个索引主键对应着一个具有相同索引列值的索引记录集合,该集合包含了与该索引值对应的所有索引表数据记录,集合中也包含了需要访问的其他外键属性,完整的主存索引数据格式如下:
索引主键:<用户信息表索引列名,用户信息表索引列值>
索引集合:{<用户信息表主键,{<频繁访问列名,频繁访问列值>}>}
用户数据记录由该集合对应的用户信息表主键到用户信息表中获得,索引主存缓存层数据存储在主存数据库中,并由主存数据库自动完成上述散列和查询过程,该查询过程包括:首先到索引主存缓存层查询高频索引数据,若缓存中没有命中,则将查询转发到索引永久存储层进行检索。
3.根据权利要求2所述的方法,其特征在于,所述根据数据访问的累加频率进行缓存替换,进一步包括:
周期性地累加缓存索引集合被访问的次数,并将访问算法周期性地累加得到频率值保存在缓存元数据中,对所有记录的累加频率排序,选择累加频率最高的预定个数的索引记录缓存到主存中;
将用户信息表、索引表和数值表全部存储在基于非关系数据存储系统的索引永久存储层中,索引缓存存储结构基于主存数据库的集合,主存数据库也是以键值对格式来组织数据,以高频数据的索引主键做主存数据库的键,索引集合作为主存数据库的值保存在主存缓存中,以使具有相同索引列值的记录被绑定在同一个集合中,基于索引列值的查询命中是以集合为单位的,每个集合都会累加它在一个计算周期内的访问次数;在执行查询请求时,主存缓存的服务进程对访问到的每条索引数据记录本周期内的访问次数,而不对主存缓存的数据进行替换,直到查询请求次数达到预设频率计算周期时,服务进程触发缓存的更新替换,在对所有的记录计算频率之后,根据频率排序,将频率排序最高K个集合记录缓存到主存中,其中数值K的选择根据缓存空间能够容纳的记录条数限制计算出频率阈值,高于阈值的集合被缓存到主存中。
4.根据权利要求3所述的方法,其特征在于,所述数据存储系统使用ZooKeeper来检测主存节点上服务进程的活跃状态,索引主存缓存层每个主存节点服务进程分别建立与ZooKeeper的会话,并创建临时节点来表示自身的活跃状态,每个主存节点服务进程从ZooKeeper系统镜像中观察到其他节点进程的活跃状态;
根据根据数据输入方式的不同,将索引创建分为面向流式数据和面向批处理数据的索引创建;索引创建过程都是读取用户信息表的一条记录,在外键属性上生成一条索引记录,如果满足缓存条件,同时生成主存缓存层的索引数据,最后将索引数据分别更新到永久存储层与主存缓存层,并更新数值表;所述数据存储系统利用MapReduce来并行化执行静态数据索引创建,MapReduce任务首先得到输入,其中Row为用户信息表的行键,Result是通过Row获得的非关系数据存储系统记录,然后根据索引信息生成其对应的索引数据,并将索引数据插入到层次索引中,以利用MapReduce提供的并行化处理能加速索引创建过程。

说明书全文

存储器读取方法

技术领域

[0001] 本发明涉及数据存取,特别涉及一种存储器读取方法。

背景技术

[0002] 为了有效应对海量数据的存储与查询管理,人们越来越多地用分布式数据存储系统替代关系数据库管理系统。在迫切的企业大数据应用需求推动下,目前出现了非关系数据存储系统。然而,由于现有非关系数据存储系统缺少外键索引能,需要对全表进行扫描,导致查询效率低下,难以满足需要快速响应的数据查询和统计分析场景。

发明内容

[0003] 为解决上述现有技术所存在的问题,本发明提出了一种存储器读取方法,包括:
[0004] 将用户信息表对应的所有外键索引数据存储在永久存储模;利用基于主存的索引高频数据缓存模块,将索引高频数据缓存在主存中,根据数据访问的累加频率进行缓存替换,利用基于一致性散列的缓存结构对主存的缓存区进行管理。
[0005] 优选地,所述将用户信息表对应的所有外键索引数据存储在永久存储模块,进一步包括:
[0006] 为保存在用户信息表中的外键属性建立索引表,并将索引表保存在非关系数据存储系统中,每个索引表用来存储管理用户信息表中的待查询外键属性的索引,为用户信息表中待建立索引的外键属性定义如下格式的索引表主键:
[0007] <用户信息表索引列名,用户信息表索引列值,用户信息表主键>[0008] 其中,索引列名是用户信息表中被索引属性的别名;提供用户信息表中被索引记录的地址,通过用户信息表主键获得用户信息表中被索引的记录;以查询属性为索引表主键,索引表包含用户信息表的部分字段,只将查询中需要辅助性访问的字段存放在索引表的外键属性中;对于多个外键属性列的组合查询,基于多个查询属性列建立索引,使用逗号做分隔符,在多个属性列上建立了索引后,将组合查询转换成基于索引表主键的查询;
[0009] 所述利用基于主存的索引高频数据缓存模块,将索引高频数据缓存在主存中,进一步包括:
[0010] 主存高频索引数据缓存采用以下主键格式:
[0011] <用户信息表索引列名,用户信息表索引列值>
[0012] 其中,用户信息表索引列名和用户信息表索引列值的含义与永久索引存储层中相同,主存索引缓存层中的每个索引主键对应着一个具有相同索引列值的索引记录集合,该集合包含了与该索引值对应的所有索引表数据记录,集合中也包含了需要访问的其他外键属性,完整的主存索引数据格式如下:
[0013] 索引主键:<用户信息表索引列名,用户信息表索引列值>
[0014] 索引集合:{<用户信息表主键,{<频繁访问列名,频繁访问列值>}>}[0015] 用户数据记录由该集合对应的用户信息表主键到用户信息表中获得,索引主存缓存层数据存储在主存数据库中,并由主存数据库自动完成上述散列和查询过程,该查询过程包括:首先到索引主存缓存层查询高频索引数据,若缓存中没有命中,则将查询转发到索引永久存储层进行检索。
[0016] 优选地,所述根据数据访问的累加频率进行缓存替换,进一步包括:
[0017] 周期性地累加缓存索引集合被访问的次数,并将访问算法周期性地累加得到频率值保存在缓存元数据中,对所有记录的累加频率排序,选择累加频率最高的预定个数的索引记录缓存到主存中;
[0018] 将用户信息表、索引表和数值表全部存储在基于非关系数据存储系统的索引永久存储层中,索引缓存存储结构基于主存数据库的集合,主存数据库也是以键值对格式来组织数据,以高频数据的索引主键做主存数据库的键,索引集合作为主存数据库的值保存在主存缓存中,以使具有相同索引列值的记录被绑定在同一个集合中,基于索引列值的查询命中是以集合为单位的,每个集合都会累加它在一个计算周期内的访问次数;在执行查询请求时,主存缓存的服务进程对访问到的每条索引数据记录本周期内的访问次数,而不对主存缓存的数据进行替换,直到查询请求次数达到预设频率计算周期时,服务进程触发缓存的更新替换,在对所有的记录计算频率之后,根据频率排序,将频率排序最高K个集合记录缓存到主存中,其中数值K的选择根据缓存空间能够容纳的记录条数限制计算出频率阈值,高于阈值的集合被缓存到主存中。
[0019] 优选地,所述数据存储系统使用ZooKeeper来检测主存节点上服务进程的活跃状态,索引主存缓存层每个主存节点服务进程分别建立与ZooKeeper的会话,并创建临时节点来表示自身的活跃状态,每个主存节点服务进程从ZooKeeper系统镜像中观察到其他节点进程的活跃状态;
[0020] 根据根据数据输入方式的不同,将索引创建分为面向流式数据和面向批处理数据的索引创建;索引创建过程都是读取用户信息表的一条记录,在外键属性上生成一条索引记录,如果满足缓存条件,同时生成主存缓存层的索引数据,最后将索引数据分别更新到永久存储层与主存缓存层,并更新数值表;所述数据存储系统利用MapReduce来并行化执行静态数据索引创建,MapReduce任务首先得到输入,其中Row为用户信息表的行键,Result是通过Row获得的非关系数据存储系统记录,然后根据索引信息生成其对应的索引数据,并将索引数据插入到层次索引中,以利用MapReduce提供的并行化处理能力来加速索引创建过程。
[0021] 本发明相比现有技术,具有以下优点:
[0022] 本发明提出了一种存储器读取方法,根据存储区块访问频率更准确地捕获数据访问的特征,大幅提高数据查询访问的效率。附图说明
[0023] 图1是根据本发明实施例的存储器读取方法的流程图

具体实施方式

[0024] 下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
[0025] 本发明的一方面提供了一种基于数据存储系统的存储器读取方法。图1是根据本发明实施例的存储器读取方法流程图。本发明的数据存储系统基于非关系数据存储系统的层次索引和查询。数据存储系统分为两层:1)永久存储层,用来存储用户信息表对应的所有外键索引数据;2)基于主存的缓存层,利用基于索引高频数据缓存替换策略,将部分索引高频数据缓存在主存中。并考虑数据访问的累加频率,从而更准确地捕获数据访问的特征。同时在缓存空间未满的时候,改进缓存插入策略,保证缓存空间得到充分利用,缓存命中率在数据加载阶段可以得到快速提升并趋于稳定,同时,基于一致性散列的主存缓存结构为本发明的数据存储系统缓存层提供了良好的可扩展性和容错性。
[0026] 为了避免对外键查询时的全表扫描,本发明的数据存储系统为保存在用户信息表中的外键属性建立索引表,并将索引表保存在非关系数据存储系统中。每个索引表用来存储管理用户信息表中的某个待查询外键属性的索引。本发明为用户信息表中待建立索引的外键属性定义如下格式的索引表主键:
[0027] <用户信息表索引列名,用户信息表索引列值,用户信息表主键>[0028] 其中,索引列名是用户信息表中被索引属性的别名。通过将列名映射到一个简短的别名,可减少索引表主键存储空间的开销。保证了索引表主键的唯一性;提供用户信息表中被索引记录的地址,通过用户信息表主键,可快速获得用户信息表中被索引的记录。以查询属性为索引表主键,索引表包含用户信息表的部分字段,只将查询中需要辅助性访问的字段存放在索引表的外键属性中,避免再次访问用户信息表而导致的二次磁盘访问。
[0029] 在实际应用中存在多个外键属性组合查询的需求,为此,类似于数据库中的多字段索引,需要创建多个外键属性列的组合索引。对于多个外键属性列的组合查询情况,本发明基于多个查询属性列建立索引。使用逗号做分隔符(本发明的数据存储系统的分隔符是可配置的,对于整数、浮点数类型和固定长度字符串类型,系统指定使用‘\0’作为分隔符。对于变长字符串类型,用户需自定义分隔符)。在多个属性列上建立了索引后,组合查询就转换成基于索引表主键的查询,索引过程和查询过程与单属性查询原理相同。
[0030] 本发明进一步的方面将索引中那些访问频率高的索引数据作为高频数据缓存在主存中,形成层次索引存储和查询机制,进一步提高索引的查询速度。数据存储系统中的主存高频索引数据缓存格式不同于永久存储中的索引格式,主存缓存索引的主键格式为:
[0031] <用户信息表索引列名,用户信息表索引列值>
[0032] 其中,用户信息表索引列名和用户信息表索引列值的含义与永久索引存储层中的相同。主存索引缓存层中的每个索引主键对应着一个具有相同索引列值的索引记录集合,该集合包含了与该索引值对应的所有索引表数据记录。与永久索引存储层一样,集合中也包含了需要访问的其他外键属性。因此,完整的主存索引数据格式如下:
[0033] 索引主键:<用户信息表索引列名,用户信息表索引列值>
[0034] 索引集合:{<用户信息表主键,{<频繁访问列名,频繁访问列值>}>}[0035] 由该集合对应的用户信息表主键到用户信息表中可获得相应的用户数据记录。在实现上索引主存缓存层数据存储在主存数据库中,并由主存数据库自动完成上述散列和快速查询过程。
[0036] 层次索引存储模型的查询过程是:首先到索引主存缓存层查询高频索引数据,若缓存中没有命中,则将查询转发到索引永久存储层进行检索,降低了磁盘访问开销,提高整体查询性能。
[0037] 本发明引入了一致性散列来完成索引高频数据在主存中的存储管理。当存储节点发生变化时,只需要迁移小部分的数据。而且通过将存储节点映射到圆环的伪随机分布点上,能够有效地保证各存储节点之间的负载均衡。主存缓存需要通过两次散列来找到对应索引记录的真实位置:第一次通过一致性散列找到索引数据所在的服务器节点;第二次则通过主存数据库的散列机制找到节点内的索引数据地址。
[0038] 本发明在索引永久存储层中存储数值表,用来有序地记录和存储索引属性所有取值的集合,以支持高效的基于索引主存缓存的范围查询。在永久存储层的索引表中,在索引表主键中加入用户信息表主键以维护其唯一性。在数值表中,本发明只保存索引列值,因此数值表的记录条数会比用户信息表小得多。用户对层次索引存储系统进行范围查询时,数值表会被频繁访问,因此数值表会被底层文件系统缓存在主存中,可以大大提高数值表的查询效率。
[0039] 本发明将索引列取值进行粒度分段,每个分段范围内的多个索引列值对应一条数值表记录。将一条数值表记录对应的索引列取值范围内的索引记录存储在同一个主存缓存索引集合(如主存缓存索引结构)中。因此,采用上述方案后,仍然是一条数值表记录对应一个主存数据库集合。在处理范围查询时,首先查询数值表,得到落在查询范围内、满足查询条件的所有数值表记录。然后以数值表记录值为请求发起批量的单值查询,并汇总查询结果。因此不影响范围查询过程。
[0040] 当缓存满后需要选择合适的牺牲者淘汰出缓存,这就是缓存替换策略。在本发明的缓存替换策略中,周期性地累加缓存索引集合被访问的次数,并将访问算法周期性地累加得到频率值保存在缓存元数据中。进而,对所有记录的累加频率排序,选择累加频率最高的预定个数的索引记录缓存到主存中。
[0041] 用户信息表、索引表和数值表全部存储在基于非关系数据存储系统的索引永久存储层中。在主存缓存中,本发明保存索引高频数据。索引缓存存储结构是基于主存数据库的集合,主存数据库也是以键值对格式来组织数据。高频数据的索引主键做主存数据库的键,而索引集合作为主存数据库的值保存在主存缓存中。显然,具有相同索引列值的记录被绑定在同一个集合中,基于索引列值的查询命中是以集合为单位的。同时,它们也是频率累加的基本单位,每个集合都会累加它在一个计算周期内的访问次数。
[0042] 为了降低频率计算带来的计算和更新开销,在执行查询请求时,主存缓存的服务进程对访问到的每条索引数据记录本周期内的访问次数,此时并不对主存缓存的数据进行替换。直到查询请求次数达到预设频率计算周期时,服务进程触发缓存的更新替换。按照频率累加公式对所有的记录计算频率,根据频率排序,将频率排序最高K个集合记录缓存到主存中,集合中包含的记录条数是不固定的,所以数值K的选择根据缓存空间能够容纳的记录条数限制计算出频率阈值,高于阈值的集合被缓存到主存中。
[0043] 本发明的数据存储系统将整个层次索引存储系统划分为以下几个模块,系统功能模块划分。
[0044] 1)索引创建管理模块。管理索引的元数据,该元数据记录用户信息表对应的索引表名称、索引列等信息,并实现针对非关系数据存储系统的流式数据和静态数据两种不同特性数据的索引创建方法,包括支持索引表和数值表的插入、删除、更新操作。
[0045] 2)永久存储管理模块。提供索引表和数值表的永久存储,非关系数据存储系统为永久存储数据提供可扩展性和容错性。
[0046] 3)索引主存缓存模块。管理索引高频数据的缓存存储、更新和地址映射,实现频率累加缓存替换策略,使得最近频繁访问的数据能缓存到主存中。
[0047] 4)查询执行模块。将用户的查询请求翻译成系统识别的命令,调用对应的方法执行查询,并将查询结果汇总返回给客户端。
[0048] 本发明的数据存储系统使用了ZooKeeper来可靠地检测主存节点上服务进程的活跃状态。索引主存缓存层每个主存节点服务进程会分别建立与ZooKeeper的会话,并创建临时节点来表示自身的活跃状态。每个主存节点服务进程从ZooKeeper系统镜像中可以观察到其他节点进程的活跃状态。系统通过对分布主存节点状态的监测实现主存节点的失效检测和上线处理,从而实现索引主存缓存层的高可用性。
[0049] 根据数据输入方式的不同,索引创建可分为面向流式数据和面向批处理数据的索引创建。索引创建过程都是读取用户信息表的一条记录,在外键属性上生成一条索引记录,如果满足缓存条件,同时生成主存缓存层的索引数据。最后将索引数据分别更新到永久存储层与主存缓存层,并更新数值表。由于静态数据一般相对较大,为了能够加快静态数据索引的创建速度,本发明利用MapReduce来并行化执行静态数据索引创建。MapReduce任务首先得到输入,其中Row为用户信息表的行键,Result是通过Row获得的非关系数据存储系统记录。然后根据索引信息生成其对应的索引数据,并将索引数据插入到层次索引中。整个过程不需要Reduce阶段即可完成,同时由于用户信息表记录之间是相互独立的,所以可以充分利用MapReduce提供的并行化处理能力来加速索引创建过程。
[0050] 数据查询过程包括单值查询和范围查询。
[0051] (1)单值查询
[0052] 本发明通过建立外键属性上的索引,支持高效的外键列上的单值查询和范围查询。单值查询,即查询请求中条件属性被限定取值唯一的查询。对于单值查询,客户端的基本流程如下:
[0053] 1)从配置文件获取ZooKeeper的地址,建立与ZooKeeper的连接,获取注册的所有服务进程,确定当前提供主存缓存的所有服务进程位置信息。
[0054] 2)向主存缓存层的服务进程发起查询请求。若主存缓存层命中,则返回主存缓存层给出的结果,结束查询。
[0055] 3)若主存缓存层未命中,则向非关系数据存储系统的索引表发起查询请求。获取结果后,返回查询得到的结果,结束查询。
[0056] 可以看出,如果在主存缓存层命中,整个查询流程都不会访问到磁盘,减少了磁盘访问开销,能够大幅度提高响应速度。另外,对ZooKeeper访问获取的主存缓存层服务进程信息会被缓存在客户端,在后续的访问中会进一步减少数据查询的通信开销。
[0057] (2)范围查询
[0058] 本发明所说的范围查询,即查询请求中条件属性的取值是范围的查询。主存缓存层通过一致性散列的方法将数据分布到各个存储节点上来提高查询性能,而散列破坏了索引列的有序性,所以本发明需要记录索引表主键的所有取值,保存在数值表中。通过该数值表,本发明可以获得索引主键某个范围内所有存在的列值。对于范围查询,客户端的基本流程如下:
[0059] 1)从配置文件获取ZooKeeper的地址,建立与ZooKeeper的连接,获取注册的所有服务进程,确定当前提供主存缓存的所有服务进程位置信息。
[0060] 2)从数值表获取查询范围内所有的查询列值。
[0061] 3)依次发起单值查询请求。将查询结果汇总并返回。
[0062] 为了进一步提升查询效率,本发明的数据存储系统对范围查询进行如下的优化和改进:
[0063] 1)从配置文件获取ZooKeeper的地址,建立与ZooKeeper的连接,获取注册的所有服务进程,确定当前提供主存缓存的所有服务进程位置信息。
[0064] 2)根据范围查询的条件,客户端从数值表中获取范围之间存在的所有索引列值。
[0065] 3)对于所有存在的索引列值,根据一致性散列算法计算出存储节点地址,从而将所有存在的索引列值与相关的节点地址一一对应起来。
[0066] 4)并发地对相关节点发起查询请求,其中,对同一节点发起的多个查询请求将会合并成一个批量请求。
[0067] 5)各节点上的主存索引服务进程对查询请求进行响应,如果查询的内容在主存中,则直接返回主存中的数据;否则,服务进程将发起对持久存储层的查询,并返回查询结果。
[0068] 6)客户端汇总从各服务节点返回的查询结果。
[0069] 综上所述,本发明提出了一种存储器读取方法,根据存储区块访问频率更准确地捕获数据访问的特征,大幅提高数据查询访问的效率。
[0070] 显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件软件结合。
[0071] 应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈