一种数据处理方法、设备及存储介质与流程

未命名 08-13 阅读:99 评论:0


1.本技术实施例涉及金融科技(fintech)的数据处理技术领域,涉及但不限于一种数据处理方法、设备及存储介质。


背景技术:

2.随着计算机计算的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出了更高的要求。
3.金融科技领域下,大数据存储和高并发请求已成为基本需求,为了支持大数据存储和高并发,目前普遍采用的技术方案就是分库分表方案,业界比较成熟的是采用关系型数据库分库分表中间件mycat、shardingjdbc、tddl等来实现。这些分库分表中间件,都是提前创建好固定数量的分区数量(物理分区表),然后基于特定业务键值,按照某种路由规则做数据拆分存储;但是,一旦数据存储出现瓶颈新增了物理分区表后,很多数据对应的物理分区表的表号就会发生变化,那数据的路由规则也会同步改变。为了解决新增物理分区表后数据的路由规则发生改变的问题,相关技术中提出了创建足够多的物理分区表和首次创建物理分区表的时候分区表的数量为2的幂次方这两种解决方案;但是,相关技术方案中仍然存在需要停止相关服务进行数据迁移,以及浪费资源的问题。


技术实现要素:

4.本技术实施例提供一种数据处理方法、设备及存储介质,以解决相关的数据存储方案中,在对物理分区表进行扩容后存在需要停止相关服务进行数据迁移,以及浪费资源的问题。
5.本技术实施例的技术方案是这样实现的:
6.本技术实施例提供一种数据处理方法,包括:
7.确定待存储数据的目标业务键值,并基于所述目标业务键值确定所述待存储数据与数据索引节点的第一路由策略;
8.确定所述数据索引节点与物理分区表的第二路由策略;
9.基于所述目标业务键值、所述第一路由策略和所述第二路由策略,存储所述待存储数据至初始物理分区表中;
10.在增加了新物理分区表的情况下,基于每个所述数据索引节点的繁忙度和每个所述初始物理分区表的繁忙度,将所述初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至所述新物理分区表中,并更新所述第二路由策略;其中,所述数据索引节点的繁忙度表征所述数据索引节点对应的数据存储情况,所述初始物理分区表的繁忙度表征所述初始物理分区表中的数据存储情况。
11.一种数据处理装置,所述装置包括:
12.路由信息确定模块,用于确定待存储数据的目标业务键值,并基于所述目标业务
键值确定所述待存储数据与数据索引节点的第一路由策略;
13.所述路由信息确定模块,还用于确定所述数据索引节点与物理分区表的第二路由策略;
14.数据存储模块,用于基于所述目标业务键值、所述第一路由策略和所述第二路由策略,存储所述待存储数据至初始物理分区表中;
15.数据迁移模块,用于在增加了新物理分区表的情况下,基于每个所述数据索引节点的繁忙度和每个所述初始物理分区表的繁忙度,将所述初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至所述新物理分区表中,并更新所述第二路由策略;其中,所述数据索引节点的繁忙度表征所述数据索引节点对应的数据存储情况,所述初始物理分区表的繁忙度表征所述初始物理分区表中的数据存储情况。
16.一种数据处理设备,包括:
17.存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现上述的方法。
18.一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现上述的方法。
19.本技术实施例具有以下有益效果:
20.通过确定待存储数据的目标业务键值,并基于目标业务键值确定待存储数据与数据索引节点的第一路由策略,同时,确定数据索引节点与物理分区表的第二路由策略,这样可以建立两种不同的路由策略,之后基于目标业务键值、第一路由策略和第二路由策略存储待存储数据至初始物理分区表中,这样,无论物理分区表如何变化,待存储数据的目标业务键值与数据索引节点的第一路由策略始终是固定不变的,改变的只是数据索引节点与物理分区表的第二路由策略;那么,在增加了新物理分区表的情况下,基于每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度,将初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中,并更新第二路由策略;也就是说,新增新物理分区表后,只需要改变数据索引节点与物理分区表之间的第二路由策略,那在将初始物理分区表中的数据迁移至新物理分区表的过程中,因为该相关服务所使用的数据对应的数据索引节点始终不会发生变化,因此不需要停止相关的服务,从而解决了相关技术中在对物理分区表进行扩容后存在需要停止相关服务进行数据迁移的问题,保障了业务的正常运行;同时,因为本技术中进行数据迁移时是根据每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度进行的,可以很容易实现数据迁移,那么在最开始创建物理分区表时可以根据实际需求创建合适的数量,而不需要创建过多的物理分区表,进而避免了对资源的浪费。
附图说明
21.图1是本技术实施例提供的终端的一个可选的架构示意图;
22.图2是本技术实施例提供的一种数据处理方法的流程示意图;
23.图3是本技术实施例提供的一种数据处理方法中业务键值、di节点和物理分区表之间的对应关系示意图;
24.图4是本技术实施例提供的另一种数据处理方法的流程示意图;
25.图5是本技术实施例提供的另一种数据处理方法中业务键值、di节点和物理分区表之间的对应关系示意图;
26.图6是本技术实施例提供的又一种数据处理方法中业务键值、di节点和物理分区表之间的对应关系示意图;
27.图7是本技术实施例提供的一种数据处理方法中访问请求中的一关键信息与对应的存储位的示意图;
28.图8是本技术实施例提供的一种数据处理方法中访问请求中的另一关键信息与对应的存储位的示意图;
29.图9是本技术实施例提供的一种数据处理方法中读取待存储数据时所涉及的磁头、磁道和扇区的示意图。
具体实施方式
30.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
31.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。除非另有定义,本技术实施例所使用的所有的技术和科学术语与属于本技术实施例的技术领域的技术人员通常理解的含义相同。本技术实施例所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
32.下面说明本技术实施例提供的数据处理设备的示例性应用,本技术实施例提供的数据处理设备可以实施为笔记本电脑,平板电脑,台式计算机,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备),智能机器人等任意具有屏幕显示功能的终端,也可以实施为服务器。下面,将说明数据处理设备实施为终端时的示例性应用。
33.参见图1,图1是本技术实施例提供的终端100的结构示意图,图1所示的终端100包括:至少一个处理器110、至少一个网络接口120、用户接口130和存储器150。终端100中的各个组件通过总线系统140耦合在一起。可理解,总线系统140用于实现这些组件之间的连接通信。总线系统140除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图1中将各种总线都标为总线系统140。
34.处理器110可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
35.用户接口130包括使得能够呈现媒体内容的一个或多个输出装置131,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口130还包括一个或多个输入装置132,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
36.存储器150可以是可移除的,不可移除的或其组合。示例性地硬件设备包括固态存
储器,硬盘驱动器,光盘驱动器等。存储器150可选地包括在物理位置上远离处理器110的一个或多个存储设备。存储器150包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(read only memory,rom),易失性存储器可以是随机存取存储器(random access memory,ram)。本技术实施例描述的存储器150旨在包括任意适合类型的存储器。在一些实施例中,存储器150能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
37.操作系统151,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
38.网络通信模块152,用于经由一个或多个(有线或无线)网络接口120到达其他计算设备,示例性地网络接口120包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(universal serial bus,usb)等;
39.输入处理模块153,用于对一个或多个来自一个或多个输入装置132之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
40.在一些实施例中,本技术实施例提供的装置可以采用软件方式实现,图1示出了存储在存储器150中的一种数据处理装置154,该数据处理装置154可以是终端100中的数据处理装置,其可以是程序和插件等形式的软件,包括以下软件模块:路由信息确定模块1541、数据存储模块1542和数据迁移模块1543,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
41.在另一些实施例中,本技术实施例提供的装置可以采用硬件方式实现,作为示例,本技术实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本技术实施例提供的数据处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(application specific integrated circuit,asic)、dsp、可编程逻辑器件(programmable logic device,pld)、复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程门阵列(field-programmable gate array,fpga)或其他电子元件。
42.这里,对当前的新增物理分区表后进行数据迁移的方案作出进一步的说明,针对全国物流订单,一般是提前创建好256个分区,然后把订单号作为路由拆分键值,先计算出订单号对应的哈希(hash)值,然后对分区数进行取模,由hash%256得出分区号,举几个例子(以下的订单号为计算后的hash值,非原始订单号):订单号256%256=0;订单号512%256=0;订单号1025%256=1;订单号257%256=1;订单号515%256=3;订单号3%256=3;根据上面的例子可知,当订单数据量比较大时,hash%256之后的结果会比较均匀,也就是订单数据会均匀的拆分存储到256个分区中。不过这种hash取模方式,要求提前创建好足够数量的分区,不然当数据存储存在瓶颈时,则需要新建更多分区,但是分区数发生变化,则hash%新分区数结算出来的分区号也会发生变化。举个例子,原来分区数为256,新建10个分区,那么新分区数为266,那么上面那组订单号数重新计算分区号后如下所示:订单号256%256=0(分区号变化前),256%266=256(分区号发生变化);订单号512%256=0(分区号变化前),512%266=246(分区号发生变化);订单号1025%256=1(分区号变化前),1025%256=227(分区号发生变化);订单号257%256=1(分区号变化前),257%256=257(分区号发生变化);订单号515%256=3(分区号变化前),515%256=249(分区号发生变
化);订单号3%256=3(分区号变化前),3%256=3(分区号发生变化)。由上面的例子可知,很多数据的分区号都发生了变化,那么数据的路由规则也会同步改变(这里的分区是实际存储数据的物理分区,也就是对应到磁盘上的存储文件)。假设在新增分区前,订单号256已经在物理分区表0执行新增操作,那么后续的查询操作和删除操作都会路由到表0,查询操作命中数据后则返回数据,删除操作命中数据后则移除数据。当新增分区后,订单号256的新路由规则映射到表256,此时如果执行查询操作,那么会报找不到数据(因为数据还存储在原来的表0);此时如果执行删除操作,也会因为找不到数据而移除失败;此时如果执行新增操作,那么会在表256保存一份新的数据,最终导致表0和表256都保存了一份数据,也就是存在脏数据。目前业界为了保证新增分区前后,数据访问的一致性,只能暂时牺牲服务的可用性,通过停服来做数据迁移,数据迁移完毕后才对外提供服务。
43.为了解决停服时间过长的问题,业界探索出来两种改进思路:1、提前创建足够多的分区,尽量避免后面扩容新增分区,这样就无须做数据迁移了。但是创建多少个分区才算足够多;如果创建过多分区,会浪费很多物理分区资源;如果创建太少,还是避免不了进行数据迁移,那仍然存在需要停服进行数据迁移的问题。2、首次创建分区的时候,分区数为2的幂次方,然后每次分区扩容,则增加一倍新的分区,也就是扩容后分区数为原来的两倍,扩容后分区数还是2的幂次方。这样就可以尽量减少扩容后数据计算出来的分区号发生变化的问题,从而大大减少需要迁移的数据量,进而减少迁移数据的停服时间。而且每次扩容都是按倍扩容分区数,针对数据增长良好的业务,可以避免短期内频繁扩容,当然针对数据增长一般的业务,每次按倍扩容分区数还是存在浪费物理分区资源的问题。
44.为此,本技术提供一种数据处理方法,可以实现将原物理分区表中的数据迁移到新物理分区表的过程中无需停止相关服务。
45.下面将结合本技术实施例提供的终端100的示例性应用和实施,说明本技术实施例提供的数据处理方法。参见图2,图2是本技术实施例提供的数据处理方法的一个可选的流程示意图,将结合图2示出的步骤进行说明,
46.步骤201、确定待存储数据的目标业务键值,并基于目标业务键值确定待存储数据与数据索引节点的第一路由策略。
47.在本技术实施例中,待存储数据可以指的是需要存储的数据量比较大的业务数据;在一种可行的实现方式中,待存储数据可以指的是形成的大量订单中的数据、需要存储至某些特定数据库中的数据等。也就是说,本技术实施例所使用的场景范围比较广泛,在此不作具体的限定。
48.需要说明的是,待存储数据的目标业务键值也可以称为待存储数据的分区键,也可以称为待存储数据的业务路由键值。其中,在本技术实施例中目标业务键都是指待存储数据(即业务数据)中的特定字段,可以用来做某种路由规则拆分的;在一种可行的实现方式中,目标业务键值可以指的是订单号、订单所属城市、订单交易日期等字段。
49.此外,目前业界的设计方案中,业务键值(即业务数据的分区键)和物理分区表是强绑定关系,业务键值可能是通过固定映射规则做路由映射(比如根据订单所在城市或交易日期),也可能是通过hash取模的方式动态计算路由规则。不过无论哪一种路由方式,业务键值指向的物理分区表都是绑定不变的,只有当物理分区表的分区数量发生变化的时候,其映射关系才可能发生变化。而物理分区表是一种实际物理磁盘存储文件,是相对比较
重的存储资源,目前关系型数据库只支持在线单表迁移数据,无法支持在线多表间迁移数据;那么只要业务键值还和物理分区表有强绑定关系,那么就无法做到在线不停服无感知的迁移不同物理分区表的数据。因此,本技术实施例中可以解绑业务键值和物理分区表的强绑定关系,建立业务键值与数据索引节点之间的第一路由策略(即绑定关系);其中,本技术实施例中数据索引节点可以指的是di(data inde)节点,且di节点的数量可以是固定不变的。这样,如图3所示,业务键值只跟di节点做路由映射,不再直接映射物理分区表,这样当存储的待存储数据的数据量增加而扩容物理分区表时,因为di节点的数量是固定不变的,那么业务键值计算出来的di节点号也就不会发生变化了,这就解耦了业务键值和物理分区表之间的强绑定关系了。
50.在本技术其他实施例中,如图3中所示,di节点可以是位于di节点层中,且di节点的节点数量可以是根据实际的应用场景,结合数学公式泊松分布和hash散列均匀分布相关原理来设定的;在一种可行的实现方式中,如图3所示di节点的节点数量可以预设为65536,这是因为节点数过少的话业务键值hash取模计算结果会存在数据倾斜问题,节点数过多的话也不方便管理,因此根据数学公式泊松分布和hash散列均匀分布相关原理,65536作为取模基数可以满足让业务键值数据尽可能均匀的分布,从而达到资源和需求的有效平衡。其中,泊松分布概率质量函数可以为:其中,λ指的是单位时间(或单位面积)内随机事件的平均发生率。
51.其中,di节点不是物理分区表,不需要占用两个或更多的物理磁盘存储文件,在linux操作系统下也不需要占用过多的文件句柄资源。di节点可以包括以下字段:di节点号(前置范围0~65535),di节点数据量(映射到这个di节点的业务键值数据总数)、di节点版本号(初始化为v1,每次迁移数据则会升级版本号)、源物理分区表和目标物理分区表、di节点迁移标识等,这些基础字段只需要很小的一点存储空间,65536个di节点会构成一个di节点数组,将这些di节点数组元信息一起存储到一个物理磁盘文件中;并且,为了加快访问速度,可以同时在主内存中维护一份di节点数组元信息;需要说明的是,di节点的元数据结构可以如下表1所示。
[0052][0053]
[0054]
表1
[0055]
步骤202、确定数据索引节点与物理分区表的第二路由策略。
[0056]
本技术实施例中,第二路由策略可以指的是di节点与物理分区表之间的映射关系;其中,每个物理分区表中可以映射有一个或者多个di节点;需要说明的是,第二路由策略可以是根据物理分区表的数量而发生变化的;也就是说,当系统遇到瓶颈需要对物理分区表进行扩容,即需要增加新物理分区表的时候,增加了新物理分区表后,可以重新确定数据索引节点与扩容后的物理分区表的绑定关系,即更新第二路由策略。
[0057]
其中,数据索引节点与物理分区表的第二路由策略可以是根据数据索引节点对应的待存储数据的数据量来确定的;需要注意的是,在根据数据索引节点对应的待存储数据的数据量确定不同数据索引节点对应的物理分区表的时候,可以是基于均匀分配的原则来确定的。
[0058]
步骤203、基于目标业务键值、第一路由策略和第二路由策略,存储待存储数据至初始物理分区表。
[0059]
在本技术实施例中,数据处理设备可以根据待存储数据的目标业务键值,从第一路由策略中确定与每一待存储数据的目标业务键值对应的数据索引节点;进而,可以根据确定出来的数据索引节点,从第二路由策略中确定该数据索引节点对应的初始物理分区表;进而,可以将待存储数据存储在对应的初始物理分区表中。需要说明的是,待存储数据可以是存储在数据库中的物理分区表中的。
[0060]
步骤204、在增加了新物理分区表的情况下,基于每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度,将初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中,并更新第二路由策略。
[0061]
其中,数据索引节点的繁忙度表征数据索引节点对应的数据存储情况,初始物理分区表的繁忙度表征初始物理分区表中的数据存储情况。
[0062]
在本技术实施例中,可以是在数据处理设备的系统的存储出现瓶颈(即当前已存储的数据的数据量超过可存储的数据的数据量的%n)的时候,就需要进行物理分区表的扩容,即增加新物理分区表;其中,n的取值可以是根据具体的需求和实际应用场景来确定的;在一种可行的实现方式中,n的值可以为50。
[0063]
需要说明的是,在进行数据迁移的时候,数据处理设备可以先根据每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度,从初始物理分区表中确定目标物理分区表;之后,数据处理设备可以从目标物理分区表对应的数据索引节点中确定目标数据索引节点,进而将目标数据索引节点中的数据迁移至新物理分区表中,从而在不停止后台对应的相关业务服务的同时完成数据的迁移,即可以实现不停服进行数据迁移。并且,在进行了数据迁移后,需要将第二路由策略中针对目标数据索引节点与初始物理分区表的绑定关系,修改为目标数据索引节点与新物理分区表具有绑定关系,从而实现对第二路由策略的更新。
[0064]
本技术提供的数据处理方法,可以建立两种不同的路由策略,之后基于目标业务键值、建立的第一路由策略和建立的第二路由策略存储待存储数据至初始物理分区表中,这样,无论物理分区表如何变化,待存储数据的目标业务键值与数据索引节点的第一路由策略始终是固定不变的,改变的只是数据索引节点与物理分区表的第二路由策略;那么,新
增新物理分区表后,只需要改变数据索引节点与物理分区表之间的第二路由策略,那在将初始物理分区表中的数据迁移至新物理分区表的过程中,因为该相关服务所使用的数据对应的数据索引节点始终不会发生变化,因此不需要停止相关的服务,从而解决了相关技术中在对物理分区表进行扩容后存在需要停止相关服务进行数据迁移的问题,保障了业务的正常运行;同时,因为本技术中进行数据迁移时是根据每个数据索引节点的繁忙度和每个所述初始物理分区表的繁忙度进行的,可以很容易实现数据迁移,那么在最开始创建物理分区表时可以根据实际需求创建合适的数量,而不需要创建过多的物理分区表,进而避免了对资源的浪费。
[0065]
基于前述实施例,本技术的实施例提供一种数据处理方法,参照图4所示,该方法可以包括以下步骤:
[0066]
步骤301、数据处理设备确定待存储数据的目标业务键值,并在目标业务键值为字符串的情况下,对目标业务键值进行数据转换得到目标业务键值的码值。
[0067]
在本技术实施例中,待存储数据的目标业务键值为字符串可以指的是目标业务键值的信息本身是字符串;此时,对目标业务键值进行数据转换得到目标业务键值的码值,可以是按照每一位字符串转化为其对应的ascii码数值;也就是说目标业务键值的码值可以指的是目标业务键值对应的ascii码数值。
[0068]
在一种可行的实现方式中,目标业务键值为字符串可以指的是目标业务键值为“shenzhen”。
[0069]
步骤302、数据处理设备基于目标业务键值的码值和字符串的位数,确定第一哈希值。
[0070]
在本技术实施例中,数据处理设备可以将每一位字符串对应的ascii码数值与该位对应的位数进行第一运算,之后将每一位对应的第一运算结果进行第二运算,从而得到第一哈希值。在一种可行的实现方式中,第一运算可以指的是相乘,第二运算可以指的是相加;也就是说,可以每一位字符串对应的ascii码数值乘以该位对应的位数,之后将每一位对应的乘积相加,就可以得到第一哈希值;其中,若第一哈希值用hashcode1表示,比如shenzhen为八位字符串,最高位为“s”,对应的ascii码数值为115,那么就是115*8,而第二高位为“h”,对应的ascii码数值为104,那么就是104*7,以此类推,最终结果加起来就是字符串对应的第一哈希值(整形hash数值);如果第一哈希值用hashcode1来表示,那么hashcode1=115*8+104*7+

n*1。
[0071]
步骤303、数据处理设备采用目标校验算法对第一哈希值进行处理,得到第二哈希值。
[0072]
在本技术实施例中,目标检验算法可以指的是crc16算法;也就是说,数据处理设备可以采用crc16算法对第一哈希值进行处理得到第二哈希值。在一种可行的实现方式中,若第二哈希值用hashcode2表示,那么可以通过crc16(hashcode)得到hashcode2,且采用公式hashcode2=crc16(hashcode1)来得到第二哈希值。
[0073]
步骤304、数据处理设备对第二哈希值进行移位处理,并基于移位处理后的第二哈希值和第二哈希值,确定目标业务键值的目标哈希值。
[0074]
在本技术实施例中,可以对第二哈希值中的每一比特位都按照一定的方向移动目标位数;需要说明的是,可以是根据实际的应用场景和实际的第一哈希值的大小来确定移
位的方向和移动的位数。
[0075]
需要说明的是,当取模的基数比较小时,业务数据对应的hash值%分区基数得到的结果可能会引发数据倾斜。数据索引节点号65536是2的16次方,对于一个32比特位的二进制数值来说,刚好占据了低16比特位,而高16比特位还是不会参与到与运算中来;那么在一种可行的实现方式中,可以采用多个比特位一起的位运算,最终算法为一个无符号右移16位操作+一个异或运算来避免出现数据倾斜;也就是说,可以将第二哈希值的每一比特位右移16位,并将移位后的第二哈希值与第二哈希值进行异或运算来得到目标哈希值。其中,若目标哈希值用finalhashcode来表示,那么可以采用公式finalhashcode=hashcode2^(hashcode2》》》16)来确定finalhashcode。
[0076]
在一种可行的实现方式中,若待存储数据的目标业务键值的第二哈希值为256,转换成二进制为00000000001111100000000000000001,分区数为512,转换成二进制为00000000000000000000000011111111,按照相关技术中的方案00000000001111100000000000000001&00000000000000000000000011111111=1;采用本技术的方案目标哈希值的计算过程如下:
[0077]
finalhashcode=00000000001111100000000000000001^(00000000001111100000000000000001》》》16)=0000000000111110000000000000000^00000000000000000000000000111110=00000000001111100000000000111111。
[0078]
需要说明的是,我们可以对比下原来的hash值00000000001111100000000000000001,和重新均匀计算后的hash值00000000001111100000000000111111,可以发现原来hash值的高16比特位的那5个1都跑到低16比特位上了,也就是6个1的比特位都位于低16位,那么就都可以参与到和分区基数的与运算中了,从而可以大大提高数据的均匀散列效果,进而避免数据倾斜问题,最终与计算结果如下:00000000001111100000000000111111&00000000000000000000000011111111=63。
[0079]
步骤305、在目标业务键值为整形数值的情况下,数据处理设备确定目标业务键值为目标哈希值。
[0080]
在本技术实施例中,若目标业务键值本身的值就为整形数值,那么直接可以确定目标业务键值自身的值为最终的目标哈希值。
[0081]
需要说明的是,步骤301-304,以及步骤305之后均可以执行步骤305。
[0082]
步骤306、数据处理设备将目标哈希值和数据索引节点的数量进行运算得到待存储数据对应的数据索引节点,并确定第一路由策略。
[0083]
在本技术实施例中,因为hash值的计算和取模公式都是经过数学优化的,加上di层的数量足够多,可以尽量保证数据的分布均匀,最大程度的解决数据倾斜问题。在一种可行的实现方式中,若数据索引节点的号用dinum来表示,那么可以采用公式int dinum=finalhashcode&(65536-1)来得到待存储数据对应的数据索引节点的号,进而确定出第一路由策略。
[0084]
在本技术其他实施例中,假设我们现在只有物理分区表1,然后有di0、di1、di2、di3,且这四个di节点都指向物理分区表1,那么有如下取模计算(计算结果就是di节点号):订单号0(业务键值)%4=0,订单号3(业务键值)%4=3,订单号5(业务键值)%4=1,订单号6(业务键值)%4=2;通过如上计算,可以得出订单号对应的di节点号,而四个di节点当
前都指向物理分区表1,那么订单号0、3、5、6对应的数据都将存储到物理分区表1中,如图3所示。当订单数据比较多且物理分区表1出现存储瓶颈时,就需要新增一个新物理分区表2,在新增物理分区表后,原来四个di节点还是指向物理分区表1,路由规则没有变化,而因为数据是跟di节点做映射的,所以新增物理分区表并不影响原来的数据使用,也无需迁移数据。不过新增物理分区表2就是为了分摊物理分区表1的存储压力;因此,可以把部分物理分区表1上的数据迁移到物理分区表2,比如可以把di3的数据迁移到物理分区表2,因为业务数据是跟di3做路由映射的,所以无论di3迁移到哪个物理分区表,都不影响这个路由映射关系,不过如图5和图6所示di3跟物理分区表的映射则需要改到物理分区表2。
[0085]
需要说明的是,如图3和图5所示,物理分区表可以指的是mysql实例中的物理分区表;也就是说,可以有多个mysql实例,每个mysql实例可以有多个库,每个库可以有多张物理分区表,如图5和图6所示在路由映射规则模块中,每张表都会分配到一定的di节点。此外,初始化时由路由映射规则算法根据物理分区表的数据量自动分配di节点,可以是均匀分配,分配好后会生成第二路由策略,也可以生成如下表2所示的路由映射规则列表。
[0086]
mysql实例ip/port库名表名di节点192.168.56.42:3306库1表1di[1~1024]192.168.56.42:3306库1表2di[1025~2048]192.168.56.43:3308库2表5di[2049~4096]192.168.56.43:3306库3表10di[5014~8192]192.168.56.45:3306库3表11di[4097~5013]、di[8192~9048]192.168.56.47:3306库k表mdi[61200~65535]
[0087]
表2
[0088]
步骤307、数据处理设备确定每个数据索引节点对应的待存储数据的数据量。
[0089]
在本技术实施例中,数据处理设备可以根据待存储数据的目标业务键值,从第一路由策略中确定每个数据索引节点所对应的待存储数据是哪些数据,进而可以确定出这个待存储数据的数据量。
[0090]
步骤308、数据处理设备基于每个数据索引节点对应的待存储数据的数据量,确定数据索引节点与物理分区表的第二路由策略。
[0091]
在本技术实施例中,数据处理设备按照每个数据索引节点对应的待存储数据的数据量,采用数据均匀分配的原则确定每个物理分区表中所对应的数据索引节点的节点号;也就是说,每一个物理分区表中分配的数据索引节点中对应的待存储数据的数据量的大小差别不大。
[0092]
步骤309、数据处理设备基于目标业务键值、第一路由策略和第二路由策略,存储待存储数据至初始物理分区表中。
[0093]
在本技术实施例中,第一路由策略可以为hash取模路由策略:业务数据&di节点。通过优化后的hash算法和合理数量的di节点来解决数据均匀分布问题,这里目标业务键值和di节点是强绑定关系,不过di节点的数量是稳定的,且足够使用的,可以让这种强绑定关系很稳定,从而无需考虑扩容的问题,数据量的增加,只是让每个di节点映射的数据量增多而已,而不会改变业务数据对应的di节点编号。第二路由策略为固定分配路由策略:di节点&实际物理分区表;这一层通过路由映射规则来做映射,当数据量比较少时,我们可以创
建比较少的物理分区表从而减少物理资源的消耗,每个物理分区表分配到的di节点数量会比较多;当数据量比较多时,我们可以创建多一点物理分区表,每个物理分区表分配到的di节点就会少一点。也就是说,当数据较少时,di节点分配的数据不多,那么物理分区表可以承载多一点di节点的数据存储;当数据较多时,di节点分配的数据比较多,那么物理分区表可以承载少一点di节点的数据存储,而多余的di节点就分配到新增的物理分区表上,这样就可以灵活控制业务数、di节点、物理分区表的动态分配关系了。
[0094]
步骤310、在增加了新物理分区表的情况下,数据处理设备确定每个数据索引节点对应的每一待存储数据的数据访问频率和每个数据索引节点对应的每一待存储数据的数据量。
[0095]
需要说明的是,数据访问频率可以指的是vt;其中,vt可以指的是表1中的dimapper分区键值集合下每个键值的visittimes;即可以直接从di节点数组元信息中读取每个数据索引节点对应的每一待存储数据的数据访问频率。每个数据索引节点对应的每一待存储数据的数据量可以用sc来表示;其中,sc可以指的是表1中dimapper分区键值集合下每个键值的storagecapacity,以1kb为基准;即可以直接从di节点数组元信息中读取每个数据索引节点对应的每一待存储数据的数据量。
[0096]
步骤311、数据处理设备基于数据访问频率和数据量,确定每个数据索引节点的繁忙度。
[0097]
在本技术实施例中,可以将数据访问频率和数据量进行运算来确定每个数据索引节点的繁忙度。
[0098]
需要说明的是,步骤311可以通过以下方式来实现:
[0099]
步骤311a、数据处理设备确定每个数据索引节点的总数据量。
[0100]
在本技术实施例中,每个数据索引节点的总数据量可以用n来表示;其中,n可以指的是表1中的didatacount值。
[0101]
步骤311b、数据处理设备基于数据访问频率、总数据量、数据量和第一目标数值,确定每个数据索引节点的繁忙度。
[0102]
在本技术实施例中,可以将数据访问频率、总数据量、数据量和第一目标数值进行运算来得到每个数据索引节点的繁忙度;在一种可行的实现方式中,可以将每个数据索引节点对应的所有待存储数据的数据访问频率相加,并将每个数据索引节点对应的所有待存储数据的数据量进行相加,将这两个和值与第一目标数值进行一定的运算来得到每个数据索引节点的繁忙度。
[0103]
在一种可行的实现方式中,若d表示di节点繁忙度,可以通过公式来计算得到每个数据索引节点的繁忙度;其中,pk为乘积系数,p为常量值(即第一目标数值,取值范围为0《=p《=1,根据数据访问频率和数据量的权重而定),假设每条数据的平均访问频率为2次,平均基准大小为1,那么k值的计算结果如下:此时如果p值为1/2,那么d值的
计算结果如下,d的计算结果为7n/4,那么计算结果如下,d的计算结果为7n/4,那么如果p值为4/5,那么d值的计算结果如下,d的计算结果为1.36n:d值的计算结果如下,d的计算结果为1.36n:
[0104]
明显的,可以通过调整p值,来增加或降低访问压力和存储压力的权重占比(p值大,存储压力权重大、访问压力权重小;p值小,访问压力权重大、存储压力权重小),以此影响di节点繁忙度衡量。另外,访问压力和存储压力也会直接影响k值的大小,而k值作为p^k的指数,也会影响到两者的权重占比。也就是说k值是根据实际的访问压力和存储压力计算出来的,而我们可以通过调节p值来影响整个权重,这样当某个di节点的访问压力瓶颈大于存储压力瓶颈时,我们可以就可以通过p来调整,从而让计算出来的d值更大。
[0105]
步骤312、数据处理设备基于每个初始物理分区表对应的数据索引节点的繁忙度,确定每个初始物理分区表的繁忙度。
[0106]
在本技术实施例中,数据处理设备可以将每个初始物理分区表对应的数据索引节点的繁忙度相加,从而得到每个初始物理分区表的繁忙度。
[0107]
步骤313、数据处理设备基于每个数据索引节点的繁忙度,确定增加了新物理分区表后每个物理分区表的平均繁忙度。
[0108]
在本技术实施例中,可以每个数据索引节点的繁忙度求和,并将求和的结果与扩容后的物理分区表的数量进行运算,得到扩容后每个物理分区表的平均繁忙度。
[0109]
需要说明的是,步骤313可以通过以下方式来实现:
[0110]
步骤313a、数据处理设备确定初始物理分区表的第一数量和新物理分区表的第二数量。
[0111]
其中,第一数量可以用dc表示,第二数量可以用ec表示。
[0112]
步骤313b、数据处理设备基于每个数据索引节点的繁忙度、第一数量和第二数量,确定每个物理分区表的平均繁忙度。
[0113]
在本技术实施例中,可以将第一数量与第二数量相加,并将相加后的结果与每个数据索引节点的繁忙度求和结果进行运算,来得到每个物理分区表的平均繁忙度。
[0114]
在一种可行的实现方式中,若d
dic
表示第dic个di节点的繁忙度,dc表示初始物理分区表数,ec表示扩容新增的新物理分区表数,d
avg
表示扩容后每个物理分区表的平均繁忙度,那么,可以使用公式来计算扩容后每个物理分区表的平均繁忙度。
[0115]
步骤314、数据处理设备基于每个物理分区表的平均繁忙度和每个初始物理分区表的繁忙度,将目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中。
[0116]
在本技术实施例中,数据处理设备可以将每个初始物理分区表的繁忙度与平均繁忙度进行比较,从而根据比较结果从初始物理分区表中确定目标物理分区表;进而,将目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中。
[0117]
需要说明的是,步骤314可以通过以下方式来实现:
[0118]
步骤314a、数据处理设备基于每个物理分区表的平均繁忙度和每个初始物理分区表的繁忙度,从初始物理分区表中确定目标物理分区表。
[0119]
在本技术实施例中,可以将每一个初始物理分区表的繁忙度与每个物理分区表的平均繁忙度求差值并取差值绝对值,将差值绝对值最大的初始物理量分区表确定为目标物理分区表。需要说明的是,差值绝对值最大的初始物理量分区表可以认为是差距最大的物理分区表。
[0120]
步骤314b、数据处理设备基于每一目标数据的数据访问频率,确定每一目标数据的热点程度。
[0121]
在本技术实施例中,数据处理设备可以根据每一目标数据的数据访问频率,将所有的目标数据排序,进而根据每一个目标数据排名的大小,确定每一个目标数据的热点程度。
[0122]
在一种可行的实现方式中,若目标数据的访问频率的排名在前5%中,那么就认为该目标数据的热点程度为第一热点程度;若目标数据的访问频率的排名在5%~30%中,那么就认为该目标数据的热点程度为第二热点程度;若目标数据的访问频率的排名在30%~100%中,那么就认为该目标数据的热点程度为第三热点程度。需要说明的是,第一热点程度大于第二热点程度,第二热点程度大于第三热点程度。此外,如果数据的访问频率为0,那么无论它位于哪个访问频率分段,都直接确定其热点程度为第三热点程度。
[0123]
步骤314c、数据处理设备基于每一目标数据的热点程度,将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中,并更新第二路由策略。
[0124]
在本技术实施例中,数据处理设备可以根据每一个目标数据的热点程度确定每一个目标数据的类型;若热点程度为第一热点程度,那其对应的数据类型为第一类型;若热点程度为第二热点程度,那其对应的数据类型为第二类型;若热点程度第三热点程度,那其对应的数据类型为第三类型。在确定出每一目标数据的类型后,可以根据数据的类型采用与其类型对应的在线数据迁移算法将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中。
[0125]
在本技术实施例中,目标数据索引节点可以是从目标物理分区表对应的所有数据索引节点中选出来的数据索引节点。在一种可行的实现方式中,可以根据目标物理分区表对应的所有数据索引节点的繁忙度,确定繁忙度加起来与每个物理分区表的平均繁忙度差不多的第一中间数据索引节点,那么目标物理分区表对应的所有数据索引节点除第一中间数据索引节点外的数据索引节点为目标数据索引节点;在另一种可行的实现方式中,可以从目标物理分区表对应的所有数据索引节点中,确定繁忙度加起来小于每个物理分区表的平均繁忙度的第二中间数据索引节点,那么目标物理分区表对应的所有数据索引节点除第二中间数据索引节点外的数据索引节点为目标数据索引节点。
[0126]
需要说明的是,本实施例中与其它实施例中相同步骤和相同内容的说明,可以参照其它实施例中的描述,此处不再赘述。
[0127]
本技术提供的数据处理方法,可以建立两种不同的路由策略,之后基于目标业务键值、建立的第一路由策略和建立的第二路由策略存储待存储数据至初始物理分区表中,这样,无论物理分区表如何变化,待存储数据的目标业务键值与数据索引节点的第一路由策略始终是固定不变的,改变的只是数据索引节点与物理分区表的第二路由策略;那么,新增新物理分区表后,只需要改变数据索引节点与物理分区表之间的第二路由策略,那在将初始物理分区表中的数据迁移至新物理分区表的过程中,因为该相关服务所使用的数据对应的数据索引节点始终不会发生变化,因此不需要停止相关的服务,从而解决了相关技术中在对物理分区表进行扩容后存在需要停止相关服务进行数据迁移的问题,保障了业务的正常运行;同时,因为本技术中进行数据迁移时是根据每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度进行的,可以很容易实现数据迁移,那么在最开始创建物理分区表时可以根据实际需求创建合适的数量,而不需要创建过多的物理分区表,进而避免了对资源的浪费。
[0128]
基于前述实施例,在本技术其他实施例中,步骤314c中的“基于每一目标数据的热点程度,将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中”,可以通过以下方式来实现:
[0129]
步骤314c1、若基于每一目标数据的热点程度确定目标数据为第一类型数据,从第一个第一访问请求开始将目标个同类型的第一访问请求合并为一个目标访问请求。
[0130]
在本技术实施例中,目标个数量可以指的是从第一个访问请求开始间隔目标时长内获取到的同类型的访问请求的请求数量,当然,目标个数量也可以指的是从第一个访问请求开始目标大小的高速缓冲区域中填满同类型的访问请求的请求数量。在一种可行的实现方式中,目标时长可以指的是10ms,目标大小可以指的是16kb。
[0131]
在本技术其他实施例中,第一类型数据可以指的是超高频访问热点数据;此时,通过指令集合并算法来优化。先开辟一块16kb的高速缓冲区域(可根据访问频率做调整,访问频率高那就设置大一点,反之小一点),当有访问热点数据请求进来时,先hold住请求不立即执行,等16kb的高速缓冲区域填满,或者10ms时间到了(可以配置化调整),再统一执行一次指令操作(多次指令合并为一次),顺便做数据迁移。比如在同1ms内,有10次查询商家数据的请求,如果每个请求指令都各自执行一次,假设每次耗时2ms,那么就是总耗时20ms;而如果合并为一次查询,查询结果供10个请求共享,那么耗时只计算请求本身就2ms,实际上请求指令缓冲、请求结果共享都是内存操作,只消耗cpu资源,消耗的时间估计连0.01ms都不到,从此可以看出,通过合并指令算法可以提高请求效率。
[0132]
步骤314c2、执行目标访问请求,并基于目标访问请求将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中。
[0133]
a、采用多个哈希算法确定每一第一访问中携带的关键字符信息的哈希值。
[0134]
其中,多个哈希算法可以是不同的;需要说明的是,多个哈希算法中具体包括多少个哈希算法可以是根据实际的应用场景和实际的需求来设定的。
[0135]
b、存储每一关键字符信息至目标存储空间中与哈希值对应的位图数据表的目标位上,并设置目标位的值为第二目标数值。
[0136]
其中,第二目标数值可以指的是1。且,第二目标数值表示该目标位上存储有关键字符信息。需要说明的是,每一个哈希算法对应的关键字符信息的哈希值在位图数据表中
对应的位,都要设置值为1。
[0137]
c、若确定位图数据表中与目标访问请求中的目标关键字符信息的目标哈希值对应的位的值为第二目标数值,且在目标物理分区表中读取到目标数据的情况下,将标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中。
[0138]
其中,目标哈希值是采用多个哈希算法确定的。
[0139]
在一种可行的实现方式中,已经收到多次selec*from t_order where order_no=’dnl2023031116034’访问请求,且访问请求已经填满高速缓冲区域,那么就开始执行查询指令。
[0140]
1.1、因为di节点处于迁移中(migrationflag=“running”)的状态,所以查询指令先路由到目标物理分区表“192.168.10.101:4208”,如果查询到数据,那么说明数据已经从源物理分区表迁移到目标分区表了。
[0141]
1.2、如果在目标物理分区表查询不到数据,那么查询指令路由到源物理分区表,此时仍查不到则直接返回。
[0142]
1.3、如果在源物理分区表查询到数据,那么则顺便做数据迁移操作,将数据直接从源物理分区表迁移到目标分区表,迁移完毕则将dimapper.version升级,比如从“v1”升级到“v2”,同时将源物理分区表中的这条数据标记为“待删除”,等后续整个di节点的数据迁移完毕后再统一对“待删除”记录进行清理。
[0143]
1.4、数据迁移过程中,di节点会维护该行数据的全局锁,只有获得全局锁的线程才可以执行数据迁移操作,避免请求冲突。其中,全局锁一般是设置在目标访问请求中的第一个访问请求对应的数据上。
[0144]
需要说明的是,为了降级冲突概率,可以考虑通过多个不同的哈希算法,对同一个字符串分别计算出不同的哈希码,这几个哈希码就表示这个特定字符串了,因为不同哈希算法原理差异很大,所以针对不同字符串,几个哈希算法算出来的结果完全一样的概率就很低了,当然每个字符串都要占用多个哈希码值,每个哈希码值又会占用一个bit位,会导致存储的空间变小。
[0145]
若现在有三个哈希算法,针对字符串“shenzhen”计算出来的值分别为1、4、7,那么这两个字符串在bit位上的存储如图7所示。针对字符串“neimenggu”计算出来的值分别为2、4、8,那这两个字符串在bit位上的存储如图8所示。
[0146]
也就是两个不同字符串虽然有一个哈希码是相同的,但是另外两个哈希码值却是不同的,这就可以大大降低冲突的概率了。而对于同一个字符串,经过三个哈希算法计算出来的三个哈希码值一定是相同的,这样当我们查询到一个数据的三个哈希码值没办法都找到时,说明这个数据一定不存在;但是如果它对应的三个哈希码值都能匹配上,这个数据则不一定存在,此时还是需要从初始物理分区表和新物理分区表中进行二次查询确认的。另外,哈希算法的个数k可以通过如下公式计算(其中,m为存储空间大小,n为字符串对象个数):综上,通过这个优化,可以解决数据不存在时,需要查询两次导致空转浪费资源的问题。另外,当我们执行insert指令新增数据时,需要及时从上面的内存空间中,及时把数据对应的bit位移除掉。
[0147]
步骤314c3、更新目标数据索引节点的版本,并删除目标物理分区表中的目标数据
索引节点的目标数据。
[0148]
步骤314c4、若基于每一目标数据的热点程度确定目标数据为第二类型数据,确定目标数据索引节点中当前待迁移数据占目标数据的比值,并基于比值确定第三目标数值。
[0149]
步骤314c5、在接收到第二访问请求的情况下,读取用来存储初始物理分区表中的数据的磁盘的第三目标数值个扇区的数据。
[0150]
在本技术实施例中,第二类型数据,可以指的是高频访问热点数据;高频访问热点数据,因为短时间内数据的访问热度不如超高频热点数据,所以不适合通过合并指令的方式来做优化,避免占用过多cpu资源,其余数据迁移原理基本同超高频热点数据访问。
[0151]
针对高频访问热点数据,当访问一条数据时,有很大概率会访问这条数据旁边的记录,因为关系型数据库中的数据存储也是按照b+树排列的,具有相似或关联关系的数据可能排列在前后,而我们目前常用且大规模使用的硬盘还是以机械硬盘为准(比如sata或者sas),机械磁头寻道耗费的时间占比是很大的,如图9所示,磁头得先移动到磁道上,再沿着磁盘移动读取数据。磁盘每一个扇区的大小是512b,而操作系统文件系统缓冲区大小为8kb,也就是我们利用这个特性,每次做数据迁移时,一次性读取16个扇区的数据,然后再根据di节点的dimapper集合判断哪些数据是需要做在线迁移的,如果判断需要那么则可以一次性把整个数据的报文发送目标物理分区表,这样每次请求触发的数据迁移可以顺带迁移多条数据,从而减少网络往返io时延,同时加快数据迁移效率。
[0152]
当然,在待迁移数据占比不大时,如果每次读取数据还是按照16个扇区,那么会导致很多读取出来的数据实际上都是不需要做迁移的,从而浪费很多读取资源,我们可以根据dimapper计算出当前待迁移数据的比例(即当前待迁移数据占目标数据的比例),从而动态决策每次读取扇区的个数(第三目标数值),决策规则如下:70%《待迁移数据比例《100%,读取16个扇区;50%《待迁移数据比例《70%,读取12个扇区;30%《待迁移数据比例《50%,读8个扇区;5%《待迁移数据比例《30%,读取4个扇区;0%《待迁移数据比例《5%,读取1个扇区。
[0153]
步骤314c6、在确定第三目标数值个扇区的数据均属于当前待迁移数据的情况下,基于第二访问请求一次迁移第三目标数值个扇区的数据至新物理分区表中,直到目标数据均迁移至新物理分区表中,并更新目标数据索引节点的版本,删除目标物理分区表中的目标数据索引节点的目标数据。
[0154]
在本技术实施例中,若一次性读取的第三目标数值个扇区中的数据都是当前待迁移数据,那么就可以在响应该第二访问请求的同时,一次向将读取到的第三目标数值个扇区中的数据全部迁移至新物理分区表中。
[0155]
步骤314c7、若基于每一目标数据的热点程度确定目标数据的为第三类型数据,采用第四目标数值个线程将目标数据迁移至新物理分区表中,并更新目标数据索引节点的版本,删除目标物理分区表中的目标数据索引节点的目标数据。
[0156]
在本技术实施例中,第三类型数据可以指的是低频非热点数据;低频非热点数据因为是非热点数据,访问频率很低,或者就没有被访问,所以迁移的时效性要求较低,因此,第三类型数据是通过守护进程逐渐做迁移的。
[0157]
守护进程设置了多个线程,然后根据系统的负载能力动态(输入输出(input output,io)和中央处理器(center processing unit,cpu)的使用率)调整线程数量,比如
系统繁忙时候只启动一个线程做数据迁移,不忙时候可以启动4个或8个线程做数据迁移。进行数据迁移时,逐条扫描目标物理分区表对应的目标di节点的数据,发现目标数据,则触发迁移操作挪到目标物理分区表,迁移完毕则将该数据标记为待删除。
[0158][0159]
表3
[0160]
在本技术其他实施例中,假设我们要迁移的di节点编号为345,在进行数据迁移前对应的元数据结构可以如上表3所示;当触发数据迁移动作时,先将dimigration(迁移配置信息)的migrationflag(迁移标记)设置为“running”,表示该di节点启动数据迁移,然后在dimigration中的sroucelinked(资源链接)中配置源物理分区表的相关信息(如上表3所
示),在targetlinked配置目标物理分区表的相关信息(如上表3所示)。
[0161]
需要说明的是,di节点345从“192.168.2.19:3306”的初始物理分区表(目标物理分区表)中迁移到“192.168.10.101:4208”新物理分区表中。且,若di编号为345对应的数据全部从初始物理分区表的目标物理分区表中迁移到新物理分区表后,需要启动数据清理工作。将目标物理分区表(即源物理分区表)中的标记为待删除的数据进行删除,删除后将di节点标记为数据迁移完成,此时diversion升一级为v2,对应的物理分区表也是发生变化;这样,下次新的请求指令过来后,将直接路由到目标物理分区表,无需再进行双请求路由操作。
[0162][0163]
表4
[0164]
在本技术其他实施例中,如上表4所示,di节点345中的全部的数据都从“192.168.2.19:3306”的初始物理分区表(目标物理分区表)中迁移到“192.168.10.101:4208”新物理分区表后,dimapper中的分区键值的版本号需要设置为v2,dilinkedipport同时也由原来的目标物理分区表(源物理分区表)(192.168.2.19:3306)重置为新物理分区表(192.168.10.101:4208),同时dimigration.migrationflag设置为done,表示数据迁移完成(di节点元数据结构如上表4所示)。
[0165]
需要说明的是,本技术中提供的数据处理方案中的关于数据迁移的方案方案,整套设计方案各个环节彼此搭配使用,实现了在线不停服做数据迁移,很好的满足了金融交易场景高可用性要达到99.999%的要求。同时本技术的方案也支持动态弹性扩缩容,当存储遇到瓶颈时,通过新增物理分区表并动态做数据迁移来提升更大存储容量;当存储资源过多时,也可以通过减少物理分区表来实现,真正做到按需分配。且通过对待存储数据的哈希值的处理可以让数据更加均匀,避免出现数据倾斜。
[0166]
下面继续说明本技术实施例提供的数据处理装置154实施为软件模块的示例性结构,在一些实施例中,如图1所示,存储在存储器150的数据处理装置154中的软件模块可以是终端100中的数据处理装置,包括:
[0167]
路由信息确定模块1541,用于确定待存储数据的目标业务键值,并基于目标业务键值确定待存储数据与数据索引节点的第一路由策略;
[0168]
路由信息确定模块1541,还用于确定数据索引节点与物理分区表的第二路由策略;
[0169]
数据存储模块1542,用于基于目标业务键值、第一路由策略和第二路由策略,存储待存储数据至初始物理分区表中;
[0170]
数据迁移模块1543,用于在增加了新物理分区表的情况下,基于每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度,将初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中,并更新第二路由策略。
[0171]
本技术一些实施例中,路由信息确定模块1541还用于执行以下步骤:
[0172]
在目标业务键值为字符串的情况下,对目标业务键值进行数据转换得到目标业务键值的码值;
[0173]
基于目标业务键值的码值和字符串的位数,确定第一哈希值;
[0174]
采用目标校验算法对第一哈希值进行处理,得到第二哈希值;
[0175]
对第二哈希值进行移位处理,并基于移位处理后的第二哈希值和第二哈希值,确定目标业务键值的目标哈希值;
[0176]
在目标业务键值为整形数值的情况下,确定目标业务键值为目标哈希值;
[0177]
将目标哈希值和数据索引节点的数量进行运算得到待存储数据对应的数据索引节点,并确定第一路由策略。
[0178]
本技术一些实施例中,路由信息确定模块1541还用于执行以下步骤:
[0179]
确定每个数据索引节点对应的待存储数据的数据量;
[0180]
基于每个数据索引节点对应的待存储数据的数据量,确定数据索引节点与物理分区表的第二路由策略。
[0181]
本技术一些实施例中,数据迁移模块1543还用于执行以下步骤:
[0182]
确定每个数据索引节点对应的每一待存储数据的数据访问频率和每个数据索引节点对应的每一待存储数据的数据量;
[0183]
基于数据访问频率和数据量,确定每个数据索引节点的繁忙度;
[0184]
基于每个初始物理分区表对应的数据索引节点的繁忙度,确定每个初始物理分区表的繁忙度;
[0185]
基于每个数据索引节点的繁忙度,确定增加了新物理分区表后每个物理分区表的平均繁忙度;
[0186]
基于每个物理分区表的平均繁忙度和每个初始物理分区表的繁忙度,将目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中。
[0187]
本技术一些实施例中,数据迁移模块1543还用于执行以下步骤:
[0188]
确定每个数据索引节点的总数据量;
[0189]
基于数据访问频率、总数据量、数据量和第一目标数值,确定每个数据索引节点的繁忙度;
[0190]
相应的,数据迁移模块1543,还用于确定初始物理分区表的第一数量和新物理分区表的第二数量;基于每个数据索引节点的繁忙度、第一数量和第二数量,确定每个物理分
区表的平均繁忙度。
[0191]
本技术一些实施例中,数据迁移模块1543还用于执行以下步骤:
[0192]
基于每个物理分区表的平均繁忙度和每个初始物理分区表的繁忙度,从初始物理分区表中确定目标物理分区表;
[0193]
基于每一目标数据的数据访问频率,确定每一目标数据的热点程度;
[0194]
基于每一目标数据的热点程度,将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中。
[0195]
本技术一些实施例中,数据迁移模块1543还用于执行以下步骤:
[0196]
若基于每一目标数据的热点程度确定目标数据为第一类型数据,从第一个第一访问请求开始将目标个同类型的第一访问请求合并为一个目标访问请求;
[0197]
执行目标访问请求,并基于目标访问请求将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中;
[0198]
更新目标数据索引节点的版本,并删除目标物理分区表中的目标数据索引节点的目标数据;
[0199]
相应的,数据迁移模块1543,还用于采用多个哈希算法确定每一第一访问中携带的关键字符信息的哈希值;存储每一关键字符信息至目标存储空间中与哈希值对应的位图数据表的目标位上,并设置目标位的值为第二目标数值;若确定位图数据表中与目标访问请求中的目标关键字符信息的目标哈希值对应的位的值为第二目标数值,且在目标物理分区表中读取到目标数据的情况下,将目标物理分区表中的目标数据索引节点的目标数据迁移至新物理分区表中;其中,目标哈希值是采用多个哈希算法确定的。
[0200]
本技术一些实施例中,数据迁移模块1543还用于执行以下步骤:
[0201]
若基于每一目标数据的热点程度确定目标数据为第二类型数据,确定目标数据索引节点中当前待迁移数据占目标数据的比值,并基于比值确定第三目标数值;
[0202]
在接收到第二访问请求的情况下,读取用来存储初始物理分区表中的数据的磁盘的第三目标数值个扇区的数据;
[0203]
在确定第三目标数值个扇区的数据均属于当前待迁移数据的情况下,基于第二访问请求一次迁移第三目标数值个扇区的数据至新物理分区表中,直到目标数据均迁移至新物理分区表中,并更新目标数据索引节点的版本,删除目标物理分区表中的目标数据索引节点的目标数据;
[0204]
若基于每一目标数据的热点程度确定目标数据的为第三类型数据,采用第四目标数值个线程将目标数据迁移至新物理分区表中,并更新目标数据索引节点的版本,删除目标物理分区表中的目标数据索引节点的目标数据。
[0205]
本技术的实施例所提供的数据处理装置,可以建立两种不同的路由策略,之后基于目标业务键值、建立的第一路由策略和建立的第二路由策略存储待存储数据至初始物理分区表中,这样,无论物理分区表如何变化,待存储数据的目标业务键值与数据索引节点的第一路由策略始终是固定不变的,改变的只是数据索引节点与物理分区表的第二路由策略;那么,新增新物理分区表后,只需要改变数据索引节点与物理分区表之间的第二路由策略,那在将初始物理分区表中的数据迁移至新物理分区表的过程中,因为该相关服务所使用的数据对应的数据索引节点始终不会发生变化,因此不需要停止相关的服务,从而解决
了相关技术中在对物理分区表进行扩容后存在需要停止相关服务进行数据迁移的问题,保障了业务的正常运行;同时,因为本技术中进行数据迁移时是根据每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度进行的,可以很容易实现数据迁移,那么在最开始创建物理分区表时可以根据实际需求创建合适的数量,而不需要创建过多的物理分区表,进而避免了对资源的浪费。
[0206]
需要说明的是,本技术实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本装置实施例中未披露的技术细节,请参照本技术方法实施例的描述而理解。
[0207]
本技术实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的方法,例如,如图2和4示出的方法。
[0208]
在一些实施例中,存储介质可以是计算机可读存储介质,例如,铁电存储器(fram,ferromagnetic random access memory)、只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read only memory)、可擦除可编程只读存储器(eprom,erasable programmable read only memory)、带电可擦可编程只读存储器(eeprom,electrically erasable programmable read only memory)、闪存、磁表面存储器、光盘、或光盘只读存储器(cd-rom,compact disk-read only memory)等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
[0209]
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
[0210]
作为示例,可执行指令可以但不一定对应于文件系统中的文件,也可以被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(超文本标记语言,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
[0211]
以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。

技术特征:
1.一种数据处理方法,其特征在于,所述方法包括:确定待存储数据的目标业务键值,并基于所述目标业务键值确定所述待存储数据与数据索引节点的第一路由策略;确定所述数据索引节点与物理分区表的第二路由策略;基于所述目标业务键值、所述第一路由策略和所述第二路由策略,存储所述待存储数据至初始物理分区表中;在增加了新物理分区表的情况下,基于每个所述数据索引节点的繁忙度和每个所述初始物理分区表的繁忙度,将所述初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至所述新物理分区表中,并更新所述第二路由策略;其中,所述数据索引节点的繁忙度表征所述数据索引节点对应的数据存储情况,所述初始物理分区表的繁忙度表征所述初始物理分区表中的数据存储情况。2.根据权利要求1所述的方法,其特征在于,所述基于所述目标业务键值确定所述待存储数据与数据索引节点的第一路由策略,包括:在所述目标业务键值为字符串的情况下,对所述目标业务键值进行数据转换得到所述目标业务键值的码值;基于所述目标业务键值的码值和所述字符串的位数,确定第一哈希值;采用目标校验算法对所述第一哈希值进行处理,得到第二哈希值;对所述第二哈希值进行移位处理,并基于移位处理后的第二哈希值和所述第二哈希值,确定所述目标业务键值的目标哈希值;在所述目标业务键值为整形数值的情况下,确定所述目标业务键值为所述目标哈希值;将所述目标哈希值和所述数据索引节点的数量进行运算得到所述待存储数据对应的数据索引节点,并确定所述第一路由策略。3.根据权利要求2所述的方法,其特征在于,所述确定所述数据索引节点与物理分区表的第二路由策略,包括:确定所述每个数据索引节点对应的待存储数据的数据量;基于所述每个数据索引节点对应的待存储数据的数据量,确定所述数据索引节点与物理分区表的第二路由策略。4.根据权利要求1所述的方法,其特征在于,所述基于每个所述数据索引节点的繁忙度和每个所述初始物理分区表的繁忙度,将所述初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至所述新物理分区表中,包括:确定所述每个数据索引节点对应的每一待存储数据的数据访问频率和所述每个数据索引节点对应的每一待存储数据的数据量;基于所述数据访问频率和所述数据量,确定所述每个数据索引节点的繁忙度;基于所述每个初始物理分区表对应的所述数据索引节点的繁忙度,确定所述每个初始物理分区表的繁忙度;基于所述每个数据索引节点的繁忙度,确定增加了所述新物理分区表后每个物理分区表的平均繁忙度;基于所述每个物理分区表的平均繁忙度和所述每个初始物理分区表的繁忙度,将所述
目标物理分区表中的目标数据索引节点的数据迁移至所述新物理分区表中。5.根据权利要求4所述的方法,其特征在于,所述基于所述访问频率和所述数据量,确定所述每个数据索引节点的繁忙度,包括:确定所述每个数据索引节点的总数据量;基于所述数据访问频率、所述总数据量、所述数据量和第一目标数值,确定所述每个数据索引节点的繁忙度;相应的,所述基于所述每个数据索引节点的繁忙度,确定增加了所述新物理分区表后每个物理分区表的平均繁忙度,包括:确定所述初始物理分区表的第一数量和新物理分区表的第二数量;基于所述每个数据索引节点的繁忙度、所述第一数量和所述第二数量,确定所述每个物理分区表的平均繁忙度。6.根据权利要求4所述的方法,其特征在于,所述基于所述每个物理分区表的平均繁忙度和所述每个初始物理分区表的繁忙度,将所述目标物理分区表中的目标数据索引节点的数据迁移至所述新物理分区表中,包括:基于所述每个物理分区表的平均繁忙度和所述每个初始物理分区表的繁忙度,从所述初始物理分区表中确定所述目标物理分区表;基于每一所述目标数据的数据访问频率,确定所述每一目标数据的热点程度;基于所述每一目标数据的热点程度,将所述目标物理分区表中的目标数据索引节点的所述目标数据迁移至所述新物理分区表中。7.根据权利要求6所述的方法,其特征在于,所述基于所述每一目标数据的热点程度,将所述目标物理分区表中的目标数据索引节点的所述目标数据迁移至所述新物理分区表中,包括:若基于所述每一目标数据的热点程度确定所述目标数据为第一类型数据,从第一个第一访问请求开始将目标个同类型的第一访问请求合并为一个目标访问请求;执行所述目标访问请求,并基于所述目标访问请求将所述目标物理分区表中的目标数据索引节点的所述目标数据迁移至所述新物理分区表中;更新所述目标数据索引节点的版本,并删除所述目标物理分区表中的所述目标数据索引节点的目标数据;相应的,所述基于所述目标访问请求将所述目标物理分区表中的目标数据索引节点的所述目标数据迁移至所述新物理分区表中,包括:采用多个哈希算法确定每一第一访问中携带的关键字符信息的哈希值;存储所述每一关键字符信息至目标存储空间中与所述哈希值对应的位图数据表的目标位上,并设置所述目标位的值为第二目标数值;若确定所述位图数据表中与所述目标访问请求中的目标关键字符信息的目标哈希值对应的位的值为所述第二目标数值,且在所述目标物理分区表中读取到所述目标数据的情况下,将所述目标物理分区表中的目标数据索引节点的所述目标数据迁移至所述新物理分区表中;其中,所述目标哈希值是采用所述多个哈希算法确定的。8.根据权利要求7所述的方法,其特征在于,所述基于所述每一目标数据的热点程度,将所述目标物理分区表中的目标数据索引节点的所述目标数据迁移至所述新物理分区表
中,还包括:若基于所述每一目标数据的热点程度确定所述目标数据为第二类型数据,确定所述目标数据索引节点中当前待迁移数据占所述目标数据的比值,并基于所述比值确定第三目标数值;在接收到第二访问请求的情况下,读取用来存储所述初始物理分区表中的数据的磁盘的第三目标数值个扇区的数据;在确定所述第三目标数值个扇区的数据均属于所述当前待迁移数据的情况下,基于所述第二访问请求一次迁移所述第三目标数值个扇区的数据至所述新物理分区表中,直到所述目标数据均迁移至所述新物理分区表中,并更新所述目标数据索引节点的版本,删除所述目标物理分区表中的所述目标数据索引节点的目标数据;若基于所述每一目标数据的热点程度确定所述目标数据的为第三类型数据,采用第四目标数值个线程将所述目标数据迁移至所述新物理分区表中,并更新所述目标数据索引节点的版本,删除所述目标物理分区表中的所述目标数据索引节点的目标数据。9.一种数据处理设备,其特征在于,包括:存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至8任一项所述的方法。10.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于引起处理器执行时,实现权利要求1至8任一项所述的方法。

技术总结
本申请提供一种数据处理方法、设备及存储介质,包括:确定待存储数据的目标业务键值,并基于目标业务键值确定待存储数据与数据索引节点的第一路由策略;确定数据索引节点与物理分区表的第二路由策略;基于目标业务键值、第一路由策略和第二路由策略,存储待存储数据至初始物理分区表中;在增加了新物理分区表的情况下,基于每个数据索引节点的繁忙度和每个初始物理分区表的繁忙度,将初始物理分区表的目标物理分区表中的目标数据索引节点的数据迁移至新物理分区表中,并更新第二路由策略;数据索引节点的繁忙度表征数据索引节点对应的数据存储情况,初始物理分区表的繁忙度表征初始物理分区表中的数据存储情况。始物理分区表中的数据存储情况。始物理分区表中的数据存储情况。


技术研发人员:郑奕彬 彭荣杰 王顺云 侯银花 王文虎 朱蓉珍
受保护的技术使用者:深圳前海微众银行股份有限公司
技术研发日:2023.04.14
技术公布日:2023/8/9
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐