本发明涉及区块链领域,特别涉及一种用于区块链数据上链的多字段组合索引取数的优化算法。
背景技术:
关系数据库系统由于其结构化的数据管理能力和标准化sql接口,已广泛应用于各个领域和行业应用。利用数据库的数据导出工具可以方便地将数据导出为字节流文件和数据库系统支持的特定格式文件。数据库系统的索引功能为记录级的查找和定位提供了极大的方便,能够快速地进行单条记录的查找和定位,以及根据该单字段值的范围选择,且在多线程处理的条件,各个线程可以根据该索引字段的取值,在数据范围相互隔离的区间内进行并行处理和分析工作。
但对于多字段组合唯一索引的情况,在有效利用索引的前提下,如何精确地划分各个隔离的数据范围,实现最大化并行处理或者最小化读取批次这二个目标,传统的做法通常是利于单个索引字段或部分索引来定位和划分,该方法的好处是实现简单,但弊端是一方面不能充分组合索引的性能造成读取效率下降,另外由于单字段或者部分字段的取值空间不能反映组合索引全字段的取值空间,造成各个线程的处理数据范围存在重叠情况,也即存在数据重复读取和重复处理的情况,这样增加了处理的时间和资源开销,另外这种重复处理还会造成功能上的错误,为此,我们提出一种用于区块链数据上链的多字段组合索引取数的优化算法来解决上述问题。
技术实现要素:
本发明实现了一种新颖的组合索引并行化读取和处理的方法,可以服务于最大化并行处理和最小化读取批次二个目标,实现最高效率的读取和处理效率,同时保证数据范围的非重叠性,以确保应用功能上的正确性。
本发明的上述技术目的是通过以下技术方案得以实现的:
一种用于区块链数据上链的多字段组合索引取数的优化算法,操作步骤如下:
s1.通过数据库系统提供的sql命令或其内嵌工具,获取数据表的结构;
s2.提取其组合索引,如果存在多个组合索引,则任意选取其中一个;(组合索引为读取数据的标识,取其中一个进行操作)
s3.对组合索引中的每一个字段的值进行distinct去重操作计算取出的组合索引各个字段值的唯一值计数,形式化表示为count(distinct());
s4.对组合索引内数值进行排序,排序手法采用order;
s5.对非递减式排序进行标识,找出断点的位置;
s6.按照断点对数据进行分段,根据分段进行读取数据,保证读取数据的完整性。
进一步的,步骤s4中:a.2对步骤4.a.1的组合索引的每个字段,执行如下操作:
扫描字段的全部值,寻找断点,也即不满足非递减顺序的,以步骤4.a.1的排序结果为例,存在蓝色标志的字段值即为该字段的断点。
全部处理后,结果如下:
第一个排序字段,也即f3,不存在断点,因为其所有取值都是满足非递减顺序的,因此在实际操作和算法实现过程中,可以跳过对其的处理。
a.3以步骤a.2的结果进行范围切分:
a.3.1顺序扫描组合索引的每一行,直至遇到包含蓝色标志列的行;
a.3.2将包含蓝色标志列的上一行标志为绿色,作为区间的下边界;
a.3.3从包含蓝色标志列的行继续扫描,直至遇到下一个包含蓝色标志列的行;
a.3.4以步骤a.3.3为参照,跳到步骤a.3.2进行循环,直至全部数据行扫描完毕,结果如下:
a.4标注为绿色的行即为范围区块的下边界,上边界为白色行或其自身,也即区块范围内不能包含超过1行的绿色标注行。
进一步的,最终形成的数据区块上下边界为:
上边界,下边界
{[1,1,1],[1,1,2]}
{[1,2,1],[1,2,1]}
{[2,1,1],[2,1,2]}
{[2,2,1],[2,2,1]}
{[3,1,1],[3,1,2]}
{[3,2,1],[3,2,1]}
{[4,1,2],[4,1,2]}
a.5步骤a.4的结果即划定了数据处理的区间范围,任何跨越两个区间的取数则会造成数据获取不全或丢失的情况。
进一步的,b.1根据步骤3计算出的组合索引各字段的唯一值计数,由小到大排列,以步骤3的数据为例,即f1、f2、f3,执行如下操作:
orderbyf1asc,f2asc,f3asc
获得排序结果如下:
f1,f2,f3
{1,1,1}
{1,1,2}
{1,1,3}
{1,2,1}
{1,2,2}
{1,2,3}
{1,2,4}
{2,1,1}
{2,1,2}
{2,1,3}
b.2对步骤b.1的组合索引的每个字段,执行如下操作:
扫描字段的全部值,寻找断点,也即不满足非递减顺序的,以步骤b.1的排序结果为例,存在蓝色标志的字段值即为该字段的断点。全部处理后,结果如下:
第一个排序字段,也即f1,不存在断点,因为其所有取值都是满足非递减顺序的,因此在实际操作和算法实现过程中,可以跳过对其的处理。
进一步的,b.3以步骤b.2的结果进行范围切分:
b.3.1顺序扫描组合索引的每一行,直至遇到包含蓝色标志列的行;
b.3.2将包含蓝色标志列的上一行标志为绿色,作为区间的下边界;
b.3.3从包含蓝色标志列的行继续扫描,直至遇到下一个包含蓝色标志列的行;
b.3.4以步骤b.3.3为参照,跳到步骤b.3.2进行循环,直至全部数据行扫描完毕,结果如下:
b.4标注为绿色的行即为范围区块的下边界,上边界为白色行或其自身,也即区块范围内不能包含超过1行的绿色标注行。
进一步的,最终形成的数据区块上下边界为:
上边界,下边界
{[1,1,1],[1,1,3]}
{[1,2,1],[1,2,4]}
{[2,1,1],[2,1,3]}
b.5步骤b.4的结果即划定了数据处理的区间范围,任何跨越两个区间的取数则会造成数据获取不全或丢失的情况。
进一步的,考虑一种特殊情况,也即不存在蓝色标注列的情况,以下列数据为例:
f1,f2,f3
{1,1,1}
{2,2,2}
{3,3,3}
{3,4,5}
在这种情况下,区间范围的划分可以为1个区间到n个区间,n的取值等于行数,此时等价于各个字段值等于取数。
1个区间:
上边界,下边界
{[1,1,1],[3,4,5]}
2个区间,共3种情况:
2.1:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[3,4,5]}
2.2:
上边界,下边界
{[1,1,1],[2,2,2]}
{[3,3,3],[3,4,5]}
2.3:
上边界,下边界
{[1,1,1],[3,3,3]}
{[3,4,5],[3,4,5]}
3个区间,共3种情况:
3.1:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[2,2,2]}
{[3,3,3],[3,4,5]}
3.2:
上边界,下边界
{[1,1,1],[2,2,2]}
{[3,3,3],[3,3,3]}
{[3,4,5],[3,4,5]}
3.3:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[3,3,3]}
{[3,4,5],[3,4,5]}
4个区间:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[2,2,2]}
{[3,3,3],[3,3,3]}
{[3,4,5],[3,4,5]}
6.上述形式化规则可以扩展到任意多个组合主键/索引的情况。
综上所述,本发明具有以下有益效果:
本发明实现了一种新颖的组合索引并行化读取和处理的方法,但对于多字段组合唯一索引的情况,在有效利用索引的前提下,该方法的好处是一方面充分组合索引的性能提升读取效率,另外服务于最大化并行处理和最小化读取批次二个目标,实现最高效率的读取和处理效率,同时保证数据范围的非重叠性,以确保应用功能上的正确性。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
实施例1
本发明较优实施例中一种用于区块链数据上链的多字段组合索引取数的优化算法,操作步骤如下:
s1.通过数据库系统提供的sql命令或其内嵌工具,获取数据表的结构;
s2.提取其组合索引,如果存在多个组合索引,则任意选取其中一个;(组合索引为读取数据的标识,取其中一个进行操作)
s3.对组合索引中的每一个字段的值进行distinct去重操作计算取出的组合索引各个字段值的唯一值计数,形式化表示为count(distinct());
s4.对组合索引内数值进行排序,排序手法采用order;
s5.对非递减式排序进行标识,找出断点的位置;
s6.按照断点对数据进行分段,根据分段进行读取数据,保证读取数据的完整性。
步骤s4中:a.2对步骤4.a.1的组合索引的每个字段,执行如下操作:
扫描字段的全部值,寻找断点,也即不满足非递减顺序的,以步骤4.a.1的排序结果为例,存在蓝色标志的字段值即为该字段的断点。全部处理后,结果如下:
第一个排序字段,也即f3,不存在断点,因为其所有取值都是满足非递减顺序的,因此在实际操作和算法实现过程中,可以跳过对其的处理。
a.3以步骤a.2的结果进行范围切分:
a.3.1顺序扫描组合索引的每一行,直至遇到包含蓝色标志列的行;
a.3.2将包含蓝色标志列的上一行标志为绿色,作为区间的下边界;
a.3.3从包含蓝色标志列的行继续扫描,直至遇到下一个包含蓝色标志列的行;
a.3.4以步骤a.3.3为参照,跳到步骤a.3.2进行循环,直至全部数据行扫描完毕,结果如下:
a.4标注为绿色的行即为范围区块的下边界,上边界为白色行或其自身,也即区块范围内不能包含超过1行的绿色标注行。
最终形成的数据区块上下边界为:
上边界,下边界
{[1,1,1],[1,1,2]}
{[1,2,1],[1,2,1]}
{[2,1,1],[2,1,2]}
{[2,2,1],[2,2,1]}
{[3,1,1],[3,1,2]}
{[3,2,1],[3,2,1]}
{[4,1,2],[4,1,2]}
a.5步骤a.4的结果即划定了数据处理的区间范围,任何跨越两个区间的取数则会造成数据获取不全或丢失的情况。
b.1根据步骤3计算出的组合索引各字段的唯一值计数,由小到大排列,以步骤3的数据为例,即f1、f2、f3,执行如下操作:
orderbyf1asc,f2asc,f3asc
获得排序结果如下:
f1,f2,f3
{1,1,1}
{1,1,2}
{1,1,3}
{1,2,1}
{1,2,2}
{1,2,3}
{1,2,4}
{2,1,1}
{2,1,2}
{2,1,3}
b.2对步骤b.1的组合索引的每个字段,执行如下操作:
扫描字段的全部值,寻找断点,也即不满足非递减顺序的,以步骤b.1的排序结果为例,存在蓝色标志的字段值即为该字段的断点。全部处理后,结果如下:
第一个排序字段,也即f1,不存在断点,因为其所有取值都是满足非递减顺序的,因此在实际操作和算法实现过程中,可以跳过对其的处理。
b.3以步骤b.2的结果进行范围切分:
b.3.1顺序扫描组合索引的每一行,直至遇到包含蓝色标志列的行;
b.3.2将包含蓝色标志列的上一行标志为绿色,作为区间的下边界;
b.3.3从包含蓝色标志列的行继续扫描,直至遇到下一个包含蓝色标志列的行;
b.3.4以步骤b.3.3为参照,跳到步骤b.3.2进行循环,直至全部数据行扫描完毕,结果如下:
b.4标注为绿色的行即为范围区块的下边界,上边界为白色行或其自身,也即区块范围内不能包含超过1行的绿色标注行。
最终形成的数据区块上下边界为:
上边界,下边界
{[1,1,1],[1,1,3]}
{[1,2,1],[1,2,4]}
{[2,1,1],[2,1,3]}
b.5步骤b.4的结果即划定了数据处理的区间范围,任何跨越两个区间的取数则会造成数据获取不全或丢失的情况。
实施例2
本发明较优实施例中一种用于区块链数据上链的多字段组合索引取数的优化算法,考虑一种特殊情况,也即不存在蓝色标注列的情况,以下列数据为例:
f1,f2,f3
{1,1,1}
{2,2,2}
{3,3,3}
{3,4,5}
在这种情况下,区间范围的划分可以为1个区间到n个区间,n的取值等于行数,此时等价于各个字段值等于取数。
1个区间:
上边界,下边界
{[1,1,1],[3,4,5]}
2个区间,共3种情况:
2.1:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[3,4,5]}
2.2:
上边界,下边界
{[1,1,1],[2,2,2]}
{[3,3,3],[3,4,5]}
2.3:
上边界,下边界
{[1,1,1],[3,3,3]}
{[3,4,5],[3,4,5]}
3个区间,共3种情况:
3.1:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[2,2,2]}
{[3,3,3],[3,4,5]}
3.2:
上边界,下边界
{[1,1,1],[2,2,2]}
{[3,3,3],[3,3,3]}
{[3,4,5],[3,4,5]}
3.3:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[3,3,3]}
{[3,4,5],[3,4,5]}
4个区间:
上边界,下边界
{[1,1,1],[1,1,1]}
{[2,2,2],[2,2,2]}
{[3,3,3],[3,3,3]}
{[3,4,5],[3,4,5]}
6.上述形式化规则可以扩展到任意多个组合主键/索引的情况。
(distinct:对字段值数组进行去重操作,比如{1,1,2,3,3},经过distinct操作后,变为{1,2,3};
count:统计字段值数组的元素个数,count({1,2,3})=3.
以组合索引{f1,f2,f3}为例,其取值如下:
f1,f2,f3
{1,1,1}
{1,1,2}
{1,1,3}
{1,2,1}
{1,2,2}
{1,2,3}
{1,2,4}
{2,1,1}
{2,1,2}
{2,1,3}
f1的唯一值计数为2,分别为1、2;
f2的唯一值计数为2,分别为1、2;
f3的唯一值计数为4,分别为1、2、3、4;
s4.根据二类优化的目标:
a:最大化并行处理
b:最小化读取批次、
4.a.1根据步骤3计算出的组合索引各字段的唯一值计数,由大到小排列,以步骤3的数据为例,即f3、f1、f2,执行如下操作:
orderbyf3asc,f1asc,f2asc
获得排序结果如下:
f3,f1,f2
{1,1,1}
{1,1,2}
{1,2,1}
{2,1,1}
{2,1,2}
{2,2,1}
{3,1,1}
{3,1,2}
{3,2,1}
{4,1,2}
orderby:对字段值进行排序操作;
asc:与orderby组合使用,即进行升序排序,比如f1={1,3,2,0},经过orderbyf1asc操作后,变为{0,1,2,3};
orderbyf2asc,f1asc:首先根据f1的值进行升序排序,如果f1的值相同,则根据f2的值进行升序排序。
综上所述:本发明实现了一种新颖的组合索引并行化读取和处理的方法,可以服务于最大化并行处理和最小化读取批次二个目标,实现最高效率的读取和处理效率,同时保证数据范围的非重叠性,以确保应用功能上的正确性。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。