一种基于分表的数据存储方法和系统与流程

文档序号:12824787阅读:231来源:国知局
一种基于分表的数据存储方法和系统与流程

本发明属于数据库管理和应用技术领域,具体涉及一种基于分表的数据存储方法和系统。



背景技术:

随着电脑设备的不断升级和网络的不断发展,大数据量成为局域网的一个显著特征。一般,通过数据库对大数据进行管理和应用。集群式数据加密设备是一种用于准确记录各种数据的系统,图1为现有技术中的一种集群式数据加密设备系统。如图1所示,所述系统由数据服务器11、数据发送设备12、数据加密设备集群13、局域网14组成。当然这里的局域网也可以进一步通过internet进行更大范围的数据联网。整个系统采用c/s模式网络架构,其中数据服务器11作为c/s模式中的服务器端,数据发送设备12和数据加密设备集群13则为c/s模式中的客户端。数据服务器11处理来自客户端的消息,同时存储、汇总数据,数据加密设备集群13用于记录数据并对数据加密,生成并返回给数据发送设备12唯一标识一条数据的加密信息。

该系统的一种应用场景为商业零售企业的数据采集。在这种场景下,数据发送设备12即为pos开票端,数据加密设备集群13内存储电子发票号码,数据加密信息为税控码、发票代码、发票号码等信息。所有的pos开票端通过局域网14并发的连接到数据服务器11,每完成一笔交易记录,打印小票或发票前,将数据(开票日期、开票时间、金额、商品明细、付款明细等)发送到数据服务器11,数据服务器11记录交易数据,并将合计金额等加密相关数据发送到数据加密设备集群13获取税控信息。对于大型商超这种开票量相对比较大的企业来说,数据服务器保存的数据比较多,由于数据服务器的存储容量是有限的,对任何服务器都不可能永无止境的增加数据,这对服务器的数据存储提出了一个挑战。

该系统的另一种应用场景为商超企业查询之前开过的小票,以进行各种统计或者退票操作。目前很多大型商超都已经能够做到门店省级甚至全国联网,这样可以只部署一台数据服务器即可,既方便了管理,也在一定程度上节省了用户成本。但带来的一个问题是,当系统运行一段时间后,开票量可以达到千万级甚至亿级,如果不采取任何优化措施,根据日期进行查询操作的等待时间将是非常可观的,用户难以接受,这就对查询速度提出了新的要求。



技术实现要素:

本发明实施例的目的是提供一种基于分表数据存储方法和数据查询方法,

根据本发明的一个方面,提供了一种基于分表的数据存储方法,所述方法包括如下步骤:

按数据生成日期将数据存储在基本数据表中;

对所述基本数据表中的数据进行轮询,当存在满足预设条件的数据时,启动数据分表线程;

将启动数据分表线程的数据转移至相应数据分表中,并删除基本数据表中的对应数据。

上述方案中,所述预设条件为数据信息完整,数据的生成日期符合分表要求;

所述数据分表按月份进行排列。

上述方案中,所述方法还包括:

在数据库中设置记录分表最小日期的第一字段和记录分表最大日期的第二字段;当数据分表线程进行一次分表后,采用日期列表中的最小日期和最小日期更新所述第一字段和第二字段;

期限存储线程获取数据库中当前列表的日期,根据数据库设置的数据年限最大有效值计算需要保存数据的最早日期;

删除所述最早日期和最小日期之间的数据分表。

上述方案中,所述按数据生成日期将数据存储在基本数据表中,进一步为:采用list数据结构创建基本数据表,在基本数据表的队尾执行数据添加操作;

所述对所述基本数据表中的数据进行轮询,进一步为:从基本数据表的队首开始执行轮询。

上述方案中,所述将启动数据分表线程的数据转移至相应数据分表中,进一步为:

将所述数据按日期分组排列,并提取所有日期存入list数据结构;

遍历日期列表,根据所述数据的当前日期获取所述当前日期所属月份的分表名称;

检查所述数据库是否存在与所述分表名称相对应的分表;

当不存在所述对应的分表时,根据所述分表名称创建所述分表;

当存在所述对应的分表时,将基本数据表中对应于所述月份的数据转移标志位更新为1,将所述月份的数据插入对应的分表中,同时删除基本数据表中转移标志位为1的数据。

根据本发明的另一个方面,还提供了一种基于分表的数据存储系统,其特征在于,所述系统包括:数据表创建单元、初步存储单元、轮询单元、分表单元、删除单元;其中,

所述数据表创建单元用于创建基本数据表;

所述初步存储单元与数据表创建单元相连,用于按数据生成日期将数据存储在基本数据表中;

所述轮询单元用于对所述基本数据表中的数据进行轮询,当存在满足预设条件的数据时,启动数据分表线程;

所述分表单元用于将启动数据分表线程的数据转移至相应数据分表中;

所述删除单元与所述分表单元和数据表创建单元相连,用于删除基本数据表中的已在分表单元完成分表的对应数据。

上述方案中,所述预设条件为数据信息完整,数据的生成日期符合分表要求;

所述分表单元进一步用于将所述数据分表按月份进行排列。

上述方案中,所述系统还包括:阈值日期设置/更新单元,数据年限计算单元;其中,

所述阈值日期设置/更新单元用于在数据库中设置记录分表最小日期的第一字段和记录分表最大日期的第二字段;还用于当数据分表线程进行一次分表后,采用日期列表中的最小日期和最小日期更新所述第一字段和第二字段;

所述数据年限计算单元用于获取数据库中当前列表的日期,根据数据库设置的数据年限最大有效值计算需要保存数据的最早日期;

所述删除单元还与所述阈值日期设置/更新单元和所述数据年限计算单元相连,用于删除所述最早日期和最小日期之间的数据分表。

上述方案中,所述初步存储单元进一步用于采用list数据结构创建基本数据表,在基本数据表的队尾执行数据添加操作;

所述轮询单元进一步用于从基本数据表的队首开始执行轮询。

上述方案中,所述分表单元包括:分组子单元、提取分表名称子单元、查询分表子单元、标志位更新子单元、执行分表子单元;其中,

所述分组子单元用于将所述数据按日期分组排列,并提取所有日期存入list数据结构;

所述提取分表名称子单元用于遍历日期列表,根据所述数据的当前日期获取所述当前日期所属月份的分表名称;

所述查询分表子单元用于检查所述数据库是否存在与所述分表名称相对应的分表;

所述数据表创建单元还用于当不存在所述对应的分表时,根据所述分表名称创建所述分表;

所述标志位更新子单元用于当存在所述对应的分表时,将基本数据表中对应于所述月份的数据转移标志位更新为1;

执行分表子单元用于将所述月份的数据插入对应的分表中;

删除单元还用于删除基本数据表中转移标志位为1的数据。

从以上技术方案可以看出,本发明实施例的基于分表的数据存储方法,首先按数据生成日期将数据存储在基本数据表中,而后对所述基本数据表中的数据进行轮询,当存在满足预设条件的数据时,启动数据分表线程,将符合条件的数据转移至相应数据分表中,并删除基本数据表中的对应数据;另外,还可以根据当前日期计算出必须保存的最早数据的日期,并获得该日期之前的所有数据表的名字,并逐一进行删除操作,从而在无需增加存储容量的情况下,满足用户的存储量需求。按照本发明的存储方法对数据进行存储后,一张数据表的存储量从千万级甚至亿级降到十万级,查询和统计速度得到了明显的提升,查询统计等待时间从几十秒降到秒级,能够有效满足用户的需求,提升用户体验。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中集群式数据加密设备系统结构示意图;

图2为本发明第一实施方式的基于分表的数据存储方法流程示意图;

图3为本发明第一实施例的基于分表的数据存储方法流程图;

图4为本发明第一实施例中按list数据结构对相应日期的数据执行添加及轮询操作的过程示意图;

图5为本发明第二实施方式的基于分表的数据存储系统的结构示意图。

具体实施方式

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。

为便于对本发明实施例的理解,下面详细描述本发明的实施方式,通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

图2为本发明第一实施方式的基于分表的数据存储方法流程示意图。

如图2所示,本实施方式的基于分表的数据存储方法,包括如下步骤:

步骤s1,按数据生成日期将数据存储在基本数据表中。

优选的,本步骤采用list数据结构创建基本数据表。list是stl中的一种线性表,其特点是可以快速的在任何位置增加或删除元素,采用list数据结构存储待转移数据所在日期,可以在队尾进行插入操,从而可以在基本数据表的队尾执行数据添加操作;而从队首进行遍历,以在转移数据的时候按日期进行分批转移。

将数据按月份分别进行存储,数据表的命名规则为数据表基本名+yyyy+mm,其中y代表年份,m代表月份,如invinfo201506。对于发票数据而言,一条数据记录包含的要素主要有:流水号(全局唯一,标识该条记录)、开票日期、开票时间、开票金额等。大多数查询统计工作都是基于流水号查询或者开票日期时间段进行统计。

步骤s2,对所述基本数据表中的数据进行轮询,当存在满足预设条件的数据时,启动数据分表过程。

这里一个独立的数据分表线程可以从轮询开始,轮询完成后,执行具体的分表过程。

优选的,轮询可以从基本数据表的队首开始,查询是否存在符合转移条件的数据。这里的转移条件,可以预先设定,通常情况下,所述预设条件为数据信息完整,数据的生成日期符合分表要求。对于发票数据而言,符合转移条件就是指符合规则,如发票数据要素完整、日期符合转移要求、且转移标志位为0。如果不存在,则继续轮询;如果存在,则筛选符合条件的数据并按日期或月份分组排列,并提取所有日期存入list数据结构。遍历日期列表,首先根据当前年月值可以获得分表名称,如基本表名+yyyy+mm。

步骤s3,将启动数据分表过程的数据转移至相应数据分表中,并删除基本数据表中的对应数据。

在本步骤之前,轮询完成之后,还可以包括,将所述数据按日期分组排列,并提取所有日期存入list数据结构;遍历日期列表,根据所述数据的当前日期获取所述当前日期所属月份的分表名称;检查所述数据库是否存在与所述分表名称相对应的分表;当不存在所述对应的分表时,根据所述分表名称创建所述分表。

当存在所述对应的分表时,将基本数据表中对应于所述月份的数据转移标志位更新为1,将所述月份的数据插入对应的分表中,同时删除基本数据表中转移标志位为1的数据。这里的转移标志位,用于标志数据是否被转移,转移标志位默认赋值为0,表示尚未转移,优选的,在数据插入基本数据表时进行自动赋值。

本方法还可以包括:

步骤s4,在数据库中设置记录分表最小日期的第一字段和记录分表最大日期的第二字段;当数据分表线程进行一次分表后,采用日期列表中的最小日期和最小日期更新所述第一字段和第二字段;期限存储线程获取数据库中当前列表的日期,根据数据库设置的数据年限最大有效值计算需要保存数据的最早日期;删除所述最早日期和最小日期之间的数据分表。

当系统运行较长时间后,数据存储量比较大,一方面对于查询的速度有较大影响,另一方面由于系统存储容量有限,不可能无限制的一直添加数据,对于没有特殊要求的系统来说,一般保存3年的存储数据即可,因此本方案设计的方法是根据当前日期计算出必须保存的最早数据的日期,并获得该日期之前的所有数据表的名字,并逐一进行删除操作。

本步骤中,可以设置独立的期限存储线程,用来进行期限存储操作。数据库中采用两个字段用来记录分表的最小年月和最大年月,如用mindate代表分表的最小年月,用maxdate代表分表的最大年月。当数据分表线程进行一次分表后,就用日期列表中的最大日期和最小日期去更新该两个字段值。

期限存储线程首先获取当前系统年月值,然后根据系统设置的最大数据有效值(如3年),可以计算出需要保存的最早的数据的年月值deldate,然后删除mindate和deldate之间的数据分表即可。

将本实施方式应用于数据的查询和统计过程,可以按如下方法进行:

对于查询操作,通常是根据某条数据的全局唯一标识符流水号进行查询操作,对此,按就近原则进行遍历查询,即首先查找基本表中是否存在该流水号对应的数据记录,然后按日期就近原则,根据需要查询的时间段,计算出所在年份和月份的范围,从而推断出其所在数据表的名字,然后在该表内遍历所有的数据进行查询。

对于统计某时间段内的数据操作,方法是首先根据时间段计算出年月的范围,根据需要统计的时间段,计算出所在年份和月份的范围,可以获得分表的范围,然后在基本表和该分表内按所需条件进行统计,这样可以避免遍历所有的分表,提高操作的响应速度。

这里需要说明的是,由于查询统计操作线程和期限存储线程是并发执行的两个不同线程,存在同时操作同一个数据表的可能,因此两个线程之间需要做好同步工作,防止一边已删除数据表,而另一边正在进行同一张表的查询操作。为此,创建一个互斥量cmutex,无论是查询统计线程还是期限存储线程,在操作数据表之前,需要首先获取到cmutex;操作完毕后,立即释放cmutex。获取和释放cmutex间的代码尽量做到最精简,也就是尽量减小cmutex的占用时间。

图3为本发明第一实施例的基于分表的数据存储方法流程图。

如图3所示,本实施例的基于分表的数据存储方法,包括如下步骤:

步骤s201,查询是否存在符合转移条件的数据。当存在符合条件的数据时,执行步骤s202;当不存在符合条件的数据时,则重复步骤s201,查询下一条数据。

本实施例首先对数据进行查询,这里并没有强调对基本数据表的调用,数据可以存储在基本数据表中,但这并不是必需的条件,也可以是一条单独的数据。只是,当基本数据表存在时,尤其是当基本数据表以list数据结构的方式进行构建时,数据生成日期将数据存储在基本数据表中,更有利于数据的批量转移。

步骤s202,获取数据所在日期范围列表。

步骤s203,遍历日期,查询是否存在对应的分表。这里的遍历,可以在日期list的数据中从队首开始遍历。当存在对应的分表时,执行步骤s205;当不存在对应的分表时,执行步骤s204。

图3所示为本实施例中按list数据结构对相应日期的数据执行添加及轮询操作的过程示意图。这里的轮询,从队首开始。而当遍历完后对所获取的新的日期数据的添加,可以从队尾开始,这样,可以保证从队首开始的遍历和从队尾开始的添加,可以同时进行,而不会相互影响或冲突。

将启动数据分表线程的数据转移至相应数据分表中,并删除基本数据表中的对应数据。

步骤s204,创建当月分表。

步骤s205,更新基础表中对应数据记录的标志位。

步骤s206,拷贝对应数据到对应月份的分表。

步骤s207,删除基础表中对应的数据。这里的基础表即基本数据表。而后执行下一次操作,回到步骤s201。

本实施例的基于分表的数据存储方法,首先按数据生成日期将数据存储在基本数据表中,而后对所述基本数据表中的数据进行轮询,当存在满足预设条件的数据时,启动数据分表线程,将符合条件的数据转移至相应数据分表中,并删除基本数据表中的对应数据;另外,还可以根据当前日期计算出必须保存的最早数据的日期,并获得该日期之前的所有数据表的名字,并逐一进行删除操作,从而在无需增加存储容量的情况下,满足用户的存储量需求。按照本发明的存储方法对数据进行存储后,一张数据表的存储量从千万级甚至亿级降到十万级,查询和统计速度得到了明显的提升,查询统计等待时间从几十秒降到秒级,能够有效满足用户的需求,提升用户体验。

第二实施方式

本实施方式为一种基于分表的数据存储系统。图5为本发明第二实施方式的基于分表的数据存储系统的结构示意图。

如图5所示,本实施方式的基于分表的数据存储系统,包括:数据表创建单元1、初步存储单元2、轮询单元3、分表单元4、删除单元5;其中,

所述数据表创建单元1用于创建基本数据表;

所述初步存储单元2与数据表创建单元1相连,用于按数据生成日期将数据存储在基本数据表中;

所述轮询单元3用于对所述基本数据表中的数据进行轮询,当存在满足预设条件的数据时,启动数据分表过程;

优选的,这里的所述预设条件为数据信息完整,数据的生成日期符合分表要求。

所述分表单元4用于将启动数据分表过程的数据转移至相应数据分表中;

所述删除单元5与所述分表单元和数据表创建单元相连,用于删除基本数据表中的已在分表单元完成分表的对应数据。

所述系统还包括:阈值日期设置/更新单元6,数据年限计算单元7;其中,

所述阈值日期设置/更新单元6用于在数据库中设置记录分表最小日期的第一字段和记录分表最大日期的第二字段;还用于当数据分表线程进行一次分表后,采用日期列表中的最小日期和最小日期更新所述第一字段和第二字段;

所述数据年限计算单元7用于获取数据库中当前列表的日期,根据数据库设置的数据年限最大有效值计算需要保存数据的最早日期;

所述删除单元5还与所述阈值日期设置/更新单元6和所述数据年限计算单元7相连,用于删除所述最早日期和最小日期之间的数据分表。

优选的,所述初步存储单元2进一步用于采用list数据结构创建基本数据表,在基本数据表的队尾执行数据添加操作;所述轮询单元3进一步用于从基本数据表的队首开始执行轮询。

优选的,所述分表单元包括:分组子单元、提取分表名称子单元、查询分表子单元、标志位更新子单元、执行分表子单元;其中,

所述分组子单元用于将所述数据按日期分组排列,并提取所有日期存入list数据结构;所述提取分表名称子单元用于遍历日期列表,根据所述数据的当前日期获取所述当前日期所属月份的分表名称;所述查询分表子单元用于检查所述数据库是否存在与所述分表名称相对应的分表;所述数据表创建单元1还用于当不存在所述对应的分表时,根据所述分表名称创建所述分表;所述标志位更新子单元用于当存在所述对应的分表时,将基本数据表中对应于所述月份的数据转移标志位更新为1;执行分表子单元用于将所述月份的数据插入对应的分表中;删除单元3还用于删除基本数据表中转移标志位为1的数据。

本实施方式的基于分表的数据存储系统,具有如下有益效果:

1.查询统计速度显著提高:由于将数据按月进行保存,一张数据表的存储量从千万级甚至亿级降到十万级,查询速度得到了明显的提升,经测试,分表前不理想的情况下,查询统计等待时间可以达到几十秒,严重超出用户可等待的极限;分表后不理想的情况下,查询统计等待时间可以达到秒级,能够有效满足用户的需求。

2.存储空间利用率提高:在不进行期限存储的情况下,一般的数据服务器存储容量不可能无限制的进行数据的添加,而硬盘容量又不可能无限制的扩充。因此进行期限存储后,可以在无需增加存储容量的情况下,满足用户的应用需求。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1