发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。
为此,本发明的第一方面提供了一种基于数据库中间件的分区方法。
本发明的第二方面提供了一种基于数据库中间件的分区装置。
本发明的第三方面提供了一种计算机可读存储介质。
有鉴于此,根据本发明的第一方面,提供了一种基于数据库中间件的分区方法,包括:接收到数据库路由指令,确认数据库中的至少一个数据库节点发生数据阈值倾斜;根据数据阈值的倾斜程度,新建数据库分片实例;根据预先设置的节点重分布规则,将发生数据阈值倾斜的数据库节点中的维度字段进行分配,以使维度字段分布在数据库分片实例中;根据数据库分片实例生成新增数据库节点。
本发明实施例提供的基于数据库中间件的分区方法,通过判断多个数据库节点负载中存储的数据阈值是否发生倾斜,根据数据阈值的倾斜程度,新建数据库分片实例,从而为需要进行重分布的数据库节点负载提供存放空间,进一步提高大数据量场景下数据库的性能;根据预先设置的节点重分布规则,对数据库节点中发生数据阈值倾斜的维度字段进行重新分配,使重新分配的维度字段分布在扩建后的数据库分片实例中,并根据重分布后的数据库分片实例,生成新增数据库节点,实现对超出均衡负载的数据阈值和对应的字段进行转移,从而使数据库各节点负载达到均衡,可以有效的控制数据存储过程中的数据倾斜现象,可以理解的是,分配后的数据库分片实例,能够生成多个新的数据库节点。本发明通过控制二维甚至n维分片字段对数据库中的某些数据进行重分布,使数据库各节点负载达到均衡,可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能。
另外,根据本发明上述技术方案提供的基于数据库中间件多维分片的方法,还具有如下附加技术特征:
在上述技术方案中,进一步地,根据预先设置的节点重分布规则,将发生数据阈值倾斜的数据库节点中的维度字段进行分配,具体包括:获取各个数据库节点中预存的维度字段;根据节点重分布规则中的维度遍历规则,提取维度字段中的维度值,并根据维度值对维度字段进行排序;提取维度字段中对应的数据阈值,确认数据阈值和目标临界数值的大小关系,调取排序后的维度字段;将调取的维度字段分配到新建后的任一数据库分片实例中。
在该技术方案中,获取各个数据库节点负载预存的维度字段,根据节点负载重分布规则中的维度遍历规则,提取出维度字段中的维度值,从而便于区分出各个维度的字段和相对应的数据阈值;对维度值进行排序后并提取维度字段中对应的数据阈值,通过匹配数据阈值与目标阈值之间的数量关系,将调取后的维度字段重新分配到新建后的任一数据库分片实例中,进而通过控制多维度字段,对各个数据库节点负载的数据实现重分布,使数据库各节点负载达到均衡,可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能。
在上述技术方案中,进一步地,提取维度字段中对应的数据阈值,确认数据阈值和目标临界数值的大小关系,调取排序后的维度字段,具体包括:确认数据阈值小于目标临界数值,根据目标临界数值与数据阈值的差值,从下一个排序后的维度字段对应的数据阈值中调取差值,根据节点重分布规则中的调用规则,调取与差值和数据阈值分别对应的维度字段;确认数据阈值大于等于目标临界数值,根据目标临界数值,从数据阈值中调取目标临界数值,根据节点重分布规则中的调用规则,调取与数据阈值对应的维度字段。
在该技术方案中,通过确认数据阈值和目标临界数值之间的数量关系,进而确定调取排序后的维度字段的方法。当数据阈值小于目标临界数值时,说明调取的维度字段的数据阈值量过小,获取数据阈值与目标临界数值之间的差值,还需要从其他的维度字段中调取数据阈值,使该数据阈值与差值相等,从而补足需要分配的数据阈值的数量;根据节点重分布规则中的调用规则,分别对需要分配的数据阈值中的维度字段进行调取,能够理解的是,所调取的维度字段可以存在多个,从而保证调取的数据阈值与目标数据阈值相等,进一步使各个数据库节点负载达到均衡。并且当数据阈值大于等于目标临界数值时,说明调取的维度字段的数据阈值处于饱和状态,只需要从数据阈值中调取与目标临界数值相等的数据量即可;然后根据节点重分布规则中的调用规则,对需要分配的数据阈值中的维度字段进行调取,能够理解的是,所调取的维度字段可以存在一个,从而更进一步保证调取的数据阈值与目标数据阈值相等,使各个数据库节点负载达到均衡,进一步可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能。
在上述技术方案中,进一步地,根据数据阈值的倾斜程度,新建数据库分片实例,具体包括:获取倾斜程度的各个比例值,控制数据库中间件内预设的创建规则,为发生数据阈值倾斜的至少一个数据库节点,新建数据库分片实例。
在该技术方案中,由于比例值能够反映数据阈值的倾斜程度,通过获取各个数据库节点对应的数据阈值的倾斜程度,控制数据库中间件内预设的创建规则,统计各个发生数据阈值倾斜的数据库节点,根据倾斜程度,新建数据库分片实例,用于负载各个发生数据倾斜的数据库节点中对应的数据阈值,能够针对解决数据量较大需要进行数据库扩容的情景,从而扩展了数据库集群中的数据库分片节点实例。
在上述技术方案中,进一步地,接收到数据库路由指令,确认数据库中的至少一个数据库节点发生数据阈值倾斜,具体包括:统计各个数据库节点内放置的维度字段和与维度字段对应的数据阈值;从数据阈值中筛选出最小的数据阈值,并确定为目标临界数据;根据目标临界数据,查找超过目标临界数据的至少一个数据库节点;对各个超过的数据库节点内存放的数据阈值分别进行计算,以得到对应的数据阈值的倾斜程度。
在该技术方案中,通过统计维度字段和维度字段对应的数据阈值,从而准确获知各个数据库节点的实际阈值量;然后从数据阈值中筛选出最小的数据阈值,以此作为目标临界数据,从而能够作为均衡数据库节点负载的基准;根据目标临界数据,查找出超过目标临界数据的数据库节点,可以说明的是,查找出的数据库节点可以存在多个,然后对查找出的数据库节点上的数据阈值进行计算,进而通过计算结果得到各个发生数据倾斜的数据库节点对应的倾斜程度,从而可以有效的控制数据存储过程中的数据倾斜现象。
在上述技术方案中,进一步地,获取倾斜程度的各个比例值,控制数据库中间件内预设的创建规则,具体包括:根据创建规则,统计各个比例值的数量;根据数量,确定数据库分片实例的扩建个数。
在该技术方案中,获取倾斜程度的各个比例值,根据数据库中间件内预设的创建规则,从而统计出各个比例值的数量,由于比例值能够反映数据库分片实例的扩建个数,因此根据比例值的数量,确定数据库分片实例的扩建个数,从而在原有的数据库节点的基础上,扩展了数据库集群中的数据库分片实例,便于使超出负载均衡的数据阈值进行转移到扩建后的数据库分片实例中,提高大数据量场景下数据库重分布的性能。
在上述技术方案中,进一步地,对各个超过的数据库节点内存放的数据阈值分别进行计算,以得到对应的数据阈值的倾斜程度,具体包括:计算超过的数据阈值与目标临界数据的差值;将差值与目标临界数据进行比值计算,以确定倾斜程度。
在该技术方案中,对各个超过的数据库节点内存放的数据阈值分别以计算的方式进行统计,其计算步骤具体包括:统计出数据阈值与目标临界数据的差值,然后将差值与目标临界数据进行比值计算,确定比值的倾斜程度,从而使重分布后的数据库节点负载更均衡。
在上述技术方案中,进一步地,接收到数据库路由指令之前,具体包括:数据库中间件判断接收的指令语句中是否包含路由注解,确认从控制语句中提取字段名和属性值、数据库表;根据数据库中间件的分片算法,解析数据库表对应的数据库节点,并调取字段名和属性值,存储在解析后的对应的数据库节点。
在该技术方案中,接收到数据库路由指令之前,数据库中间件能够拦截到用户发送的指令语句,通过判断指令语句中是否包含路由注解,如果包含则说明能够从控制语句中提取字段名和属性值、数据库表;根据数据库中间件内的分片算法,解析数据库表对应的数据库节点,可以说明的是,数据库表能够存储在多个数据库节点中,通过调取控制语句中的字段名和属性值,使其存储在对应的解析后的数据库节点上,从而使各个数据库分片节点能够负载指令语句中相互关联的字段名和属性值、数据库表。
根据本发明的第二方面,提供了一种基于数据库中间件的分区装置,包括存储器和处理器,存储器被配置为存储计算机程序;处理器被配置为执行计算机程序以实现如上述任一技术方案的基于数据库中间件的分区方法的步骤,因而具备该基于数据库中间件的分区方法的全部有益技术效果,在此不再赘述。
根据本发明的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一技术方案的基于数据库中间件的分区方法的步骤,因而具备该基于数据库中间件的分区方法的全部有益技术效果,在此不再赘述。
根据本发明的附加方面和优点将在下面的描述部分中给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
下面参照图1至图5描述根据本发明一些实施例的基于数据库中间件的分区方法、基于数据库中间件的分区装置和计算机可读存储介质。
实施例一:
本发明第一方面的实施例提供了一种基于数据库中间件的分区方法。
具体阐述关于分区方法的详细内容。
下文将以mycat(数据库中间件的命名方式)分布式数据库中间件为例,此数据库中间件原理主要通过拦截用户发送的控制语句,对控制语句中对应的字段、属性值、数据库表进行解析后,路由在数据库集群中对应的多个数据库分片节点内部,从而对本申请的实施例进行具体说明。
图1示出了本申请的一个实施例的基于数据库中间件的分区方法的示意流程图。
如图1所示,该基于数据库中间件的分区方法包括:
步骤S102,接收到数据库路由指令,确认数据库中的至少一个数据库节点发生数据阈值倾斜;
步骤S104,根据数据阈值的倾斜程度,新建数据库分片实例;
步骤S106,根据预先设置的节点重分布规则,将发生数据阈值倾斜的数据库节点中的维度字段进行分配,以使维度字段分布在数据库分片实例中;
步骤S108,根据数据库分片实例生成新增数据库节点。
本发明实施例提供的基于数据库中间件的分区方法,首先根据mycat分布式数据库中间件内设置的分片算法,诸如枚举算法、以及其他的算法,配置参数解析,其配置参数的过程能够参考mycat分布式数据库中间件设定的规则,进行配置。其次,基于mycat分布式数据库中间件分片算法的基础上,进行二次开发,针对多维度分片字段,设计了多维分片算法,通过控制二维、甚至多维分片字段对数据库中的某些数据进行重分布,使数据库各节点负载达到均衡,可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能,具体功能实现过程:当数据库中间件接收到数据库路由指令后,需要对数据库节点负载中出现失衡的,进行倾斜程度的判断策略。确定失衡的数据库节点负载的倾斜程度后,根据数据阈值的倾斜程度,新建数据库分片实例,进一步为后续设计的分区策略提供分配基础。根据预先设置的节点重分布规则,将发生数据阈值倾斜的数据库节点中的维度字段进行分配,以使维度字段分布在数据库分片实例中,根据数据库分片实例生成新增数据库节点。
图2示出了本申请的一个实施例的基于数据库中间件的分区方法的另一个示意流程图。
如图2所示,根据预先设置的节点重分布规则,将发生数据阈值倾斜的数据库节点中的维度字段进行分配,具体包括:
步骤S202,获取各个数据库节点中预存的维度字段;
步骤S204,根据节点重分布规则中的维度遍历规则,提取维度字段中的维度值,并根据维度值对维度字段进行排序;
步骤S206,提取维度字段中对应的数据阈值,确认数据阈值和目标临界数值的大小关系,调取排序后的维度字段;
步骤S208,将调取的维度字段分配到新建后的任一数据库分片实例中。
在该实施例中,通过控制多维度字段,对各个数据库节点负载的数据实现重分布,使数据库各节点负载达到均衡,可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能。
图3示出了本申请的一个实施例的基于数据库中间件的分区方法的再一个示意流程图。
如图3所示,该基于数据库中间件的分区方法还包括:
步骤S302,接收到数据库路由指令,确认数据库中的至少一个数据库节点发生数据阈值倾斜;
步骤S304,根据数据阈值的倾斜程度,新建数据库分片实例;
步骤S306,获取各个数据库节点中预存的维度字段;
步骤S308,根据节点重分布规则中的维度遍历规则,提取维度字段中的维度值,并根据维度值对维度字段进行排序;
步骤S310,提取维度字段中对应的数据阈值;
步骤S312,确认数据阈值和目标临界数值的大小关系;
步骤S314,如果数据阈值大于等于目标临界数值,根据目标临界数值,从数据阈值中调取目标临界数值,根据节点重分布规则中的调用规则,调取与数据阈值对应的维度字段;
步骤S316,如果数据阈值小于目标临界数值,根据目标临界数值与数据阈值的差值,从下一个排序后的维度字段对应的数据阈值中调取差值,根据节点重分布规则中的调用规则,调取与差值和数据阈值分别对应的维度字段;
步骤S318,将调取的维度字段分配到新建后的任一数据库分片实例中。
在该实施例中,通过节点重分布规则中的维度遍历规则以及根据调取的数据阈值与目标参数之间的连续比较关系,进一步保证调取的数据阈值与目标数据阈值相等,使各个数据库节点负载达到均衡,进一步可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能。
具体的路由重分布功能的实现过程是:当用户在数据库设置一条插入语句,即insert into person(shengfen,city)value(‘湖北’,‘武汉’),数据库中间件拦截到该条语句后,会按照内置的分片算法,将字段名和对应的属性值,即,{shengfen:‘湖北’,city:‘武汉’}以及数据库表person路由到dn2中,通过路由的数据库节点,能够合理表明此时的dn2数据库节点中存储了关于省份和城市的数据阈值,可以说明的是,dn2中存储的数据库表person内部数据存储量分布情况中,省份中不仅仅只包含湖北省,并且湖北省里面不仅仅包含武汉市;很明显,省份和城市之间属于二维分片字段。确定dn2此时节点的数据分布不再均衡,获取dn2中预存的维度字段,即,shengfen和city,并且假设此时的shengfen中‘湖北’属性值含有的数据阈值量为80,而‘湖北’字段里面包含的‘武汉’属性值含有的数据阈值量为8;根据节点重分布规则中的维度遍历规则,确定shengfen为一维、city为二维,根据维度值对维度字段进行排序,对shengfen中存储的属性按照维度进行拆分,提取到‘湖北’属性值对应含有的数据阈值量80,然后再次根据维度字段,从‘湖北’这一属性值中提取关于‘武汉’的数据阈值量8,从而实现控制多维分片字段,提取与维度字段对应的数据阈值量;根据dn2节点负载数据阈值300与目标临界数值100的大小关系,确定此时dn2节点负载数据需要分别转移100个负载节点数据阈值到dn3、dn4上;其中当提取‘湖北’这一属性值中提取关于‘武汉’的数据阈值量为8时,明显小于100,其差值相差为92;根据预设规则确定的差值,从下一个排序后的维度字段中调取对应的数据阈值,即,提取已存储的‘湖北’这一属性值中关于‘宜昌’的数据阈值量10,此时,调取的数据阈值量仍然不满足其差值,还需要再次从排序后的维度字段对应的数据阈值调取,直到调取后的数据阈值量能够满足其差值92;同时,也存在数据阈值大于目标临界数值的情况,根据目标临界数值,对需要调取的维度字段的进行拆分截取,使截取后的数据阈值与目标临界数值相等,从而保证分配后的dn3(一种命名方式)和dn4(一种命名方式)能够分别存储100个数据阈值量。再次根据预先设定的调用规则,分别调取与数据阈值量对应的维度字段,从而通过控制二维甚至n维分片字段对数据库中的某些数据进行重分布,实现节点负载达到均衡,可以有效的控制数据存储过程中的数据倾斜现象,提高大数据量场景下数据库的性能,提供了一种基于分布式数据库中间件系统数据存储扩容的算法,用以解决大数据量场景下造成的数据倾斜导致数据库性能低下的难题。
图4示出了本申请的一个实施例的基于数据库中间件的分区方法的另一个示意流程图。
如图4所示,该基于数据库中间件的分区方法还包括:
步骤S402,统计各个数据库节点内放置的维度字段和与维度字段对应的数据阈值;
步骤S404,从数据阈值中筛选出最小的数据阈值,并确定为目标临界数据;
步骤S406,根据目标临界数据,查找超过目标临界数据的至少一个数据库节点;
步骤S408,对各个超过的数据库节点内存放的数据阈值分别进行计算,以得到对应的数据阈值的倾斜程度;
步骤S410,获取倾斜程度的各个比例值,控制数据库中间件内预设的创建规则,为发生数据阈值倾斜的至少一个数据库节点,新建数据库分片实例。
在该实施例中,先筛选出最小的节点负载,然后以此为目标临界数值,作为计算倾斜程度的基准;为了使数据节点分布的负载数据阈值能够更为合理、均衡,需要对失衡的数据库节点负载的倾斜程度进行统计,具体的统计方式可以为,计算负载数据阈值与目标数据阈值的差值,进而以差值与目标数据阈值的比例形式,并获取倾斜程度的各个比例值,控制数据库中间件内预设的创建规则,具体包括:根据创建规则,统计各个比例值的数量;根据数量,确定数据库分片实例的扩建个数。可以根据系统需求进行任意维度的扩展,对于数据量较大需要进行数据库扩容的情景,扩展性好。
根据数据库节点负载的倾斜程度,比如,两个数据库节点分别命名为dn1(一种命名方式)和dn2(一种命名方式),假设dn1的节点负载数据阈值为100,dn2的节点负载数据阈值为300,则dn2与目标数据阈值100的比例值为2,则根据倾斜程度对应的比例值,扩建2个数据库分片实例,即命名为dn3和dn4;可以说明的是,扩建的数据库分片实例的缓存数据阈值为空。根据二次开发后设计的多维分片算法,对失衡的负载节点数据阈值进行重分布,使失衡超出的数据阈值按照分片字段的维度,路由到扩建后的数据库分片实例。
在该实施例中,对各个超过的数据库节点内存放的数据阈值分别进行计算,以得到对应的数据阈值的倾斜程度,具体包括:计算超过的数据阈值与目标临界数据的差值;将差值与目标临界数据进行比值计算,以确定倾斜程度。
在该实施例中,获取倾斜程度的各个比例值,控制数据库中间件内预设的创建规则,为发生数据阈值倾斜的至少一个数据库节点,新建数据库分片实例。
图5示出了本申请的一个实施例的基于数据库中间件的分区方法的另一个示意流程图。
如图5所示,接收到数据库路由指令之前,具体包括:
步骤S502,数据库中间件判断接收的指令语句中是否包含路由注解;
步骤S504,确认从控制语句中提取字段名和属性值、数据库表;
步骤S506,根据数据库中间件的分片算法,解析数据库表对应的数据库节点,并调取字段名和属性值,存储在解析后的对应的数据库节点。
实施例二:
本发明第二方面的实施例提供了一种基于数据库中间件的分区装置。
在该实施例中,包括存储器和处理器,存储器中存储有计算机程序,处理器用于执行计算机程序时实现如上述任一实施例中基于数据库中间件的分区方法的方法的步骤,在此不再赘述。
实施例三:
根据本发明的实施例,提出一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一实施例中提供的基于数据库中间件的分区方法,因此,该计算机可读存储介质包括如上述任一实施例中提供的基于数据库中间件的分区方法的全部有益效果,在此不再赘述。
在该实施例中,计算机可读存储介质,计算机程序被处理器执行时实现如上述任一技术方案的基于数据库中间件的分区方法的步骤,因此该计算机可读存储介质包括上述任一技术方案的基于数据库中间件的分区方法的全部有益效果。
具体地,计算机可读存储介质可以包括能够存储或传输信息的任何介质。计算机可读存储介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
在本申请中,术语“多个”则指两个或两个以上,除非另有明确的限定。术语“安装”、“相连”、“连接”、“固定”等术语均应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或一体地连接;“相连”可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
在本说明书的描述中,术语“一个实施例”、“一些实施例”、“具体实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或实例。而且,描述的具体特征、结构、材料或特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。