分布式数据库的数据存储方法、装置和计算机设备与流程

文档序号:23895915发布日期:2021-02-09 12:17阅读:75来源:国知局
分布式数据库的数据存储方法、装置和计算机设备与流程

[0001]
本申请涉及大数据领域,特别是涉及到分布式数据库的数据存储方法、装置和计算机设备。


背景技术:

[0002]
基于oracle来搭建的业务系统,会随着业务增长趋势,数据量越来越大,数据量每天增长的趋势达到tb级别后,单库的oracle是无法满足现有的数据量级别的;oraclerac的架构虽然能够解决高并发的io问题,但是存在很多,比如依赖于高昂的共享存储设备;共享存储依然是一个单点设备,无法实现相关数据的集中调取;而且共享存储层没有实现扩展性;无法解决数据库的性能瓶颈。


技术实现要素:

[0003]
本申请的主要目的为解决现有存储方式无法实现共享存储以及数据集中调取的技术问题。
[0004]
本申请提出一种分布式数据库的数据存储方法,包括:
[0005]
在指定节点上创建全局序列表,其中,所述指定节点为存储层中所有存储节点中的任意一个存储节点,所述存储层包括多个存储节点;
[0006]
通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id;
[0007]
根据所述全局序列表对应的序列id,初始化所述全局序列表的记录信息,并反馈至中间件元数据库中,其中,所述中间件元数据库部署于所述分布式数据库的计算层中,所述计算层和所述存储层相互分离设计,所述计算层和所述存储层之间通过信息指令关联;
[0008]
判断所述中间件元数据库中存储的分布式数据库的数据分布信息,是否存在数据关联关系的分库表和/或分区表;
[0009]
若存在,则将存在数据关联关系的分库表和/或分区表,以相同字段关联存储于所述存储层的同一个指定节点上。
[0010]
优选地,所述通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id的步骤,包括:
[0011]
通过所述全局序列取值函数,获取第一时刻业务模块所取用的所述全局序列表中最大序列值,获取所述业务模块的业务增长步长;
[0012]
根据所述第一时刻业务模块所取用的所述全局序列表中最大序列值以及所述业务增长步长,计算所述第二时刻所述全局序列表中最大序列值,其中,所述第一时刻和所述第二时刻为两个相邻时刻,所述第二时刻的时序排布于所述第一时刻的时序之后;
[0013]
将所述第二时刻所述全局序列表中最大序列值,更新至所述全局序列表中;
[0014]
依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id。
[0015]
优选地,所述依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id的步骤之后,包括:
[0016]
判断所述全局序列表对应的所有序列id中,是否存在多字符的英文字符;
[0017]
若是,则调用预设算法将所述英文字符转换成数字。
[0018]
优选地,所述在指定节点上创建全局序列表的步骤之前,包括:
[0019]
获取当前的业务条线中包括的功能模块;
[0020]
按照所述功能模块对所述业务条线进行业务模块拆分;
[0021]
将进行业务模块拆分后的业务条线的数据,存储于各所述功能模块对应的微服务上;
[0022]
各所述微服务之间通过数据进行关联,形成分布式数据库存储系统。
[0023]
优选地,所述各所述微服务之间通过数据进行关联,形成分布式数据库存储系统的步骤之后,包括:
[0024]
判断当前存储节点的数据存储量是否达到所述当前存储节点的存储极限;
[0025]
若是,则在所述存储层的预留区域进行存储节点扩容;
[0026]
根据扩容后的存储节点,更新全局序列表的序列id;
[0027]
将更新后的全局序列表的序列id,更新存储于所述中间件元数据库中。
[0028]
优选地,所述存储层包括逻辑存储层和物理存储层,所述逻辑存储层的n个分片对应匹配所述物理存储层的np个实例,在所述存储层的预留区域进行存储节点扩容的步骤,包括:
[0029]
获取指定实例的binlog日志文件,其中,所述指定实例为所述np个实例中的任意一个实例;
[0030]
将所述指定实例的binlog日志文件迁移至指定存储节点上,其中,所述指定存储节点为扩容的所有存储节点中的任意一个;
[0031]
调用数据迁移工具将所述指定实例对应的数据,迁移至所述指定存储节点上。
[0032]
优选地,所述在指定节点上创建全局序列表的步骤之前,包括:
[0033]
获取当前业务对应的数据量,以及当前业务预计时间内完成的最大数据集;
[0034]
根据计算将所述当前业务对应的数据量拆分成的分片数量,其中,kblock为对所述最大数据集拆分成的分片数量,s为当前业务对应的数据量,max_n为在业务允许时间内完成的最大数据集,pmod()为取模;
[0035]
根据所述分片数量以及各存储节点对应的数据存储量进行分布式存储。
[0036]
本申请还提供了一种分布式数据库的数据存储装置,包括:
[0037]
创建模块,用于在指定节点上创建全局序列表,其中,所述指定节点为存储层中所有存储节点中的任意一个存储节点,所述存储层包括多个存储节点;
[0038]
生成模块,用于通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id;
[0039]
初始化模块,用于根据所述全局序列表对应的序列id,初始化所述全局序列表的记录信息,并反馈至中间件元数据库中,其中,所述中间件元数据库部署于所述分布式数据库的计算层中,所述计算层和所述存储层相互分离设计,所述计算层和所述存储层之间通
过信息指令关联;
[0040]
第一判断模块,用于判断所述中间件元数据库中存储的分布式数据库的数据分布信息,是否存在数据关联关系的分库表和/或分区表;
[0041]
第一存储模块,用于若存在数据关联关系的分库表和/或分区表,则将存在数据关联关系的分库表和/或分区表,以相同字段关联存储于所述存储层的同一个指定节点上。
[0042]
本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
[0043]
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法的步骤。
[0044]
本申请通过mycat分布式数据库,实现数据库中数据的细分类存储,并通过将存在数据关联的表关联存储于同一个节点,方便集中查询数据,同时通过开发序列id,使mycat分布式数据库实现数据的均衡分布。
附图说明
[0045]
图1本申请一实施例的分布式数据库的数据存储方法流程示意图;
[0046]
图2本申请一实施例的分布式数据库的数据存储装置结构示意图;
[0047]
图3本申请一实施例的计算机设备内部结构示意图。
具体实施方式
[0048]
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0049]
参照图1,本实施例的分布式数据库的数据存储方法,包括:
[0050]
s1:在指定节点上创建全局序列表,其中,所述指定节点为所述存储层中所有存储节点中的任意一个存储节点,所述存储层包括多个存储节点;
[0051]
s2:通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id;
[0052]
s3:根据所述全局序列表对应的序列id,初始化所述全局序列表的记录信息,并反馈至中间件元数据库中,其中,所述中间件元数据库部署于所述分布式数据库的计算层中,所述计算层和所述存储层相互分离设计,所述计算层和所述存储层之间通过信息指令关联;
[0053]
s4:判断所述中间件元数据库中存储的分布式数据库的数据分布信息,是否存在数据关联关系的分库表和/或分区表;
[0054]
s5:若存在,则将存在数据关联关系的分库表和/或分区表,以相同字段关联存储于所述存储层的同一个指定节点上。
[0055]
本申请实施例中,计算层与存储层分离设计,使用share nothing架构,当一个存储节点宕机,不影响提供数据服务;且由于计算层与存储层的分离设计,可实现计算层与存储层的无限扩展。通过开发了序列id生成程序,实现了业务数据的高效分库。序列id是业务系统的关键指标,序列id效率决定系统性能,序列id决定了业务数据的分库。本申请的序列
id是全局有序的,增加数据查询和插入效率,因为数据是有序的,在插入和查询数据时就不存在分页的场景。获取批次的数据长度,可根据业务场景来配置,本案例默认数据长度为500字节。
[0056]
本申请通过先在分库对应的节点上通过开发可执行的sql脚本创建全局序列表,在已经分派好的数据库中执行该sql脚本。全局序列表中字段记录信息包括:业务模块、当前序列id值、增长步长,然后通过监测业务模块的运行进程,通过全局序列取值函数以及全局序列设值函数进行逐步取值形成。上述全局序列取值函数为:mysql_seq_getval,从序列表中获取当前已经取用的最大的序列值,同时记录当前最大的序列值,共下更新最大的序列值使用。上述全局序列设值函数为:mysql_seq_setval,用于对当前业务模块设置对应的序列值,同时记录当前设置的序列值。上述初始化所述全局序列表的记录信息,上述记录信息包括所有已经取用的序列值形成的序列id,以及当前使用的序列id值。上述序列id比如为初始化保单号,insert into mysql_sequence(name,current_value,increment)values

polnos’,600000,100)。然后将上述开发好的程序部署到mysql服务器中,通过修改sequence_db_conf文件修改mycat配置文件,重启mycat服务器即可实现一次修改,全局使用。mycat序列生成策略文件,配置上述开发好的程序路径,当mycat执行策略文件时执行上述程序,生成对应的序列id。
[0057]
本申请通过把具有关联关系的分库表和/或分区表关联到同一个节点中,实现一次访问可获取所有相关的数据,提高效率。本申请通过mycat分布式数据库,实现数据库中数据的细分类存储,并通过将存在数据关联的表关联存储于同一个节点,方便集中查询数据,同时通过开发全局有序的序列id,使mycat分布式数据库实现数据的均衡分布。
[0058]
进一步地,所述通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id的步骤s2,包括:
[0059]
s21:通过所述全局序列取值函数,获取第一时刻业务模块所取用的所述全局序列表中最大序列值,获取所述业务模块的业务增长步长;
[0060]
s22:根据所述第一时刻业务模块所取用的所述全局序列表中最大序列值以及所述业务增长步长,计算所述第二时刻所述全局序列表中最大序列值,其中,所述第一时刻和所述第二时刻为两个相邻时刻,所述第二时刻的时序排布于所述第一时刻的时序之后;
[0061]
s23:将所述第二时刻所述全局序列表中最大序列值,更新至所述全局序列表中;
[0062]
s24:依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id。
[0063]
本申请的序列id,利用数据库一个表来进行计数累加,并不是每次生成序列id都读写数据库,以提高效率。mycat会预加载一部分号段到mycat的内存中,然后优先选择在mycat的内存中的分号段,提高数据处理能力,减少数据库的打开和关闭操作,减少耗时同时降低数据库的运行压力。大部分读写序列都是在mycat的内存中完成的,如果内存中的号段用完了,mycat会再向数据库重新申请一批。本申请的序列id生成过程中,通过第一时刻的业务模块所取用的所述全局序列表中最大序列值加上业务模块的业务增长步长,计算得到第二时刻的业务模块所取用的所述全局序列表中最大序列值。上述的业务模块跟具体的业务场景相关,举例地,人力资源业务领域中的业务模块包括:薪酬模块,人员信息模块,奖金自动化模块,看板模块等。
[0064]
进一步地,依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id的步骤s24之后,包括:
[0065]
s241:判断所述全局序列表对应的所有序列id中,是否存在多字符的英文字符;
[0066]
s242:若是,则调用预设算法将所述英文字符转换成数字。
[0067]
本申请实施例中,为了将分布式系统的业务id转换成数字或者单个字符形式,以便符合配置分片规则,通过执行预设算法:md5(id),rc32(id),substring(id,-3,0),实现字符转换。
[0068]
进一步地,所述在指定节点上创建全局序列表的步骤s1之前,包括:
[0069]
s11:获取当前的业务条线中包括的功能模块;
[0070]
s12:按照所述功能模块对所述业务条线进行业务模块拆分;
[0071]
s13:将进行业务模块拆分后的业务条线的数据,存储于各所述功能模块对应的微服务上;
[0072]
s14:各所述微服务之间通过数据进行关联,形成分布式数据库存储系统。
[0073]
本申请实施例中,不同的业务条线使用不同的微服务,举例地,按照人力资源业务条线的功能模块进行拆分,比如包括:薪酬、架构、培训、看板和数据中心等业务模块,业务模块与业务模块之间通过服务或者数据关联。
[0074]
进一步地,各所述微服务之间通过数据进行关联,形成分布式数据库存储系统的步骤s14之后,包括:
[0075]
s15:判断当前存储节点的数据存储量是否达到所述当前存储节点的存储极限;
[0076]
s16:若是,则在所述存储层的预留区域进行存储节点扩容;
[0077]
s17:根据扩容后的存储节点,更新全局序列表的序列id;
[0078]
s18:将更新后的全局序列表的序列id,更新存储于所述中间件元数据库中。
[0079]
本申请实施例中,为满足扩容需要在所述存储层中设置预留区域,并通过一个节点对应多个实例的方式进行存储,以方便存储节点的扩容和数据迁移,并将扩容后对应全局序列表的序列id,按照上述全局序列表的序列id的形成过程进行更新。中间件元数据库是分布式数据库架构的中枢系统,存储着所有分布式数据库的信息,可以根据业务场景开发中间件元数据库。
[0080]
进一步地,所述存储层包括逻辑存储层和物理存储层,所述逻辑存储层的n个分片对应匹配所述物理存储层的np个实例,在所述存储层的预留区域进行存储节点扩容的步骤s16,包括:
[0081]
s161:获取指定实例的binlog日志文件,其中,所述指定实例为所述np个实例中的任意一个实例;
[0082]
s162:将所述指定实例的binlog日志文件迁移至指定存储节点上,其中,所述指定存储节点为扩容的所有存储节点中的任意一个;
[0083]
s163:调用数据迁移工具将所述指定实例对应的数据,迁移至所述指定存储节点上。
[0084]
本申请实施例中,n个分片对应np个实例,加快了后期数据迁移效率,且易于维护。本申请实施例根据数据增长趋势,优选n个分片对应2p个实例,逻辑存储层上1个数据库实例,对应物理存储层上n个数据库实例,加快了数据迁移能力。假如扩容的存储节点的数量
为2n,即设计开始阶段预留2n个存储节点。上述存储节点可理解为服务器,同一个服务器上启动多个数据库实例,当数据量增加到一定程度时,比如超过单台mysql服务器的瓶颈时,则需要扩容。由于mysql所有的数据操作记录都会生成对应的binlog日志文件,在增加服务器的时候通过将其中一个数据库实例中的binlog日志文件拷贝到对应服务器的主机上,再通过数据迁移工具将数据再次分布到2n个节点中即可,通过mycat路由规则可正确的输出数据,易于操作且实现快速解决数据迁移问题,实现用户无感切换。
[0085]
进一步地,在指定节点上创建全局序列表的步骤s1之前,包括:
[0086]
s101:获取当前业务对应的数据量,以及当前业务预计时间内完成的最大数据集;
[0087]
s102:根据计算将所述当前业务对应的数据量拆分成的分片数量,其中,kblock为对所述最大数据集拆分成的分片数量,s为当前业务对应的数据量,max_n为在业务允许时间内完成的最大数据集,pmod()为取模;
[0088]
s103:根据所述分片数量以及各存储节点对应的数据存储量进行分布式存储。
[0089]
本申请实施例通过取模的方式以及全局序列id,实现数据的均匀分布,避免了数据不能均衡分布时,导致的查询效率极低,甚至导致服务器压力大,出现宕机现象的弊端。
[0090]
参照图2,本申请一实施例的分布式数据库的数据存储装置,包括:
[0091]
创建模块1,用于在指定节点上创建全局序列表,其中,所述指定节点为存储层中所有存储节点中的任意一个存储节点,所述存储层包括多个存储节点;
[0092]
生成模块2,用于通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id;
[0093]
初始化模块3,用于根据所述全局序列表对应的序列id,初始化所述全局序列表的记录信息,并反馈至中间件元数据库中,其中,所述中间件元数据库部署于所述分布式数据库的计算层中,所述计算层和所述存储层相互分离设计,所述计算层和所述存储层之间通过信息指令关联;
[0094]
第一判断模块4,用于判断所述中间件元数据库中存储的分布式数据库的数据分布信息,是否存在数据关联关系的分库表和/或分区表;
[0095]
第一存储模块5,用于若存在数据关联关系的分库表和/或分区表,则将存在数据关联关系的分库表和/或分区表,以相同字段关联存储于所述存储层的同一个指定节点上。
[0096]
本申请装置部分的实施例解释,参照对应方法项的相关解释,不赘述。
[0097]
进一步地,生成模块2,包括:
[0098]
第一获取单元,用于通过所述全局序列取值函数,获取第一时刻业务模块所取用的所述全局序列表中最大序列值,获取所述业务模块的业务增长步长;
[0099]
计算单元,用于根据所述第一时刻业务模块所取用的所述全局序列表中最大序列值以及所述业务增长步长,计算所述第二时刻所述全局序列表中最大序列值,其中,所述第一时刻和所述第二时刻为两个相邻时刻,所述第二时刻的时序排布于所述第一时刻的时序之后;
[0100]
更新单元,用于将所述第二时刻所述全局序列表中最大序列值,更新至所述全局序列表中;
[0101]
生成单元,用于依据所述全局序列表中最大序列值的更新过程,生成所述全局序
列表对应的所有序列id。
[0102]
进一步地,生成模块2,包括:
[0103]
判断单元,用于判断所述全局序列表对应的所有序列id中,是否存在多字符的英文字符;
[0104]
调用单元,用于若存在多字符的英文字符,则调用预设算法将所述英文字符转换成数字。
[0105]
进一步地,分布式数据库的数据存储装置,包括:
[0106]
第一获取模块,用于获取当前的业务条线中包括的功能模块;
[0107]
拆分模块,用于按照所述功能模块对所述业务条线进行业务模块拆分;
[0108]
第二存储模块,用于将进行业务模块拆分后的业务条线的数据,存储于各所述功能模块对应的微服务上;
[0109]
关联模块,用于各所述微服务之间通过数据进行关联,形成分布式数据库存储系统。
[0110]
进一步地,分布式数据库的数据存储装置,包括:
[0111]
第二判断模块,用于判断当前存储节点的数据存储量是否达到所述当前存储节点的存储极限;
[0112]
扩容模块,用于若达到所述当前存储节点的存储极限,则在所述存储层的预留区域进行存储节点扩容;
[0113]
第一更新模块,用于根据扩容后的存储节点,更新全局序列表的序列id;
[0114]
第二更新模块,用于将更新后的全局序列表的序列id,更新存储于所述中间件元数据库中。
[0115]
进一步地,所述存储层包括逻辑存储层和物理存储层,所述逻辑存储层的n个分片对应匹配所述物理存储层的np个实例,扩容模块,包括:
[0116]
第二获取单元,用于获取指定实例的binlog日志文件,其中,所述指定实例为所述np个实例中的任意一个实例;
[0117]
第一迁移单元,用于将所述指定实例的binlog日志文件迁移至指定存储节点上,其中,所述指定存储节点为扩容的所有存储节点中的任意一个;
[0118]
第二迁移单元,用于调用数据迁移工具将所述指定实例对应的数据,迁移至所述指定存储节点上。
[0119]
进一步地,分布式数据库的数据存储装置,包括:
[0120]
第二获取模块,用于获取当前业务对应的数据量,以及当前业务预计时间内完成的最大数据集;
[0121]
计算模块,用于根据计算将所述当前业务对应的数据量拆分成的分片数量,其中,kblock为对所述最大数据集拆分成的分片数量,s为当前业务对应的数据量,max_n为在业务允许时间内完成的最大数据集,pmod()为取模;
[0122]
第三存储模块,用于根据所述分片数量以及各存储节点对应的数据存储量进行分布式存储。
[0123]
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,
其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储分布式数据库的数据存储过程需要的所有数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现分布式数据库的数据存储方法。
[0124]
上述处理器执行上述分布式数据库的数据存储方法,包括:在指定节点上创建全局序列表,其中,所述指定节点为存储层中所有存储节点中的任意一个存储节点,所述存储层包括多个存储节点;通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id;根据所述全局序列表对应的序列id,初始化所述全局序列表的记录信息,并反馈至中间件元数据库中,其中,所述中间件元数据库部署于所述分布式数据库的计算层中,所述计算层和所述存储层相互分离设计,所述计算层和所述存储层之间通过信息指令关联;判断所述中间件元数据库中存储的分布式数据库的数据分布信息,是否存在数据关联关系的分库表和/或分区表;若存在,则将存在数据关联关系的分库表和/或分区表,以相同字段关联存储于所述存储层的同一个指定节点上。
[0125]
上述计算机设备,通过mycat分布式数据库,实现数据库中数据的细分类存储,并通过将存在数据关联的表关联存储于同一个节点,方便集中查询数据,同时通过开发序列id,使mycat分布式数据库实现数据的均衡分布。
[0126]
在一个实施例中,上述处理器通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id的步骤,包括:通过所述全局序列取值函数,获取第一时刻业务模块所取用的所述全局序列表中最大序列值,获取所述业务模块的业务增长步长;根据所述第一时刻业务模块所取用的所述全局序列表中最大序列值以及所述业务增长步长,计算所述第二时刻所述全局序列表中最大序列值,其中,所述第一时刻和所述第二时刻为两个相邻时刻,所述第二时刻的时序排布于所述第一时刻的时序之后;将所述第二时刻所述全局序列表中最大序列值,更新至所述全局序列表中;依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id。
[0127]
在一个实施例中,上述处理器依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id的步骤之后,包括:判断所述全局序列表对应的所有序列id中,是否存在多字符的英文字符;若是,则调用预设算法将所述英文字符转换成数字。
[0128]
在一个实施例中,上述处理器在指定节点上创建全局序列表的步骤之前,包括:获取当前的业务条线中包括的功能模块;按照所述功能模块对所述业务条线进行业务模块拆分;将进行业务模块拆分后的业务条线的数据,存储于各所述功能模块对应的微服务上;各所述微服务之间通过数据进行关联,形成分布式数据库存储系统。
[0129]
在一个实施例中,上述处理器各所述微服务之间通过数据进行关联,形成分布式数据库存储系统的步骤之后,包括:判断当前存储节点的数据存储量是否达到所述当前存储节点的存储极限;若是,则在所述存储层的预留区域进行存储节点扩容;根据扩容后的存储节点,更新全局序列表的序列id;将更新后的全局序列表的序列id,更新存储于所述中间
件元数据库中。
[0130]
在一个实施例中,存储层包括逻辑存储层和物理存储层,所述逻辑存储层的n个分片对应匹配所述物理存储层的np个实例,上述处理器在所述存储层的预留区域进行存储节点扩容的步骤,包括:获取指定实例的binlog日志文件,其中,所述指定实例为所述np个实例中的任意一个实例;将所述指定实例的binlog日志文件迁移至指定存储节点上,其中,所述指定存储节点为扩容的所有存储节点中的任意一个;调用数据迁移工具将所述指定实例对应的数据,迁移至所述指定存储节点上。
[0131]
在一个实施例中,上述处理器在指定节点上创建全局序列表的步骤之前,包括:获取当前业务对应的数据量,以及当前业务预计时间内完成的最大数据集;根据计算将所述当前业务对应的数据量拆分成的分片数量,其中,kblock为对所述最大数据集拆分成的分片数量,s为当前业务对应的数据量,max_n为在业务允许时间内完成的最大数据集,pmod()为取模;根据所述分片数量以及各存储节点对应的数据存储量进行分布式存储。
[0132]
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
[0133]
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现分布式数据库的数据存储方法,包括:在指定节点上创建全局序列表,其中,所述指定节点为存储层中所有存储节点中的任意一个存储节点,所述存储层包括多个存储节点;通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id;根据所述全局序列表对应的序列id,初始化所述全局序列表的记录信息,并反馈至中间件元数据库中,其中,所述中间件元数据库部署于所述分布式数据库的计算层中,所述计算层和所述存储层相互分离设计,所述计算层和所述存储层之间通过信息指令关联;判断所述中间件元数据库中存储的分布式数据库的数据分布信息,是否存在数据关联关系的分库表和/或分区表;若存在,则将存在数据关联关系的分库表和/或分区表,以相同字段关联存储于所述存储层的同一个指定节点上。
[0134]
上述计算机可读存储介质,通过mycat分布式数据库,实现数据库中数据的细分类存储,并通过将存在数据关联的表关联存储于同一个节点,方便集中查询数据,同时通过开发序列id,使mycat分布式数据库实现数据的均衡分布。
[0135]
在一个实施例中,上述处理器通过全局序列取值函数以及全局序列设值函数,生成所述全局序列表对应的序列id的步骤,包括:通过所述全局序列取值函数,获取第一时刻业务模块所取用的所述全局序列表中最大序列值,获取所述业务模块的业务增长步长;根据所述第一时刻业务模块所取用的所述全局序列表中最大序列值以及所述业务增长步长,计算所述第二时刻所述全局序列表中最大序列值,其中,所述第一时刻和所述第二时刻为两个相邻时刻,所述第二时刻的时序排布于所述第一时刻的时序之后;将所述第二时刻所述全局序列表中最大序列值,更新至所述全局序列表中;依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id。
[0136]
在一个实施例中,上述处理器依据所述全局序列表中最大序列值的更新过程,生成所述全局序列表对应的所有序列id的步骤之后,包括:判断所述全局序列表对应的所有
序列id中,是否存在多字符的英文字符;若是,则调用预设算法将所述英文字符转换成数字。
[0137]
在一个实施例中,上述处理器在指定节点上创建全局序列表的步骤之前,包括:获取当前的业务条线中包括的功能模块;按照所述功能模块对所述业务条线进行业务模块拆分;将进行业务模块拆分后的业务条线的数据,存储于各所述功能模块对应的微服务上;各所述微服务之间通过数据进行关联,形成分布式数据库存储系统。
[0138]
在一个实施例中,上述处理器各所述微服务之间通过数据进行关联,形成分布式数据库存储系统的步骤之后,包括:判断当前存储节点的数据存储量是否达到所述当前存储节点的存储极限;若是,则在所述存储层的预留区域进行存储节点扩容;根据扩容后的存储节点,更新全局序列表的序列id;将更新后的全局序列表的序列id,更新存储于所述中间件元数据库中。
[0139]
在一个实施例中,存储层包括逻辑存储层和物理存储层,所述逻辑存储层的n个分片对应匹配所述物理存储层的np个实例,上述处理器在所述存储层的预留区域进行存储节点扩容的步骤,包括:获取指定实例的binlog日志文件,其中,所述指定实例为所述np个实例中的任意一个实例;将所述指定实例的binlog日志文件迁移至指定存储节点上,其中,所述指定存储节点为扩容的所有存储节点中的任意一个;调用数据迁移工具将所述指定实例对应的数据,迁移至所述指定存储节点上。
[0140]
在一个实施例中,上述处理器在指定节点上创建全局序列表的步骤之前,包括:获取当前业务对应的数据量,以及当前业务预计时间内完成的最大数据集;根据计算将所述当前业务对应的数据量拆分成的分片数量,其中,kblock为对所述最大数据集拆分成的分片数量,s为当前业务对应的数据量,max_n为在业务允许时间内完成的最大数据集,pmod()为取模;根据所述分片数量以及各存储节点对应的数据存储量进行分布式存储。
[0141]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双速据率sdram(ssrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0142]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
[0143]
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1