一种高速数据库设计方法与流程

文档序号:16781679发布日期:2019-02-01 19:11阅读:141来源:国知局
本发明涉及数据库
技术领域
:,特别涉及一种高速数据库设计方法。
背景技术
::在现有的数据库设计中,遇到实时数据需存储的情况如一直实时访问数据库无非增加数据库压力,拖慢数据库的效率。如遇到实时地位,实时监控等发送实时数据等情况,接收到的数据需要实时存入数据库,每新增一条数据都需访问一次数据库将该数据存入,这样无限循环下去数据库会不堪重负,也有可能导致数据的丢失。目前也有大量数据库的设计方法以完善数据库的性能,但这些方法无法从根本上同时兼顾到数据库的高效性与平台的展示性能。技术实现要素:本发明的目的旨在至少解决所述技术缺陷之一。为此,本发明的目的在于提出一种高速数据库设计方法。为了实现上述目的,本发明的实施例提供一种高速数据库设计方法,包括如下步骤:步骤s1,利用redis工具将接收到的实时采集数据存入缓存中;步骤s2,对缓存中的数据进行处理,包括判断缓存中的数据数量是否超过预设值,如果超过则将部分数据从缓存转至数据库中;步骤s3,当判断缓存中数据的数量超过预设值时,将缓存中的部分数据批量存储至所述数据库,包括:从redis缓存中取出部分数据,对取出的数据进行遍历,分割出每条数据的字符串中的各个数据,将每条数据中的所有数据放入对应的map对象中,对每个数据分配对应的key,遍历完成后,将所有解析出的map放入map集合中,再将map集合放入对象中供存储调用,然后利用预编译sql语句配合循环操作,将数据批量存入数据库中;步骤s4,对是否存储缓存的剩余数据进行判断,包括:向采集数据的终端分配状态码,利用所述状态码标记是否接收到该终端的采集数据,如果未接收到终端的采集数据,则将所述redis缓存中该终端对应的剩余数据存入至所述数据库中;步骤s5,对所述数据库中数据分区分表以管理数据库,包括:对存储的数据分段划分在多个分区位置存放,将数据所在的大表定时分成多个多张具有独立存储空间的实体子表。进一步,在所述步骤s3中,所述redis缓存中数据的存储格式为:以逗号分隔的字符串集合形式,遍历出所取数据的每条字符串,通过逗号来分割出字符串中的各个数据。进一步,在所述步骤s3中,所述利用预编译sql语句配合循环操作,将数据批量存入数据库中,包括:将所述预编译sql语句配合for循环遍历将数据批量存入数据库中,利用循环方式执行预编译sql语句,将解析的数据放入逐条放入预编译sql语句中并执行insert语句即可完成对解析数据的批量存储,清除redis缓存中已经存放数据库的数据,将取出的数据集中批量存入数据库中,加以定时,以此循环。进一步,在所述步骤s3中,当判断缓存中数据的数量超过预设值时,依据数据存入缓存的时间,将存入时间早的部分数据批量存入至所述数据库。进一步,在所述步骤s4中,所述状态码包括在线和离线,当接收到终端的采集数据时,向该终端分配的状态码为在线;当接收不到终端的采集数据时,向该终端分配的状态码为离线,并所述redis缓存中离线状态的终端对应的剩余数据存入至所述数据库中。进一步,在所述步骤s5中,所述对存储的数据分段划分在多个分区位置存放,包括:设置每天分区时间;当到达每天分区时间时,触发执行函数新建分区,将当天的数据将存入该分区内,将数据分段划分在多个位置存放,分区后表面上还是一张表,但数据散列到多个位置。进一步,当判断到达所述每天分区时间,查出表的最大分区并得到最大分区时期;修改表,并在最大分区后面增加一个分区,时间范围增加一天;拼接修改表的指令,然后执行指令;执行完成后,销毁指令。进一步,在所述步骤s5中,所述将数据所在的大表定时分成多个多张具有独立存储空间的实体子表,包括:设置每月分表时间;将每月的表格都单独区分开,到达每月设定时间时将旧表格重新命名并新建表格存储接下来的数据,将一个大表按照一定的规则分解成多张具有独立存储空间的实体子表。根据本发明实施例的高速数据库设计方法,首先利用redis缓存将采集的数据实时存入缓存内,再将缓存内的数据集中访问并批量存入数据库,缓存内的数据可供平台展示。本发明采用通过状态码进行判断处理缓存剩余数据技术、数据库的定时按天分区按月分表管理技术、定时生成表名技术和定时批量打包数据技术,能够处理大批量数据的存储,大大加快了数据存储的效率,能够将平台界面和后台数据处理有效结合,有效避免数据丢失的情况,并定时按天分区按月分表管理数据库。本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:图1为根据本发明实施例的高速数据库设计方法的流程图;图2为根据本发明实施例的缓存数据处理的流程图;图3为根据本发明实施例的数据库的批量存储的流程图;图4为根据本发明实施例的缓存剩余数据的判断流程图;图5为根据本发明实施例的数据库分区分表的流程图;图6为根据本发明实施例的定时事件按天执行流程图;图7为根据本发明实施例的定时事件按月执行流程图。具体实施方式下面详细描述本发明的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。如图1所示,本发明实施例的高速数据库设计方法,包括如下步骤:步骤s1,利用redis工具将接收到的实时采集数据存入缓存中。具体的,本步骤采用redis先行接收所采集的数据,然后暂时存放入缓存内。其中,缓存即为数据交换的缓冲区,其存取速度要比内存快很多,平台可直接从缓存内获取数据。本步骤利用缓存作为中间点存储实时最新的数据,采集到的数据首先下发存入缓存,平台页面也可直接从缓存获取数据从而无需访问数据库,存取便携,可以从一定程度上大大减轻了数据库的压力。步骤s2,对缓存中的数据进行处理,包括判断缓存中的数据数量是否超过预设值,如果超过则将部分数据从缓存转至数据库中。由于缓存内的数据不可能让其一直保存,这样也发挥不出缓存的效用。因此需要将缓存中的数据转存至数据库。参考图2,将终端采集的数据,缓存到redis缓存中。首先判断缓存内的数据量是否达到设定的数量,如若达到则需将其存入数据库。需要注意的是,不可将缓存内的数据全部存入数据库,否则平台页面会无法获取展示数据,那么可先将一部分旧数据批量存入数据库,保留一部分最新的数据在缓存内以供平台页面或者其他方面随时取用,这部分内容将在步骤s3中详细说明。优选的,可以先将缓存中一半的旧数据从缓存中转存至数据库。步骤s3,当判断缓存中数据的数量超过预设值时,将缓存中的部分数据批量存储至数据库。在本发明的一个实施例中,redis缓存中数据的存储格式为:以逗号分隔的字符串集合形式。例如:1)“aa,bb,cc”;2)“dd,ee,ff”,定时从redis取出一部分数据,通过遍历放入自动化解析工具中,遍历出所取数据的每条字符串,通过逗号来分割出字符串中的各个数据,例如:aabbcc。具体的,如图3所示,从redis缓存中取出部分数据,对取出的数据进行遍历,分割出每条数据的字符串中的各个数据,将每条数据中的所有数据放入对应的map对象中。对每个数据分配对应的key,遍历完成后,最后将所有的map放入list集合中,成map集合,将所有解析出的map放入map集合中,再将map集合放入对象中供存储调用,然后利用预编译sql语句配合循环操作,将数据批量存入数据库中。利用预编译sql语句配合循环操作,将数据批量存入数据库中,包括:将预编译sql语句配合for循环遍历将数据批量存入数据库中,利用循环方式执行预编译sql语句,将解析的数据放入逐条放入预编译sql语句中并执行insert语句即可完成对解析数据的批量存储,清除redis缓存中已经存放数据库的数据,将取出的数据集中批量存入数据库中,加以定时,以此循环。当判断缓存中数据的数量超过预设值时,依据数据存入缓存的时间,将存入时间早的部分数据批量存入至数据库。具体的,在存储时采用jdbc批处理方式,即为预编译sql语句配合for循环遍历将数据批量存入数据库中,利用循环方式执行预编译sql语句,将解析的数据放入逐条放入预编译sql语句中并执行insert语句即可完成对解析数据的批量存储。将取出的旧数据集中批量存入数据库中,加以定时,以此循环,每当缓存中数据达到指定数量,便将旧数据存入数据库中,在缓存中删除已存入数据库中的数据,这样集中处理大大减少了访问数据库次数,同时也可避免了数据缺失的情况。加以结合数据库的分区分表,有效地提高了数据库的效率。步骤s4,对是否存储缓存的剩余数据进行判断。具体的,如图4所示,向采集数据的终端分配状态码,利用状态码标记是否接收到该终端的采集数据,如果未接收到终端的采集数据,则将redis缓存中该终端对应的剩余数据存入至数据库中。在本发明的一个实施例中,状态码包括在线和离线,当接收到终端的采集数据时,向该终端分配的状态码为在线;当接收不到终端的采集数据时,为保证所有数据的完整性,向该终端分配的状态码为离线,并redis缓存中离线状态的终端对应的剩余数据存入至数据库中。此时不删除缓存内数据,等到再次接收到新数据首先删除剩余的新数据,这样可避免数据的重复存入,同样不影响平台页面数据的获取显示功能。整体方案可利用多线程处理,可实现高速的数据库管理操作。步骤s5,对数据库中数据分区分表以管理数据库。在本发明的实施例中,数据库:mysql数据库,版本:mysql5.0。日常实时数据表格存储了百万级乃至千万级条记录,导致数据库在查询和插入的时候耗时太长,性能低下。本发明采用分区分表的目的就是减少数据库的负担,提高数据库的效率。具体的,如图5所示,对存储的数据分段划分在多个分区位置存放,将数据所在的大表定时分成多个多张具有独立存储空间的实体子表。(1)分区分区是将数据分段划分在多个位置存放。分区后,表面上还是一张表,但数据散列到多个位置,分区的主要目的是为了在特定的sql操作中减少数据读写的总量以缩减响应时间。如果一张表的数据量达到了百万条记录,那么查询或者更新操作的性能会受到很大的影响,而且随着时间的推移,性能会越来越差。为了解决这个问题,本发明采用mysql5.0版本的数据库,提供了分区的功能,即将表的记录分为多个分区,这样每个分区的记录数相对于整个表的记录数就小多了,当无论是做查询还是插入更新操作的时候,只会在匹配的分区中进行,所以即使表中总的记录数很多但是也不会影响sql的性能。如图6所示,对存储的数据分段划分在多个分区位置存放,包括:利用mysql定时器定时执行按天分区,每天到达规定时间时触发执行函数新建分区,接下来一天的数据将存入该分区内。首先,设置每天分区时间;然后,当到达每天分区时间时,触发执行函数新建分区,将当天的数据将存入该分区内,将数据分段划分在多个位置存放,分区后表面上还是一张表,但数据散列到多个位置。具体的,当判断到达每天分区时间,查出表的最大分区并得到最大分区时期;修改表,并在最大分区后面增加一个分区,时间范围增加一天;拼接修改表的指令,然后执行指令;执行完成后,销毁指令。(1)按天分区的实现方法1.建表结构,并创建分区情况2.实现添加分区存储过程的方法①到系统表查出这个表的最大分区,得到最大分区的日期的实现方法selectreplace(partition_name,'p',”)into@p12_namefrominformation_schema.partitionswheretable_name='history_data'orderbypartition_ordinal_positiondesclimit1;②修改表,在最大分区的后面增加一个分区,时间范围加1天set@max_date=date(date_add(@p12_name+0,interval1day))+0;set@max_date1=date(date_add(@max_date+0,interval1day))+0;③拼接修改表的指令set@s1=concat('altertablehistory_dataaddpartition(partitionp',@max_date,'valueslessthan(to_days(”',date(@max_date1),”')))');3.定时事件,按每天执行的实现方法(2)分表分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,可称为子表,这些子表可以分布在同一块磁盘上,也可以在不同的机器上,读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它。利用定时器按月分表,将每月的表格都单独区分开,到达每月设定时间时将旧表格重新命名并新建表格存储接下来的数据。例如,假设有一个表名为test表,今天是11月29号,平时插入或者更新的数据都存在这个表中,到了下个月1号凌晨,就test表重新命名为test_11,并自动创建一个新表名为test,这样12月的数据又插入到这个新的test空表中,数据库如此设计可方便查询数据,同样方便数据库的管理。如图7所示,将数据所在的大表定时分成多个多张具有独立存储空间的实体子表,包括:首先,设置每月分表时间;然后,将每月的表格都单独区分开,到达每月设定时间时将旧表格重新命名并新建表格存储接下来的数据,将一个大表按照一定的规则分解成多张具有独立存储空间的实体子表。具体的,当判断达到每月分表时间,重新命名表;仅对表结构进行复制,但不复制数据;拼接修改表的指令,然后执行指令;执行完成后,销毁指令。按月分表的实现方法1.存储过程的实现方法①重新命名表setnewtablename=concat(tablename,'_',year(curdate()),'_',month(curdate())-1);set@s1=concat('renametable',tablename,'to',newtablename);②只复制表结构,不复制数据set@s2=concat('createtable',tablename,'like',newtablename);preparestmtfrom@s2;executestmt;deallocatepreparestmt;commit;2.定时事件,按每月执行的实现方法根据本发明实施例的高速数据库设计方法,首先利用redis缓存将采集的数据实时存入缓存内,再将缓存内的数据集中访问并批量存入数据库,缓存内的数据可供平台展示。本发明采用通过状态码进行判断处理缓存剩余数据技术、数据库的定时按天分区按月分表管理技术、定时生成表名技术和定时批量打包数据技术,能够处理大批量数据的存储,大大加快了数据存储的效率,能够将平台界面和后台数据处理有效结合,有效避免数据丢失的情况,并定时按天分区按月分表管理数据库。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。本发明的范围由所附权利要求及其等同限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1