背景技术
随着科技的不断进步,智能卡应用已经逐渐成为人们生活中不可或缺的一部分。而随着智能卡应用的不断推广与普及,人们对智能卡的功能需求也越来越多样化。
智能卡硬件工艺的发展日新月异,智能卡的片上操作***的不断成熟与完善,使得应用于传统计算机上的数据库技术得以顺理成章的延伸到了智能卡操作***,为更好更丰富的移动数据服务提供了一个崭新的实现平台,而数据搜索技术,则是数据库技术中的核心之一。
在当前流行的数据库检索技术中,主要包含两类:二叉树索引(BTreeIndex)和位图索引(Bitmap Index,BMI)。位图索引主要用在联机数据分析方面,也就是数据仓库方面,目的是在加快查询速度是,节省存储空间。通常情况下,索引都要耗费比较大的存储空间,位图采用了压缩技术实现磁盘空间缩减。二叉树索引多用在高基数(即列的数据相异度大),位图多用在低基数列。所以当数据较为稀疏时多采用位图索引的检索方法。
在数据仓库的位图索引结构中,属性域中的每一个值v,有一个不同的位向量Bv。如果给定的属性域包含n个值,则位图索引中每项需要n位,即n位向量。如果数据表中给定行的属性值为v,则在位图索引的对应行,表示该值的位为1,该行的其它位为0。
如表1所示,位图索引的每一个属性域的值都可以用单位长度的0与1向量来表示,该向量为位图。位图的行数与表的行数相等(即等于记录数),位图中的位与表中的行一一对应。表1中属性Value有两个可选值,即A和B,A和B都可如表2所示用0与1向量来表示。
表1
RecordID |
Value |
R1 |
A |
R2 |
B |
R3 |
B |
R4 |
A |
表2
RecordID |
A |
B |
R1 |
1 |
0 |
R2 |
0 |
1 |
R3 |
0 |
1 |
R4 |
1 |
0 |
位图索引进行查询时主要进行二进制运算,适用于具有低基数特征的多维数据表。属性A的基数是指属性A的不同值的个数,一般将属性A的基数记为C(A),则属性A上的位图索引共有C(A)个位图。A上的位图索引记为BA,设i是A的一个值,BA中与i相对应的位图记为BA i。例如在表3中Sale(SN,GN,Num,Price)中查找销售员T销售产品S的数量,则位图索引可以表示为BSN TΛBCN S,位图索引对应位为1的那些数据记录即为所求。
表3
表字段 |
SN |
GN |
Num |
Price |
描述 |
销售员名称 |
产品名称 |
销售数量 |
销售价格 |
如图1和图2所示,现有技术在建立好可操作记录集即目标位串索引表以后,根据索引指令确定目标位串,然后将整个前导目标位串与多条后续目标位串进行向量逻辑运算,最后得出索引结果后进行条件测试即验证索引结果是否符合索引指令的要求,若条件测试正确则输出结果,完成索引操作。
在实现本发明过程中,本发明人发现现有的位图索引方法以及智能卡至少存在如下问题:
现有的位图运算是将整个前导目标位串与后续目标位串进行向量逻辑运算,然后得出相关结果并进行条件测试,需要对对应属性的整个索引向量进行两两运算,运算数据量大,若进行多值或复杂的联合查询,位图索引运算占用内存资源会更多,速度也会更慢。
具体实施方式
本发明实施例提供了一种位图索引方法,还提供了一种智能卡。
下面结合附图对本发明的实施例进行详细描述。
本发明实施例所提供的位图索引方法,解决了现有的位图索引方法运算数据量大,位图索引操作占用内存资源多的技术问题。
如图3和图4所示,本发明实施例位图索引方法,包括以下步骤:
S1、限定目标位串的有效查询区域;
本发明实施例中S1具体包括以下步骤:
a00、根据检索条件、记录分类、操作者权限、字典序的任意一项或组合确定有效查询区域;
a10、根据索引命令创建位图索引句柄,并利用该位图索引句柄限定各个目标位串在进行操作时的有效查询区域;
a20、申请与有效查询区域相匹配的内存空间,内存空间为缓冲区;
位图索引句柄包括有效查询区域的上界和下界,其中:
上界用于限定各个目标位串的查询区域的上界;
下界用于限定各个目标位串的查询区域的下界。
上界、下界以及申请与有效查询区域相匹配的内存空间的逻辑结构可以如下定义:
Struct BMIContext{
nLowest; //上界
nHighest; //下界
BMICTX[]; //缓冲区
};
当然,定义上界和下界的逻辑结构除了采用C语言以外,也可采用其他的编程语言例如Fortran、Pasca1、Cobo1、C++、Basic、Ada、Java、C#等用于定义,此外上界和下界的类型也不限于整型(int),缓冲区的类型也不限于字符型(char)。
其中,上界和下界用来设定可操作记录集上的一个子集即目标位串的有效查询区域,如果不进行特殊指定,则缺省为记录全集即所有完整的目标位串。当然,仅仅定义、创建上界或下界也可以用来设定可操作记录集上的一个子集即目标位串的有效查询区域。
上界和下界可以根据实际应用中位图索引操作的需要进行调整,特别是针对数据库中已经有序的原始记录集,例如:数据库中的记录集已经根据某一数据项的特性进行了分类排序,如背景技术中所提到的在基本表中查找销售员T销售产品S的数量的例子,若数据库中的数据记录已经按照销售人员的名称进行了分类排序,在实际应用检索中,检索条件中包含销售人员名称时,可以直接根据销售人员名称确定检索的有效查询区域,据此确定位图索引句柄的上界和下界,并且根据有效查询区域包含的记录条数申请相应的内存空间作为缓冲区。缓冲区对应大小为上界和下界所确定,缓冲区一方面可以在位图索引操作过程中缓存当前***作的目标位串,减少每次运算时频繁申请内存空间的操作次数,利于加快运算,另一方面能够保存位图索引操作的中间结果,为应用的实现即索引操作结果的调用直接提供公共的结果集查询空间。
S2、如图4所示,在目标位串的有效查询区域进行位图索引操作,具体包括以下步骤:
b10、读取一个目标位串的有效查询区间到申请的内存空间,并进行压缩,具体包括以下步骤:
c10、目标位串的有效查询区域进行压缩:
c101、检查目标位串的有效查询区域的头部和/或尾部是否数据记录全为0;
c102、若检查目标位串的有效查询区域的头部和/或尾部数据记录全为0,则将目标位串的有效查询区域的上界和/或下界调整到数据记录为1的位置,并对应修改句柄中上界和/或下界的值。
确定了有效查询区域以后,可以进一步压缩检索的范围,更大程度的缩小位图索引操作的目标范围,提高运算速率。
当然,此步骤在实际实施中,也可以不对读入内存的有效查询区域进行压缩,因为此时的数据尚未进行运算,即使不进行压缩,对提高运算的速度总体影响也不大。
b20、逐个读取未操作的目标位串的有效查询区域与内存空间中的目标位串进行逻辑运算,并将运算结果保存在内存空间,具体包括以下步骤。
d201、从外存中读入一条未操作的目标位串有效查询区域,并将该条目标位串与保存在内存中的位串进行向量逻辑运算,保存运算结果在内存空间中;
此时压缩后的目标位串的有效查询区域即为前导目标位串,从外存中所读入一条未操作的目标位串即为后续目标位串。
d202、将每次逻辑运算后存储在内存空间的位串进行压缩,具体包括以下步骤:
e1、检查位串的头部和/或尾部是否数据记录全为0;
e2、若位串的头部和/或尾部数据记录全为0,则将位串的上界和/或下界调整到数据记录为1的位置,并对应修改句柄中上界和/或下界的值。
由于每次运算后位图索引的范围都在趋近索引结果,对中间运算所得到的目标位串进行压缩,进一步压缩了位图索引操作的目标范围。当然,此压缩步骤也可以根据实际情况决定是否执行。
重复步骤b20直到外存中所有未操作的目标位串都参与运算为止。
本发明实施例中在进行数据检索的位图索引操作中,先限定了目标位串的有效查询区域,从而为后续的索引操作提供了有界访问控制,只需要在目标位串的有效查询区域进行位图索引操作即可得到查询结果,而无须在整个目标位串进行位图索引操作,缩小了实际的位图索引范围,减少了位图索引操作数据量,所以解决了现有技术运算数据量大,位图索引操作占用内存资源多的技术问题,同时加快了索引的速度。
S3、调用保存到内存空间中的最终结果;调用保存到内存空间中的最终结果的方法,包括:分页浏览、关联对比以及数据输出。
分页浏览指将最终结果通过在显示屏幕上逐页显示的方式供操作人员查看;
关联对比指最终结果参与其他运算操作,例如结果有效性验证、判断结果是否符合索引指令的条件测试;
数据输出指将最终结果从内存空间中输出到调用指令所指定的位置。
S4、释放位图索引句柄以及所述内存空间;判断位图索引操作是否已经完成;若是,则调用相应函数释放位图索引句柄,判断操作结果是否利用完毕,若是,则释放内存空间。上述步骤中所申请的内存空间以及位图索引句柄必须进行释放,否则将一直将占用***的内存,影响***运算速度。
本发明实施例所提供的一种智能卡,解决了现有技术中的智能卡操作***位图索引操作数据量大,位图索引操作占用内存资源多的技术问题。
如图6和图7所示,本实施例的智能卡的操作***设有位图索引单元,位图索引单元包括:限定模块、索引操作模块、调用模块以及释放模块,其中:
限定模块,用于限定目标位串的有效查询区域,可以根据检索条件、记录分类、操作者权限、字典序的任意一项或组合确定有效查询区域;限定模块包括创建句柄模块和申请内存模块,创建句柄模块用于定义、创建位图索引句柄,并通过位图索引句柄来限定目标位串在进行操作时的有效查询区域;位图索引句柄包括有效查询区域的上界和下界,其中:上界用于限定各个目标位串的查询区域的上界;下界用于限定各个目标位串的查询区域的下界。在创建句柄模块创建位图索引句柄后,申请内存模块用于申请与有效查询区域相匹配的内存空间。本发明实施例中限定模块,也可根据索引命令创建位图索引句柄,并利用该位图索引句柄限定各个目标位串在进行操作时的有效查询区域。
索引操作模块,用于在目标位串的有效查询区域进行位图索引操作;索引操作模块包括:读取模块、压缩模块和运算模块,其中:读取模块用于读取一个目标位串的有效查询区间到申请的内存空间;运算模块用于逐个读取未操作的目标位串的有效查询区域与内存空间中的目标位串进行逻辑运算,并将运算结果保存在内存空间。读取模块与运算模块循环操作直到所有未操作的目标位串全部参与运算并得到结果为止。
调用模块,用于调用保存到内存空间中的最终结果,调用模块包括:分页浏览模块、关联对比模块以及数据输出模块;分页浏览模块,用于将最终结果通过在显示屏幕上逐页显示的方式供操作人员查看;关联对比模块,用于用最终结果参与其他运算操作,例如结果有效性验证、判断结果是否符合索引指令的条件测试;数据输出模块,用于将最终结果从内存空间中输出到调用指令所指定的位置。
压缩模块,用于对内存空间中的位串进行压缩,压缩模块包括:检查模块和调整模块,其中:
检查模块,用于检查目标位串的有效查询区域或者运算模块运算所得到的位串即中间结果的头部和/或尾部是否存在部分连续数据记录全为0;
若目标位串的有效查询区域的或者运算模块运算所得到的位串的头部和/或尾部存在部分连续数据记录全为0,则调整模块用于将目标位串的有效查询区域的头部第一条记录和/或尾部的最后一条记录调整到数据记录为1的位置,对应调整位图索引句柄的上界和/或下界。
释放模块,用于在操作结果使用后,释放位图索引句柄以及内存空间。
本发明实施例中智能卡的操作***中的位图索引单元在进行数据检索的位图索引操作时,先通过限定模块限定目标位串的有效查询区域,从而为后续的索引操作提供了有界访问控制,只需要在目标位串的有效查询区域进行位图索引操作即可得到查询结果,而无须在整个目标位串进行位图索引操作,所以缩小了实际的位图索引范围,减少了位图索引操作数据量,加快了索引的速度,解决了现有技术中的智能卡操作***位图索引操作数据量大,位图索引操作占用内存资源多的技术问题。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。