拉链式存储_拉链表的存储方法及存储系统与流程

本发明涉及计算机技术领域,特别涉及一种拉链表的存储方法及存储系统。

背景技术:

随着大数据技术的普及,越来越多的传统数据库数据被移到HIVE(一种数据仓库工具)中存储。现有技术中,将每天获得的拉链表存储在对应的分区中,虽然这样可以查询到历史上任意一天的数据,但是会带来巨大的存储空间的浪费。

技术实现要素:

本发明要解决的技术问题是为了克服现有技术中的拉链表的存储方式会造成巨大的存储空间浪费的缺陷,提供一种拉链表的存储方法及存储系统。

本发明是通过下述技术方案来解决上述技术问题:

一种拉链表的存储方法,其特点在于,所述存储方法包括以下步骤:

S1、从用户端获取当天的全量数据,并从拉链表中获取前一天的全量数据;所述拉链表包括结束时间字段;

S2、判断当天的全量数据与前一天的全量数据是否存在相同的第一数据;若判断为是,执行步骤S3;

S3、将全量数据中的第二数据存储于拉链表中的对应的分区中,并标记所述第二数据的结束时间为大于当前时刻;所述第二数据为当天的全量数据中除第一数据之外的数据。

较佳地,所述拉链表还包括起始时间字段;

步骤S2还包括:

判断所述第二数据中是否有新增数据;

若判断为是,步骤S3还包括:

在将所述新增数据存储于拉链表中的对应的分区中时,将所述新增数据的起始时间标记为当前时刻。

较佳地,步骤S2还包括:

判断所述第二数据中是否有删除数据;所述删除数据记录在前一天的全量数据中,未记录在当天的全量数据中;

若判断为是,步骤S3还包括:

将前一天的全量数据中的删除数据的结束时间标记为当前时刻。

较佳地,步骤S2还包括:

判断所述第二数据中是否有更新数据;所述更新数据在前一天的全量数据与当天的全量数据中的数据内容不相同;

若判断为是,步骤S3还包括:

将前一天的全量数据中的更新数据的结束时间标记为当前时刻;并将当天的全量数据中的更新数据的起始时间标记为当前时刻,结束时间标记为大于当前时刻。

本发明还提供一种拉链表的存储系统,其特点在于,所述存储系统包括:

数据获取模块,用于从用户端获取当天的全量数据,并从拉链表中获取前一天的全量数据;所述拉链表包括结束时间字段;

判断模块,用于判断当天的全量数据与前一天的全量数据是否存在相同的第一数据;若判断为是,调用存储模块和时间标记模块;

所述存储模块用于将全量数据中的第二数据存储于拉链表中的对应的分区中;

所述时间标记模块用于将第二数据的结束时间标记为大于当前时刻;

所述第二数据为当天的全量数据中除第一数据之外的数据。

较佳地,所述拉链表还包括起始时间字段;

所述判断模块还用于判断所述第二数据中是否有新增数据;若判断为是,在存储模块将所述新增数据存储于拉链表中时,调用所述时间标记模块;

所述时间标记模块将所述新增数据的起始时间标记为当前时刻。

较佳地,所述判断模块还用于判断所述第二数据中是否有删除数据,所述删除数据记录在前一天的全量数据中,未记录在当天的全量数据中;若判断为是,则调用所述时间标记模块;

所述时间标记模块将前一天的全量数据中的删除数据的结束时间标记为当前时刻。

较佳地,所述判断模块还用于判断所述第二数据中是否有更新数据,所述更新数据在前一天的全量数据与当天的全量数据中的数据内容不相同;若判断为是,则调用所述时间标记模块;

所述时间标记模块将前一天的全量数据中的更新数据的结束时间标记为当前时刻,并将当天的全量数据中的更新数据的起始时间标记为当前时刻,结束时间标记为大于当前时刻。

本发明的积极进步效果在于:本发明仅存储当天的全量数据中与前一天的全量数据不同的数据,并通过标记当天的全量数据的结束时间的方式,使得本发明在不影响搜索效果的前提下,大大节约了存储空间。

附图说明

图1为本发明实施例1的拉链表的存储方法的流程图。

图2为本发明实施例2的拉链表的存储系统的模块示意图。

具体实施方式

下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。

实施例1

如图1所示,本实施例的拉链表的存储方法包括以下步骤:

步骤101、从用户端获取当天的全量数据,并从拉链表中获取前一天的全量数据。

其中,拉链表包括结束时间字段和起始时间字段,结束时间字段和起始时间字段可在用户新建拉链表时添加。起始时间表征拉链表中的数据的存储时间,结束时间大于起始时间,且一般为一个很大的日期(也即距离当天很远的一个日期),比如3000年1月1日。

全量数据一般每天均会进行获取,并将同天获得的全量数据中需要存储的数据(也就是以下所述的第二数据)存储在相同的分区中,也就是说,若当前为2015年4月5号,则将第二数据存储于拉链表时,将当天存储的第二数据的起始时间标记为2015年4月5号,结束时间标记为3000年1月1日。

步骤102、判断当天的全量数据与前一天的全量数据是否存在相同的第一数据。若判断为是,则说明当天的全量数据与前一天的全量数据中存在相同数据(也即第一数据),存储两次相同的数据较多余,则执行步骤103。若判断为否,则说明当天的全量数据与前一天的全量数据完全不相同,则执行步骤103’。

步骤103、将全量数据中的第二数据存储于拉链表中的对应的分区中,并标记所述第二数据的结束时间为大于当前时刻,也就是上述所说的一个很大的日期。

其中,第二数据为当天的全量数据中除第一数据之外的数据,也就是当天的全量数据中与前一天的全量数据不相同的数据。

步骤103’、将当天的全量数据存储于拉链表中的对应的分区中,并将当天的全量数据的结束时间均标记为大于当前时刻。也即当当天的全量数据与前一天的全量数据完全不相同时,不对当天的全量数据做任何操作直接存储于拉链表的对应的分区中。

从而,本实施例的存储方法可大大节约存储空间,尤其对那些每天数据变化量很少的拉链表。例如,一张拉链表每天的数据变化量为x(假设每天变化量不变),存储天数为n天,拉链表所占空间的百分比为原来的(1+x+…+xn)/n。假设每天的变化量为20%,存储了4天,则一张拉链表所占空间仅为原来的31.2%。且当存储时间越长,拉链表的数量越多,则可节省的空间就越大。

本实施例中,步骤102中还可进一步判断第二数据中是否有新增数据。若当天的全量数据中存在新增数据;则步骤103中,在将新增数据存储于拉链表中的对应的分区中时,还将新增数据的起始时间标记为当前时刻。此时,拉链表中新增数据的起始时间为当前时刻(若当前为2015年4月5号,则起始时间为2015年4月5号),结束时间为一个很大的日期(例如,3000年1月1日)。

其中,新增数据为记录在当天的全量数据中,但未记录在拉链表中的数据。也即若拉链表为订单数据拉链表,新增数据也即为当天新增加的订单。若当天为4月5号,则将新增数据存储于拉链表时记录新增数据的起始时间为4月5号,结束时间标记可标记为3000年1月1日。若用户查询4月4号之前的有效订单,则不会显示该订单数据;若用户查询4月5之后包括当天的有效订单,则会显示该订单数据(除非之后对该订单有进行修改或删除)。

本实施例中,步骤102中还可进一步判断第二数据中是否有删除数据。若存在删除数据,则步骤103中还将拉链表中前一天的全量数据中的删除数据的结束时间标记为当前时刻。

其中,该删除数据为记录在前一天的全量数据中,但未记录在当天的全量数据中的数据。同样以订单数据拉链表为例,删除数据为当天(4月5号)删除的订单,也就是说,拉链表中存储有该订单数据信息,而当天的全量数据中已无该订单数据记录,说明订单数据的有效时间至今天为止,则将拉链表中的删除数据的结束时间重新标记为当前时刻,也即4月5号。此时,若用户查询订单建立日至4月4号之前的有效订单,则会显示该订单数据;若用户查询4月5之后的有效订单,则不会显示该订单数据。

本实施例中,步骤102中还可进一步判断第二数据中是否有更新数据。若存在更新数据,则步骤103中将拉链表中的前一天的全量数据中的更新数据的结束时间标记为当前时刻;并将当天的全量数据中的更新数据的起始时间标记为当前时刻,结束时间标记为大于当前时刻。

其中,更新数据在前一天的全量数据与当天的全量数据中的数据内容不相同。同样以订单数据拉链表为例,若当天(4月5号)用户更新了订单的数量或价格等数据内容,则将拉链表中的该订单的结束时间重新标记为4月5号,而将第二数据存储于拉链表时,将第二数据中的该订单的起始时间标记为4月5号,结束时间标记为一个很大的日期,例如3000年1月1日。当用户查询4月4号之前的有效订单,则显示的订单为用户未更新订单数量或价格等数据内容的订单;若用户查询4月5之后的有效订单,则显示的订单为用户已更新订单数量或价格等数据内容的订单。

从而,本实施例的存储方法不仅大大节约了存储空间,且用户可查询到任意一天的历史数据,不会影响用户体验。

实施例2

如图2所示,本实施例的拉链表的存储系统包括数据获取模块1、判断模块2、存储模块3和时间标记模块4。数据获取模块1用于从用户端获取当天的全量数据,并从拉链表中获取前一天的全量数据。其中,拉链表中包括结束时间字段和起始时间字段。判断模块2用于判断当天的全量数据与前一天的全量数据是否存在相同数据;若判断为是,调用存储模块3和时间标记模块4。存储模块3用于将全量数据中的第二数据存储于拉链表的对应的分区中。时间标记模块4用于将第二数据的结束时间标记为大于当前时刻。其中,第二数据为当天的全量数据中除第一数据之外的数据。本实施例中的结束时间和起始时间的定义与实施例1中相同,此处不再赘述。

本实施例中,判断模块还用于判断第二数据中是否有新增数据,新增数据记录在当天的全量数据中,未记录在前一天的全量数据中;若判断为是,则调用时间标记模块。时间标记模块将新增数据的起始时间标记为当前时刻,结束时间标记为大于当前时刻。

本实施例中,判断模块还用于判断第二数据中是否有删除数据,删除数据记录在前一天的全量数据中,未记录在当天的全量数据中;若判断为是,则调用所述时间标记模块。时间标记模块将前一天的全量数据中的删除数据的结束时间标记为当前时刻。

本实施例中,判断模块还用于判断第二数据中是否有更新数据,更新数据在前一天的全量数据与当天的全量数据中的数据内容不相同;若判断为是,则调用时间标记模块。时间标记模块将前一天的全量数据中的更新数据的结束时间标记为当前时刻;将当天的全量数据中的更新数据的起始时间标记为当前时刻,结束时间标记为大于当前时刻。

从而,本实施例的存储系统不仅大大节约了存储空间,且用户可查询到任意一天的历史数据,不会影响用户体验。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值