联机事务处理中的数据处理方法和装置的制作方法

文档序号:6462119阅读:139来源:国知局

专利名称::联机事务处理中的数据处理方法和装置的制作方法
技术领域
:本发明涉及联机事务处理领域,尤其涉及一种联机事务处理中的数据处理方法及装置,以及,一种联机事务处理中的数据查询方法及装置。
背景技术
:联机事务处理(On-LineTransactionProcessing,OLTP)是指利用计算机网络,将分布于不同地理位置的业务处理计算机设备或网络与业务管理中心网络连接,以便于在任何一个网络节点上都可以进^f亍统一、实时的业务处理活动或客户服务。OLTP是传统的关系型数据库的主要应用,在OLTP环境下,由于业务的高速发展,在数据库中,有一些业务核心数据表的数据量极大,达到亿级以上的数目,并且由于OLTP的并发事务处理特征,导致这些大数据量数据表的并发访问量极高,因而当维护这些数据表时,通常都要选择在业务低峰期,如在深夜进行维护操作,操作的内容包括添加字段,创建索引,重建索引等等。尽管已经选择了一个业务低峰的窗口,但还是会发生一些问题,例如,在ORACLE数据库中,引起相关结构化查询语言(StructuredQuevyLanguage,SQL)的语句执行计划发生变更;创建索引或重建索引时占用大量的临时表空间(temporarytablespace);或者进4亍凄^U居库定义i吾言(DataDefinitionLanguage,DDL)操作时阻塞大量的会话,而这些风险都会给核心数据库带来灾难性问题,如数据库响应应用服务器请求緩慢,进而导致应用服务器响应客户的请求緩慢,无法为客户提供稳定的服务。现有技术中,另一个很客观的现实是随着企业OLTP业务的高速发展,高并发访问的一些业务核心数据表集中在单台数据库上,这些单台数据库通常都是使用一台存储的,即使是高端存储,所能承受的每秒输入/输出操作(Input/OutputPerSecond,IOPS)的峰值也极其有限,因此存储很容易成为整个数据库系统的瓶颈(bottleneck),造成数据库读写数据变慢的结果;而且在实际使用高端存储的过程中,随着IOPS的增长,存储内部的緩存(Cache)命中率也会越来越低,进一步加重了存储的磁盘读写压力,数据库响应应用服务器的请求时间越来越长,进而影响到企业业务的正常运行。当前在OLTP的应用中,一般存在两种数据处理方法,第一种为把业务核心数据全部放在一张普通表里,第二种为把业务核心数据全部放在ORACLE分区表里。采用第一种方法时,因为业务核心数据都放在一张普通表里,所以在进行DDL操作,比如添加字段时,将引起所有与此张普通表相关的SQL语句产生硬解析,在高并发的OLTP应用中,导致发生大面积的librarycachepin,librarycacheloadlock等4寺,影响到所有会话对这张表凄t据的访问;同时,如果统计数据不准确,硬解析产生错误的SQL执行计划,那么所有运行此SQL的会话都将受到此影响,导致系统不可承受的高压力;另外,在创建或重建索引时,因为数据量庞大,导致DDL操作时间过长,有较高的风险性,而且在操作的过程中,通常会占用大量临时表空间用于排序,对数据库性能影响较大。采用第二种方法时,在现有的hash(哈希)分区方式中,Oracle为每个数据表都进行了分区,其中每一个分区(Partition)就是一个段(segment),在这些l殳中可以创建本地索引(localindex);当外界查询数据时,Oracle首先根据分区条件进行hash运算,从而可以确定要访问的分区,进而在这些分区中使用本地索引以查询数据。第二种方法的结构示意图可以参考图1,包括应用层和Omcle数据库中的分区表,对于外界应用来说,当用户向Oracle^是交SQL时,应用并不需要知道所访问的数据在哪个分区或者在哪几个分区上,只需要知道这些分区的上层整体对象,即一个表名即可。所以在图1中,分区(即是partition1,partition2,...,partitionN)对于应用来说是透明的,应用层访问这些数据时,只需要一个整体的对象即可。然而,采用第二种方法存在以下缺陷首先,当对业务核心数据表进行DDL操作时,将影响对此数据表访问的所有会话,阻塞现象严重,风险依然很高,并且如果DDL操作时统计数据不准确,硬解析产生错误的SQL执行计划,那么所有运行此SQL的会话都将受到此响,导致系统不可承受的高压力;再者,Oracle分区表的hash算法是一个黑盒子,所有数据的访问都需要经过这条唯一的路径,对于高并发的OLTP来说,这类核心表的访问又是才及其频繁的,所以进行此hash运算,也将消耗相当量的数据库服务器的CPU;此外,Oracle的分区表不能跨数据库,当存储成为整个系统的瓶颈时,数据的水平扩展性较差。
发明内容本发明所要解决的技术问题是提供联机事务处理中的数据处理方法,以对企业的核心数据表进行数据拆分,实现将核心数据表拆分为一个或多个子表的功能。本发明的另一个目的是提供了联机事务处理中的数据查询方法,以查询进行拆分后的所述子表,快速有效地获取目标数据。本发明还提供了联机事务处理中的数据处理、查询装置,以实现上述方法的功能,完成对企业核心数据表的处理和查询。为解决上述技术问题,本发明实施例提供了一种联机事务处理中的数据处理方法,包括根据业务特征确定目标数据表的数据分割字段;依据所述数据分割字段将所述目标数据表拆分成多个子表。优选的,还包括将所述子表存储至一个或多个数据库中。优选的,所述数据表拆分步骤包括读取所述目标数据表中某行记录的数据分割字段的值;将所述数据分割字段的值按照预设的子表数量进行取模运算,并依据所述运算结果定位当前转存子表;将所述目标数据表的记录转存至所述子表中。优选的,所述子表包括一级子表和二级子表,所述数据表拆分步骤包括读取所述目标数据表中某行记录的数据分割字段的值;将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;将所述记录转存至所述一级子表中;若所述一级子表的数据量满足一定阈值,则读取所述一级子表中某行记录的数据分割字段的值;将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;将所述一级子表的记录转存至所述二级子表中。优选的,所述数据分割字段为数字型字段或字符型字段,所述数据表拆分步骤包括读取所述目标数据表中数据分割字段的值;将所述数据分割字段的值转化为十六进制,根据首字符定位当前转存的子表;将相应的值转存至所述子表中。优选的,所述数据分割字段包括用户数据标识字段。本发明实施例还提供了一种联机事务处理中的数据查询方法,包括定位查询数据所在的子表,所述子表为依据所述数据分割字段对目标数据表进行拆分获得,所述数据分割字段为根据业务特征在目标数据表中确定获得,所述查询数据为对应所述数据分割字段的值;在所述子表中查找满足所述查询数据的相关记录。优选的,所述定位步骤包括将所述查询数据按照预设的子表数量进行取模运算;依据所述运算结果定位子表。本发明实施例还提供了一种联机事务处理中的数据处理装置,包括确定单元,用于根据业务特征确定目标数据表的数据分割字段;拆分单元,用于依据所述数据分割字段将所述目标数据表拆分成多个子表。优选的,还包括存储单元,用于将所述子表存储至一个或多个数据库中。优选的,所述拆分单元包括第一读取子单元,用于读取所述目标数据表中某行记录的数据分割字段的值;第一运算子单元,用于将所述数据分割字段的值按照预设的子表数量进行取模运算,并依据所述运算结果定位当前转存子表;第一转存子单元,用于将所述目标数据表的记录转存至所述子表中。优选的,所述子表包括一级子表和二级子表,所述拆分单元包括第一读取子单元,用于读取所述目标数据表中某行记录的数据分割字段的值;第二运算子单元,用于将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;第二转存子单元,用于将所述记录转存至所述一级子表中;第二读取子单元,用于在所述一级子表的数据量满足一定阈值时,读取所述一级子表中某行记录的数据分割字段的值;第三运算子单元,用于将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;第三转存子单元,用于将所述一级子表的记录转存至所述二级子表中。优选的,所述数据分割字段为数字型字段或字符型字段,所述拆分单元包括第三读取子单元,用于读取所述目标数据表中数据分割字段的值;转化子单元,用于将数据分割字段的值转化为十六进制,并根据首字符定位当前转存的子表;第四转存子单元,用于将相应的值转存至所述子表中。优选的,所述拆分单元位于数据库层。本发明实施例还提供了一种联机事务处理中的数据查询装置,包括定位单元,用于定位查询数据所在的子表,所述子表为拆分单元依据所述数据分割字段对目标数据表进行拆分获得,所述数据分割字段为根据业务特征在目标数据表中确定获得,所述查询数据为对应所述数据分割字段的值;查找单元,用于在所述子表中查找满足所述查询数据的相关记录。优选的,所述定位单元包括第四运算子单元,用于将所述查询数据按照预设的子表数量进行取模运算;接收子单元,用于接收所述运算结果并对子表进行定位。优选的,所述定位单元位于应用层。与现有技术相比,本发明具有以下优点本发明通过根据业务特征确定目标数据表的数据分割字段,然后依据所述数据分割字段将所述目标数据表拆分到多个子表中,从而实现对企业的核心数据表进行拆分子表的功能,因为经过拆分的子表数据量较小,所以在进行DDL操作时临时表空间占用较少,阻塞的会话也非常少;并且对此类业务核心数据表进行常用维护的操作时间也大大缩短,使得系统的承受压力明显降低;此外,本发明在进行定位时取模hash算法可以在应用层完成,减少了数据库层数据库服务器CPU消耗,当发生执行计划变更时,可以有效降低系统承受的压力,提高数据库中业务核心数据表的可维护性和可管理性。图1是现有技术hash分区的系统结构示意图2是本发明的联机事务处理中的数据处理方法实施例1的流程图;图3是本发明的联机事务处理中的数据处理方法实施例2的流程图;图4是本发明的联机事务处理中的数据处理方法实施例3的流程图;图5是本发明的联机事务处理中的数据处理方法实施例4的流程图;图6是本发明的联机事务处理中的数据处理装置实施例的结构框图;图7是本发明的联机事务处理中的数据查询方法实施例的流程图;图8是本发明的联机事务处理中的数据查询装置实施例的结构框图。具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。本发明可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。本发明实施例的核心构思之一在于,根据业务特征确定目标数据表的数据分割字段;并依据所述数据分割字段将所述目标数据表拆分成多个子表;然后可以将所述子表存储至一个或多个数据库中;经过本发明的方法进行数据拆分后的每一个子表,数据量都只有未拆分时原目标数据表数据量的1/n(n为拆分后的子表个数),并且并发访问量也只有原来的1/n,所以当对所述子表进行常用维护时,不仅操作时间可以缩短,而且可以大大减少阻塞的会话,从而降低了系统承受的压力,提高了数据库中业务核心数据表的可维护性和可管理性。参考图2,示出了本发明的一种联机事务处理中的数据处理方法实施例1的流程图,可以包括以下步骤步骤201:根据业务特征确定目标数据表的数据分割字段;步骤202:依据所述数据分割字段将所述目标数据表拆分成多个子表。因为本发明中对数据进行处理的目的就是将一张核心业务数据表拆分为一系列的子表,因此在进行拆分前一个重要的准备工作就是确定数据分割字段,以确保以后的数据访问大多数时候都可以只限于一个子表中。在本实施例中,根据业务特征确定数据分割字段的方法可以由本领域技术人员根据实际需要任意选择。如用户数据标识字段、地理位置信息等。具体地,所述数据标识字段可以包括用户数字ID、用户字符串ID等可以唯一标识用户数据的字段。例如,假设某个购物网站包括商品表,卖家发布的商品都会在这个商品表里,与商品表相关的,包括如下业务功能(1)出售中的商品;(2)仓库里的商品;(3)搜索自己的商品;(4)商品信息展示页面,展示单件商品信息(商品ID)。根据上述业务功能所体现的业务特征,即可以确定相应的数据分割字段为卖家ID。或者,假设某个考试系统的服务器只能支持500个人在线考试,然而目前有10000个人要同时参加考试,在这种情况下,则可以按用户来分库,根据该业务特征,确定相应的数据分割字段为用户编号。优选的,还可以将用户数据标识字段与其它特征字段组合作为数据分割字段,例如,将用户ID与地理位置信息组合等。在实际应用中,对所述目标数据表进行数据拆分后,优选的,还可以包括步骤将所述子表存储至一个或多个数据库中。当然,子表不仅可以存储至一个数据库中,也可以存储至多个数据库中,因此,存储不会成为整个系统的瓶颈,从而可以有效地减轻系统的压力。需要说明的是,本发明中介绍的实施例都是只针对数字分割字段的方法,如果确定后的数据分割字段为字符型或其它类型,情况与本发明相类似,都可以采用本发明的方法进行数据处理,本发明对此无需作出限制。参考图3,示出了本发明的联机事务处理中的数据处理方法实施例2流程图,所述数据处理方法可以包括步骤301:根据业务特征确定目标数据表的数据分割字段;步骤302:依据所述数据分割字段将所述目标数据表拆分成多个子表。优选的,所述步骤302可以包括以下子步骤子步骤3021:读取所述目标数据表中某行记录的数据分割字段的值;子步骤3022:将所述数据分割字段的值按照预设的子表数量进行取模hash运算,并依据所述运算结果定位当前转存子表;子步骤3023:将所述目标数据表的记录转存至所述子表中。以下通过一个具体例子来说明本实施例々支i殳目标数据表的定义为test(idvarchar2(32),useridnumber,…),在数据库层确定的数据分割字段为userid字段;应用本实施例的数据处理过程为Al、移动游标到所述目标数据表的某行记录时,如果游标不为空,则读取此行记录字段userid的值;本步骤的目的是根据userid字段值来拆分目标数据表test,并读取到该数据分割字段userid的值,为下一步将test表的数据转存至新的子表中做准备;A2、将所述userid值取模n+l,计算出结果v一flag,所述v—flag的计算方法为v—flag=mod(#userid,n+1);其中,n+1为预i殳的子表凄史量;在本例中可以依据目标数据表数据量的大小预先估算拆分子表的数量。本发明所采用的取模算法,可以理解为,把具有相同模值的数据hash到一个子表里,这个模值不唯一,在实际中,即可以把具有相同特征的一类数据hash到一个子表里。A3、根据v—flag的值,将此行记录数据转存至新的子表。目标数据表test中一行记录字段的转存步骤完成后,可以循环读取原test表中的记录数据,直至所述记录数据为空,表明test表中所有需要拆分的数据已经全部转存完毕。在经过上述方法将数据水平分割成多个子表时,由于分割后的子表数据量较小,因此创建索引、重建索引将会变得比较容易,临时表空间占用也较少,所以大大缩短了常用维护操作的时间,大大降低了风险;同时,核心数据表拆分为n个子表后,对于这些核心数据表的访问量会进行分流,因此每张子表上的访问量将是未拆分前的数据表的1/n,这种情况下对子表添加字段比较容易,阻塞的会话也少,对应用的影响也相对较小。同时,在对一张子表进行DDL操作时,因为该子表统计的数据的不准确,与此子表相关的SQL硬解析产生的新的执行计划是错误的,但是同时因为访问量仅为原来访问量的l/n,系统的压力就在可以承受的范围内,从而影响的用户数大大减少,使得系统的可管理性大大增强。采用本发明中的数据处理方法,对核心业务数据表进行第一次拆分之后,如果每张子表的数据量仍然较大,还可以对所述子表继续进行第二次拆分,这种拆分可以称为第二层取模hash算法。其中,把第一次进行拆分的子表称为一级子表,把第二次拆分后的子表称为二级子表。具体可以参考图4,示出了本发明的联机事务处理中的数据处理方法实施例3的流程图,所述子表包括一级子表和二级子表,所述数据处理方法可以包括以下步骤步骤401:根据业务特征确定目标数据表的数据分割字段;步骤402:依据所述数据分割字段将所述目标数据表拆分成多个子表。优选的,所述步骤402可以包括以下子步骤子步骤4021:读取所述目标数据表中某行记录的数据分割字段的值;子步骤4022:将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;子步骤4023:将所述记录转存至所述一级子表中;子步骤4024:若所述一级子表的数据量满足一定阈值,则读取所述一级子表中某行记录的数据分割字段的值;子步骤4025:将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;子步骤4026:将所述一级子表的记录转存至所述二级子表中。以下通过一个具体例子来i兌明本实施例假设目标数据表的定义为test(idvarchar2(32),useridnumber,...),在数据库层确定的数据分割字段为userid字段;应用本实施例的数据处理过程为Bl、预设的一级子表数量为16,依据上述实施例2中的方法对数据分割字段userid字段值进行取模16运算,然后根据运算结果定位当前转存的16个一级子表;B2、将经过拆分的目标数据表中的数据转存至所述16个一级子表中,如,子表—00,子表—01,子表—02,...子表—15;B3、对一级子表进行拆分完毕后,判断所述一级子表的数据量是否满足一定阔值,所述阈值和拆分后的一级子表的个数和数据量有关,可以根据一级子表的数据量增长的情况确定获得;实际应用中,用户根据自己需要的子表个数和子表所含的数据量来设定这个阈值。如果满足该阈值则表示一级子表的数据量增长依然较快,就需要继续对一级子表进行二级拆分处理,进入步骤B4;如果不满足则表示一级子表的数据量增长在可以允许的范围内,就结束本次数据处理过程;B4、假设在一级子表下继续设置3个二级子表,则同样可以参照实施例2中的方法分别对所述16个子表的userid字段值进行模3运算,并根据运算结果定位当前转存的二级子表;其中,所述二级子表数量也是根据具体情况来灵活设定的,不同的实施例中可以有不同的数量,本发明不对一级子表和二级子表的数量做特殊限定;经过本实施例的二次拆分后,则一级子表—00可以拆分为二级子表00—00,00—01和00—02,一级子表—01可以拆分为二级子表01—00,01—01和01—02,......,一级子表—15可以拆分为二级子表15—00,15—01和15—02;B5、将所述一级子表的记录转存至所述二级子表中。需要说明的是,本实施例中对一级子表的读取以及转存过程也可以循环,直到读取的一级子表为空,表明一级子表已经拆分完毕,需要拆分的一级子表都已经转存至相应的二级子表中,此时本实施例的数据处理过程结束。从前述步骤中我们可以看出,所述数据处理方法具有良好的扩展性,一级子表的数量可以根据子表数据量的多少以及数据量的增长速度再次进行拆分。在实际应用中,有时目标数据表会比较庞大,在对所述目标数据表进行第二次拆分之后,很可能出现二级子表的数据增长依然很快的现象,此时,可以依据前述方法将所述二级子表拆分为三级子表,所述拆分过程称为第三次拆分,依此类推,拆分目标数据表后子表可以包括一级子表、二级子表、三级子表,......,N级子表,本发明不对子表的级数做特别限定。当然,本领域技术人员采用任一种数据拆分的方法都是可行的,例如,在所述数据分割字段为数字型字段或字符型字段的情况下,本发明可以将数据分割字段值转化为十六进制,然后根据转化数据的首字符进行数据处理。具体可以参考图5,示出了本发明的联机事务处理中的数据处理方法实施例4的流程图,采用这种方法时,所述数据处理方法可以包括以下步骤步骤501:根据业务特征确定目标数据表的数据分割字段;步骤502:依据所述数据分割字段将所述目标数据表拆分成多个子表。优选的,步骤502可以包括如下子步骤子步骤5021:读取所述目标数据表中数据分割字段的值;子步骤5022:将所述数据分割字段的值转化为十六进制,根据首字符定位当前转存的子表;子步骤5023:将相应的值转存至所述子表中。以下通过一个具体例子来说明本实施例假设目标数据表为表t,其中数据分割字段为nick,即是按照表t的nick字段进行拆分,nick是一个32位定长字符串,其中每个字符都用16进制表示。表t中的数据如下所示mysql〉selectnickfromt;nick8f37218b86d69cced1f1c63be326449b26885d4e325de0e7a62e0a2cblb302d90ccl75b9c0flb6a831c399e269772661900150983cd24fb0d6963f7d28el7f72e2fc714c4727ee9395f324cd2e7f331f5rowsinset(0.00sec)根据nick字段的数据特征可以知道,对所述表t的拆分根据首字符应该预设子表的数量为16个,其中,以'O,,'l,,'2,,...,'e,,'f,,为开头的各对应一张子表,因此制定如下的数据处理规则Nick字段首字符为0的,数据存放在子表t—00;Nick字段首字符为1的,数据存放在子表t—01;Nick字段首字符为2的,数据存放在子表t—02;Nick字段首字符为3的,数据存放在子表t—03;Nick字段首字符为f的,数据存放在子表t—15;依据所述数据处理规则将表t中的数据转存至所述子表t—00,t—01,...,t—15,即可完成对目标数据表t按照nick字段值进行拆分的过程。参考图6,示出了应用本发明联机事务处理中数据处理方法的装置实施例的结构框图,包括确定单元601,用于根据业务特征确定目标数据表的数据分割字段;拆分单元602,用于依据所述数据分割字段将所述目标数据表拆分成多个子表。在进行数据处理的时候,首先需要根据用户的业务特征,如用户数据标识字段等,确定数据分割字段,确定单元确定所述数据分割字段后,就将其发送给拆分单元,所述拆分单元依据所述数据分割字段,就将目标数据表拆分成满足要求的多个子表。优选的,所述装置还可以包括存储单元,用于将所述子表存储至一个或多个数据库中。实际应用中,对子表拆分后,要把所述的子表存储到一个或多个数据库中,当存储到一个数据库时,那么应用对子表的查询也只限于一个数据库中,当存储到多个数据库时,应用查询的时候首先定位子表所在的数据库,再对所述子表进行定位和查询。优选的,所述拆分单元包括第一读取子单元,用于读取所述目标数据表中某行记录的数据分割字段的值;第一运算子单元,用于将所述数据分割字段的值按照预设的子表数量进行取模运算,并依据所述运算结果定位当前转存子表;第一转存子单元,用于将所述目标数据表的记录转存至所述子表中。在这种情况下,应用图6所示的优选实施例进行数据处理的方法可以包括以下步骤Cl、确定单元首先根据业务特征确定目标数据表的数据分割字段;段的值;C3、第一运算子单元将所述数据分割字段的值按照预设的子表数量进行取模运算,并依据所述运算结果定位当前转存子表;C4、第一转存子单元将所述目标数据表的记录转存至所述子表中。优选的是,当拆分后的子表数据量增长仍然较大的时候,可以对第一次进行拆分后的子表进行第二次拆分,此时,第一次拆分后的子表称为一级子表,第二次拆分后的子表称为二级子表,所述拆分单元包括第一读取子单元,用于读取所述目标数据表中某行记录的数据分割字段的值;第二运算子单元,用于将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;第二转存子单元,用于将所述记录转存至所述一级子表中;第二读取子单元,用于在所述一级子表的数据量满足一定阈值时,读取所述一级子表中某行记录的数据分割字段的值;第三运算子单元,用于将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;第三转存子单元,用于将所述一级子表的记录转存至所述二级子表中。在对一级子表进行拆分时,需要满足一个条件,即是一级子表的数据量增长超出某个阈值,此阈值可由用户根据实际情况自主设定和改变。此时,第二读取子单元将读取一级子表中的一行记录数据,然后^安照前述介绍的拆分方法对一级子表进行拆分。在这种情况下,应用图6所示的优选实施例进行数据处理的方法可以包括以下步骤Dl、第一读取子单元读取所述目标数据表中某行记录的数据分割字段的值;D2、第二运算子单元将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;D3、第二转存子单元将所述记录转存至所述一级子表中;D4、第二读取子单元在所述一级子表的数据量满足一定阈值时,读取所述一级子表中某行记录的数据分割字段的值;D5、第三运算子单元将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;D6、第三转存子单元将所述一级子表的记录转存至所述二级子表中。优选的,数据分割字段包括数字分割字段或字符分割字段,将数据分割字段转化为十六进制,所述拆分单元包括第三读取子单元,用于读取所述目标数据表中数据分割字段的值;转化子单元,用于将数据分割字段的值转化为十六进制,并根据首字符定位当前转存的子表;第四转存子单元,用于将相应的值转存至所述子表中。在这种情况下,应用图6所示的优选实施例进行数据处理的方法可以包括以下步骤El、第三读取子单元读取所述目标数据表中数据分割字段的值;E2、转化子单元将数据分割字段的值转化为十六进制,并根据首字符定位当前转存的子表;E3、第四转存子单元将相应的值转存至所述子表中。数据分割字段还可以由转化子单元转化为十六进制,当所述数据分割字段为十六进制时,转化单元需要对转化后的十六进制数的首字符进行解析,将解析出的首字符值发送给定位单元,所述定位单元依据首字符值对目标数据表进行拆分,其具体拆分过程和前述方法相同。优选的,所述拆分单元位于数据库层,拆分后的子表可以位于同一个数据库中,也可以位于不同的数据库中。参考图7所示,示出了本发明联机事务处理中的数据查询方法的实施例1的流程图,可以包括如下步骤步骤701:定位查询数据所在的子表;其中,所述子表为依据所述数据分割字段对目标数据表进行拆分获得,所述数据分割字段为根据业务特征在目标数据表中确定获得,所述查询数据为对应所述数据分割字段的值;步骤702:在所述子表中查找满足所述查询数据的相关记录。优选的,所述定位步骤包括将所述查询数据按照预设的子表数量进行取模运算;依据所述运算结果定位子表。应用本实施例,假设子表个数为n+l个,其中,应用层访问数据库层的数据可以用如下伪代码来表示v—flag=mod(弁userid,n+l);Ifv—flag=0then数据存放在子表OO,对其进行各种操作;Elseifv—flag=lthen数据存放在子表01,对其进行各种操作;Elseifv—flag=2then数据存放在子表02,对其进行各种操作;Else数据存放在子表n,对其进行各种操作;Endif;可以看出,对目标数据表进行拆分之后,当系统查询用户数据分割字段usesid的数据时,首先可以采用前述数据处理方法实施例中的取才莫hash运算,以定位到此用户数据存放在哪张子表上,随后即可进行数据的查询和操作。以下通过两个具体的例子来说明本实施例一、假设前述数据处理方法中n=15,即是拆分的子表个数为16个,应用在访问数据时,如果是访问userid=l的数据,首先需要在应用层进行取模运算,得到v—flag=mod(1,16)=1,则可以从运算结果中得知需要访问子表—01,随即可以对子表—01进行相应的数据操纵语言(DataManipulationLanguage,DML)操作;类似的,如果访问userid=20的数据,在应用层进行取模运算,得到v—flag=mod(20,16)=4,则可以从运算结果中得到需要访问子表—04,随即可以对子表—04进行相应的DML操作,......,依此类推,一直可以用同样的方法定位以及查询至子表—15。二、本实施例中,不管需要查询的用户为多少,都可以进行类似的取模运算完成定位过程,.并且不同的用户数据可能存放在一张子表上,例如,当用户进行查询时,々i如需要查询100这个用户的凄t据,则查询步骤为取模运算v—flag=mod(100,16)=4;计算得到结果为4,可以得知数据存放在子表—04上;定位到在子表—04上,操作数据以进行查询;如查询selectid,type,statusfrom子表—04whereuserid=100;前述实施例只是在单个数据库内拆分,如果在拆分目标数据表时,把子表—04放在另外一个数据库test_db上,那么应用在访问时,只需要去访问^t据库test—db的子表—04即可。需要说明的是,对于如何定位到子表,或者如何定位到数据库,定位的查询规则由数据的拆分规则决定,对目标数据表拆分时的数据分割字段,即是应用进行定位时的数据查询字段;而查询方式,也是由数据的拆分规则来决定的,数据存放在哪个数据库中的哪张子表上,则对应的应用就需要对所述数据库的所述子表进行查询。优选的,所述目标数据表进行第二次拆分时,所述数据查询方法包括通过一级子表定位和查询所述一级子表下的二级子表。在本实施例中,所述子表分为一级子表和二级子表,此查询方法对应本发明联机事务处理中的数据处理方法的实施例3。当目标数据表应用实施例3中描述的第二次拆分的方法时,所述的数据查询方法也分为定位和查询所述一级子表下的二级子表两个步骤。以下通过一个具体例子来说明本实施例首先假设在目标数据表test(id,userid,type,status,其它字段)中进行查询,数据查询字段为userid,并预设第一次拆分时还是按照模16运算方式,即是预设的拆分子表个数为16,由于第一次拆分后子表的数据量增长仍然过快,所以在数据库层需要再次对每张子表的userid字段值进行模3运算,即把已经拆分为16个的一级子表每个再拆分为3个二级子表。其中,应用本实施例时,应用层查询数据库中的数据可以用如下的伪代码表示v—flag=mod(#userid,16);--第一层hash结果vv—flag=mod(#userid,3);--第二层hash结果Ifv—flag=0then数据存放在子表—00;Ifvv—flag=0then数据存放在子表00—00,对其进行各种操作;Elseifvv—flag=lthen数据存放在子表00—01,对其进行各种操作;Else数据存放在子表00—02,对其进行各种操作;Endif;Elseifv—flag=lthen数据存放在子表—01;Ifvv—flag=0then数据存放在子表01—00,对其进行各种操作;Elseifvv—flag=lthen数据存放在子表01—01,对其进行各种操作;Else数据存放在子表01_02,对其进行各种操作;Endif;Else数据存放在子表—15;Ifvv—flag=0then数据存放在子表15—00,对其进行各种操作;Elseifvv—flag=lthen数据存放在子表15—01,对其进行各种操作;Else数据存放在子表15—02,对其进行各种操作;Endif;Endif;需要说明的是,当数据拆分到二级子表后,上述一级子表00、01.....15实际上已经不存在了。也就是说,在存在下级子表的情况下,其上级子表就是逻辑意义上的子表,即一种虚子表,而非物理意义上的存在了。当然,本领域技术人员采用任一种数据查询的方法都是可行的,例如,对应于前述的联机事务处理中的数据处理方法的实施例4,优选的,在进行数据查询时,可以根据目标数据表t中弁nick的第一个字符,首先判断出查询数据存放对应的哪张子表中,然后定位到所述子表,查询需要的数据。在前述的联机事务处理中的数据处理和查询方法,都是基于将所述子表转存到一个数据库上的基础,若在进行数据处理的步骤时,把子表存储在其它数据库上,那么对数据进行查询时,需要首先查询子表所在的数据库,然后再定位到所述数据库中的所述子表。从前述数据处理、查询方法的实施例中可以看出,此联机事务处理中的凄史据处理、查询方法具有良好的扩展性,进行拆分后的一级子表个数可以根据一级子表数据量的多少再次进行第二次拆分,查询时则可可以很容易地定位到拆分后的二级子表上。需要说明的是,在这种情况下,二级子表才有数据,一级子表只是一个虚表,是一个到达二级子表的路径。参考图8所示,示出了本发明联机事务处理中的数据查询装置的结构图,所述数据查询装置为了实现数据查询的功能,所述装置包括定位单元801,用于定位查询数据所在的子表,所述子表为拆分单元依据所述数据分割字段对目标数据表进行拆分获得,所述数据分割字段为根据业务特征在目标数据表中确定获得,所述查询数据为对应所述数据分割字段的值;查找单元802,用于在所述子表中查找满足所述查询数据的相关记录。在本实施例中,所述目标数据已经经过拆分,并存储至不同的子表中,因此当定位单元定位查询数据时,直接定位到所述查询数据所在的子表中即可。优选的,所述定位单元包括第四运算子单元,用于将所述查询数据按照预设的子表数量进行取模运算;接收子单元,用于接收所述运算结果并对子表进行定位。在这种情况下,应用图8所示的优选实施例进行数据查询的方法可以包括以下步骤Fl、第四运算子单元将将所述查询数据按照预设的子表数量进行取模运算;F2、接收子单元接收所述运算结果并对子表进行定位;F3、查找单元在所述子表中查找满足所述查询数据的相关记录。优选的,所述定位单元位于应用层,所述定位可以理解为应用层访问和查询数据库层的数据。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见前述部分的相关描述即可。上述随意举出了本发明的几种实施例,本领域技术人员根据具体情况适当组合、选择,可以充分地发挥本发明的技术功效。基于上述实施例的任意组合都是本发明的实施方案,但是由于篇幅限制,本说明书在此就不——详述了。由于本发明中提供的装置都可以对应适用于前述的各种方法实施例中,所以描述较为筒略,未详尽之处可以参见本说明书前面相应部分的描述。以上对本发明所提供的联机事务处理中的数据处理、查询方法和联机事务处理中的数据处理、查询装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。权利要求1、一种联机事务处理中的数据处理方法,其特征在于,包括根据业务特征确定目标数据表的数据分割字段;依据所述数据分割字段将所述目标数据表拆分成多个子表。2、根据权利要求1所述的方法,其特征在于,还包括将所述子表存储至一个或多个数据库中。3、根据权利要求1或2所述的方法,其特征在于,所述数据表拆分步骤包括读取所述目标数据表中某行记录的数据分割字段的值;将所述数据分割字段的值按照预设的子表数量进行取模运算,并依据所述运算结果定位当前转存子表;将所述目标数据表的记录转存至所述子表中。4、根据权利要求1或2所述的方法,其特征在于,所述子表包括一级子表和二级子表,所述数据表拆分步骤包括读取所述目标数据表中某行记录的数据分割字段的值;将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;将所述记录转存至所述一级子表中;若所述一级子表的数据量满足一定阈值,则读取所述一级子表中某行记录的数据分割字段的值;将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;将所述一级子表的记录转存至所述二级子表中。5、根据权利要求1或2所述的方法,其特征在于,所述数据分割字段为数字型字段或字符型字段,所述数据表拆分步骤包括读取所述目标数据表中数据分割字段的值;将所述数据分割字段的值转化为十六进制,根据首字符定位当前转存的子表;将相应的值转存至所述子表中。6、根据权利要求1所述的方法,其特征在于,所述数据分割字段包括用户数据标识字段。7、一种联机事务处理中的数据查询方法,其特征在于,包括定位查询数据所在的子表,所述子表为依据所述数据分割字段对目标数据表进行拆分获得,所述数据分割字段为根据业务特征在目标数据表中确定获得,所述查询数据为对应所述数据分割字段的值;在所述子表中查找满足所述查询数据的相关记录。8、根据权利要求7所述的方法,其特征在于,所述定位步骤包括将所述查询数据按照预设的子表数量进行取模运算;依据所述运算结果定位子表。9、一种联机事务处理中的数据处理装置,其特征在于,包括确定单元,用于根据业务特征确定目标数据表的数据分割字段;拆分单元,用于依据所述数据分割字段将所述目标数据表拆分成多个子表。10、根据权利要求9所述的装置,其特征在于,还包括存储单元,用于将所述子表存储至一个或多个数据库中。11、根据权利要求9或IO所述的装置,其特征在于,所述拆分单元包括第一读取子单元,用于读取所述目标数据表中某行记录的数据分割字段的值;第一运算子单元,用于将所述数据分割字段的值按照预设的子表数量进行取模运算,并依据所述运算结果定位当前转存子表;第一转存子单元,用于将所述目标数据表的记录转存至所述子表中。12、根据权利要求9或IO所述的装置,其特征在于,所述子表包括一级子表和二级子表,所述拆分单元包括第一读取子单元,用于读取所述目标数据表中某行记录的数据分割字段的值;第二运算子单元,用于将所述数据分割字段的值按照预设的一级子表数量进行取模运算,并依据所述运算结果定位当前转存的一级子表;第二转存子单元,用于将所述记录转存至所述一级子表中;第二读取子单元,用于在所述一级子表的数据量满足一定阈值时,读取所述一级子表中某行记录的数据分割字段的值;第三运算子单元,用于将所述数据分割字段的值按照预设的二级子表数量进行取模运算,并依据所述运算结果定位当前转存的二级子表;第三转存子单元,用于将所述一级子表的记录转存至所述二级子表中。13、根据权利要求9或IO所述的装置,其特征在于,所述数据分割字段为数字型字段或字符型字段,所述拆分单元包括第三读取子单元,用于读取所述目标数据表中数据分割字段的值;转化子单元,用于将数据分割字段的值转化为十六进制,并根据首字符定位当前转存的子表;第四转存子单元,用于将相应的值转存至所述子表中。14、根据权利要求9所述的装置,其特征在于,所述拆分单元位于数据库层。15、一种联机事务处理中的数据查询装置,其特征在于,包括定位单元,用于定位查询数据所在的子表,所述子表为拆分单元依据所述数据分割字段对目标数据表进行拆分获得,所述数据分割字段为根据业务特征在目标数据表中确定获得,所述查询数据为对应所述数据分割字段的值;查找单元,用于在所述子表中查找满足所述查询数据的相关记录。16、根据权利要求15所述的装置,其特征在于,所述定位单元包括第四运算子单元,用于将所述查询数据按照预设的子表数量进行取模运算;接收子单元,用于接收所述运算结果并对子表进行定位。17、根据权利要求15所述的装置,其特征在于,所述定位单元位于应用层。全文摘要本发明公开了一种联机事务处理中的数据处理方法,包括根据业务特征确定目标数据表的数据分割字段;依据所述数据分割字段将所述目标数据表拆分成多个子表。本发明采用将联机事务处理系统中的核心数据表拆分成多个子表的办法,使得拆分后的子表数据量相对原有的核心数据表的数据量较小,当对子表进行DDL操作时,临时表空间占用较少,阻塞的会话也非常少,从而使得系统的承受压力也明显降低,提高了数据库中核心数据表的可维护性和可管理性。文档编号G06F17/30GK101566986SQ20081009048公开日2009年10月28日申请日期2008年4月21日优先权日2008年4月21日发明者林赵申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1