数据表处理方法及系统的制作方法

文档序号:6433370阅读:135来源:国知局

专利名称::数据表处理方法及系统的制作方法数据表处理方法及系统
技术领域
:本发明涉及数据表处理领域,特别涉及一种数据表处理方法及系统。
背景技术
:在数据库中,序列生成器可以为数据表中的行自动生成序列号,产生一组等间隔的数值,主要用于生成数据表的主键值。其中,主键又称主关键字(primarykey),是指表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。在数据库的应用中,需要为数据表中的每条记录生成ID(Identity,序列号),将该ID作为主键。传统的方法是使用某种算法生成字符串,使得每次生成的字符串是不同的,如利用机器时间加MAC(MediaAccessControl,硬件地址)地址加随机因子按照某种策略生成的字符串,但字符串长度通常至少为32个字符,对空间要求比数字ID(Identity,序列号)要高,导致索引查询速度比数字ID要慢,且当多个用户对同一数据表进行操作时,可能会导致出现序列号冲突;传统的方法也有使用数据库系统的主键自增功能的,如SqlServer的Identity,MySql的Auto_Increment等,该数据模型的ID是数字值,但序列生成器无法与具体的数据库系统解耦,即针对每个数据库系统需要相应的一个序列生成器实现,且当多个用户对同一数据包进行操作时,可能会导致出现序列号冲突。
发明内容基于此,有必要提供一种能防止序列号冲突的数据表处理方法。一种数据表处理方法,包括以下步骤创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定;获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;根据所述更新后的序列当前最大值更新所述用户操作的数据表。优选地,在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定的步骤具体为在所述序列表中查找所述用户操作的数据表的名称,在所述序列表中未查找到时,将所述序列表进行锁定,在所述序列表中创建包含所述用户操作的数据表的名称的记录,初始化所述记录中的序列当前最大值,然后将所述序列表中的包含所述数据表的名称的记录进行锁定。优选地,在获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值的步骤之后还包括步骤形成包含预定值个序列号的序列区间块;根据所述更新后的序列当前最大值更新所述用户操作的数据表的步骤为根据所述序列区间块更新所述用户操作的数据表。优选地,所述获取用户对所述数据表的操作请求的步骤之后,还包括判断所述序列区间块中序列号是否用完,若是,则获取新的序列区间块,若否,则直接从所述序列区间块中获取序列号,根据获取的序列号更新所述用户操作的数据表,其中,所述序列号小于所述序列当前最大值。优选地,所述序列区间块中记录了起始序列号、最大序列号和当前序列号。此外,还有必要提供一种能防止序列号冲突的数据表处理系统。一种数据表处理系统,包括创建模块,用于创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取模块,用于获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;查找模块,用于在所述序列表中查找所述用户操作的数据表的名称;处理模块,用于将所述序列表中的包含所述数据表的名称的记录进行锁定,获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;更新模块,用于根据所述更新后的序列当前最大值更新所述用户操作的数据表。优选地,在所述查找模块在所述序列表中未查找到所述用户操作的数据表的名称时,所述处理模块还用于对将所述序列表进行锁定,在所述序列表中创建包含所述用户操作的数据表的名称的记录,初始化所述记录的序列当前最大值,然后将所述序列表中的包含所述数据表的名称的记录进行锁定。优选地,所述处理模块还用于形成包含预定值个序列号的序列区间块;所述更新模块还用于根据所述序列区间块更新所述用户操作的数据表。优选地,还包括判断模块,所述判断模块用于在所述获取模块获取所述用户对所述数据表的操作请求后,判断所述序列区间块中序列号是否用完,所述获取模块在所述判断模块判断出所述序列区间块中序列号已用完时,所述处理模块还用于获取新的序列区间块,所述处理模块还用于在所述判断模块判断出所述序列区间块中序列号未用完时,直接从所述序列块中获取序列号,所述更新模块还用于根据获取的序列号更新所述用户操作的数据表,其中,所述序列号小于所述序列当前最大值。优选地,所述序列块中记录了起始序列号、最大序列号和当前序列号。上述数据表处理方法及系统,创建序列表,获取用户对数据表的操作请求及数据表的名称,在序列表中查找用户操作的数据表的名称,将包含该数据表的名称的记录进行锁定,获取锁定的记录中的序列当前最大值,增加预定值后,更新序列当前最大值,再根据更新的序列当前最大值更新用户操作的数据表,由于锁定了包含用户操作的数据表的名称的记录,可保证某个用户对数据表进行操作时,其他用户对该数据表的操作无效,如此不会出现序列号冲突的情形,可应用于分布式环境中的数据同步。图1为一个实施例中数据表处理方法的流程图;图2为一个实施例中数据表处理系统的结构不意图;图3为另一个实施例中数据表处理系统的结构示意图。具体实施方式下面结合具体的实施例及附图对序列生成方法及系统的技术方案进行详细的描述。如图1所示,在一个实施例中,一种序列生成方法,包括以下步骤步骤S110,创建序列表,该序列表包括数据表的名称字段、序列当前最大值字段和主键字段。利用标准的SQL语言创建一个序列表。该序列表中包括数据表的名称字段、序列当前最大值字段和主键字段。例如,创建的序列表的结构如下createtableMy_IDSequence(seqNamevarchar(128),seqNextint,primarykey(seqName));其中,seqNamevarchar(128)表示数据表的名称字段,seqNextint表示序列当前最大值字段,primarykey(seqName)表示主键字段。该序列表中存有多条数据表的记录。序列当前最大值字段中的值表示数据表中已有序列号的最大值或数据表中下次将要生成的序列号,如数据表中已存在的序列号的最大值为20,则序列表中记录的该数据表的序列当前最大值可为20或21。本实施例中,该序列表中记录的数据表的序列当前最大值为数据表下次将要生成的序列号。该序列表以数据表的名称字段作为主键。步骤S120,获取用户对数据表的操作请求,根据该操作请求获取用户操作的数据表的名称。获取用户对数据表的操作请求,因序列表中存有多条数据表的记录,需获取用户操作的数据表的名称,以便后续在序列表中查找。获取用户对数据表的操作请求后,会与数据库建立连接,此时,需将该连接设置为非自动提交数据,以保证后续的锁定操作。向数据库提交数据是一项数据库事务。一般情况下,数据库事务默认为自动提交,即作为一个操作后即提交数据,本实施例中,需将该连接保持一段时间,保证整个事务中的操作完成后,才提交数据,如用户A向用户B的账号中进行转账100元,分为两个步骤1.在用户A的账号中扣去100元;2.在用户B的账号中增加100元。当两个步骤均完成时,才提交数据。步骤S130,在该序列表中查找用户操作的数据表的名称,将该序列表中的包含该数据表的名称的记录进行锁定。在序列表中查找用户操作的数据表的名称,若查找到,则直接对序列表中的包含该数据表的名称的记录进行锁定,以防止其他用户对该数据表的名称的记录进行操作。在一个实施例中,若在序列表中未查找到时,则将该序列表进行锁定,在序列表中创建包含该用户操作的数据表的名称的记录,初始化创建的记录的序列当前最大值,再将该序列表中的包含用户操作的数据表的名称的记录进行锁定。对序列表进行锁定,可防止其他用户同时对该数据表进行操作时,序列表也创建同样的记录,从而造成记录重复,占有资源。创建包含该用户操作的数据表的名称的记录后,对包含该用户操作的数据表的序列当前最大值进行初始化,如该序列当前最大值可为1,即表示该用户操作的数据表中生成的序列号从I开始。然后将该创建的包含用户操作的数据表的名称的记录进行锁定,可释放对序列表的锁定,方便其他用户对序列表中的包含其他数据表的名称的记录进行操作。步骤S140,获取该序列表中锁定的记录中的序列当如最大值,并将该序列当如最大值增加预定值,更新该序列当前最大值。对序列表中包含的用户操作的数据表的名称的记录进行锁定后,获取到该记录的序列当前最大值,该序列当前最大值为该数据表下次将要生成的序列号,将其增加预定值,更新了序列当前最大值。该预定值可为任意数,如10000。例如获取的包含用户操作的数据表的名称的记录的序列当如最大值为10001,则增加预定值10000后,更新后的序列当如最大值为20001。在优选的实施例中,在步骤S140之后还包括步骤形成包含预定值个序列号的序列区间块。如形成的包含10000个序列号的序列区间块[10001,20000],序列号为序列区间块中包含两个端点的整数值。序列区间块中记录了起始序列号、最大序列号和当前序列号,节省了缓存资源。其中,当前序列号是指将序列区间块中的序列号分配给用户后,下一个将分配的序列号。在形成包含预定值个序列号的序列区间块之后还包括提交数据,释放锁定的序列表中包含用户操作的数据表的名称的记录。以便其他用户对该数据表的名称的记录进行操作。步骤S150,根据更新后的序列当前最大值更新用户操作的数据表。在形成包含预定值个序列号的序列区间块后,根据更新后的序列当前最大值更新用户操作的数据表具体为根据该序列区间块更新用户操作的数据表。该序列区间块包含了更新前的序列当前最大值到更新后的序列当前最大值之间的序列号,将该序列区间块中的序列号都分配给该用户,其他用户对该数据表进行操作时,将不能使用该序列区间块内的序列号。在一个实施例中,在获取该用户对该数据表的操作请求之后,还包括判断该序列区间块中序列号是否用完,若是,则执行获取新的序列区间块,若否,则直接从该序列区间块中获取序列号,根据获取的序列号更新该用户操作的数据表,其中,所述序列号小于所述序列当前最大值。例如,在人事系统操作用户表时,在用户表中插入用户A,需给用户A分配一个序列号,若用户表的序列生成器获得序列区间块[1,10000],先判断该序列区间块中的序列号是否用完,若没有,则直接从序列区间块中获得一个序列号分配给用户A,若是,则需获取新的序列区间块。如图2所不,在一个实施例中,一种数据表处理系统,包括创建模块210、获取模块220、查找模块230、处理模块240和更新模块250。其中,创建模块210用于创建序列表,该序列表包括数据表的名称字段、序列当前最大值字段和主键字段。利用标准的SQL语言创建一个序列表。该序列表中包括数据表的名称字段、序列当前最大值字段和主键字段。序列表的结构可如上述数据表处理方法中描述,在此不再赘述。获取模块220用于获取用户对数据表的操作请求,根据该操作请求获取用户操作的数据表的名称。获取模块局220获取用户对数据表的操作请求,因序列表中存有多条数据表的记录,需获取用户操作的数据表的名称,以便后续在序列表中查找。查找模块230用于在该序列表中查找该用户操作的数据表的名称。查找模块230在序列表中查找用户操作的数据表的名称,若查找到,则处理模块240直接对序列表中的包含该数据表的名称的记录进行锁定,以防止其他用户对该数据表的名称的记录进行操作。若查找模块230在序列表中未查找到时,则处理模块240将该序列表进行锁定,在序列表中创建包含该用户操作的数据表的名称的记录,初始化创建的记录的序列当前最大值,再将该序列表中的包含用户操作的数据表的名称的记录进行锁定。对序列表进行锁定,可防止其他用户同时对该数据表进行操作时,序列表也创建同样的记录,造成记录重复,占有资源。创建包含该用户操作的数据表的名称的记录后,对包含该用户操作的数据表的序列当前最大值进行初始化,如该序列当前最大值可为1,即表示该用户操作的数据表中生成的序列号从I开始。然后将该创建的包含用户操作的数据表的名称的记录进行锁定,可释放对序列表的锁定,方便其他用户对序列表中的包含其他数据表的名称的记录进行操作。处理模块240用于将该序列表中的包含用户操作的数据表的名称的记录进行锁定,获取该序列表中锁定的记录中的序列当前最大值,并将该序列当前最大值增加预定值,更新该序列当前最大值。处理模块240对序列表中包含的用户操作的数据表的名称的记录进行锁定后,获取到该记录的序列当前最大值,该序列当前最大值为该数据表下次将要生成的序列号,将其增加预定值,更新了序列当前最大值。该预定值可为任意数,如10000。例如获取的包含用户操作的数据表的名称的记录的序列当前最大值为10001,则增加预定值10000后,更新后的序列当前最大值为20001。优选的实施例中,处理模块240还用于形成包含预定值个序列号的序列区间块。如形成的包含10000个序列号的序列区间块[10001,20000],序列号为序列区间块中包含两个端点的整数值。序列区间块中记录了起始序列号、最大序列号和当前序列号。节省了缓存资源。其中,当前序列号是指将序列区间块中的序列号分配给用户后,下一个将分配的序列号。处理模块240还用于提交数据,释放锁定的序列表中包含用户操作的数据表的名称的记录。以便其他用户对该数据表的名称的记录进行操作。更新模块250用于根据该更新后的序列当前最大值更新该用户操作的数据表。更新模块250还用于根据该序列区间块更新该用户操作的数据表。该序列区间块包含了更新前的序列当前最大值到更新后的序列当前最大值之间的序列号,将该序列区间块中的序列号都分配给该用户,其他用户对该数据表进行操作时,将不能使用该序列区间块内的序列号。在一个实施例中,如图3所示,上述数据表处理系统,除了包括创建模块210、获取模块220、查找模块230、处理模块240和更新模块250,还包括判断模块260。其中,判断模块260用于在获取模块220获取该用户对该数据表的操作请求后,判断该序列区间块中序列号是否用完,获取模块220在判断模块260判断出该序列区间块中序列号已用完时,根据该操作请求获取用户操作的数据表的名称,查找模块230还用于在该序列表中查找该用户操作的数据表的名称,处理模块240还用于将该序列表中的包含用户操作的数据表的名称的记录进行锁定,获取该序列表中锁定的记录中的序列当前最大值,并将该序列当前最大值增加预定值,更新该序列当前最大值,形成新的包含预定值个序列号的序列区间块;处理模块240还用于在判断模块260判断出该序列区间块中序列号未用完时,直接从该序列块中获取序列号,更新模块250还用于根据获取的序列号更新该用户操作的数据表,其中,该序列号小于该序列当前最大值。例如,在人事系统操作用户表时,在用户表中插入用户A,需给用户A分配一个序列号,若用户表获得序列块[1,10000],判断模块260判断该序列块中的序列号是否用完,若没有,则处理模块240直接从序列区间块中获得一个序列号分配给用户A,若是,则需获取新的序列区间块。为了更清楚的说明数据表处理系统的工作过程,以具体的实例描述,但本数据表处理系统不限于应用于该具体的实例。主数据系统存在用户表T_user(idint,userNamevarchar(128));组织表T_org(idint,orgNamevarchar(128))。仓1J建模块210在数据库中先创建序列表My_IDSequence。若有两个应用系统,人力资源系统SI和采购系统S2。SI和S2都有创建用户的业务,需生成用户的序列号。SI系统创建序列生成器SEQl,S2系统创建序列生成器SEQ2,所有的序列号从I开始生成。当SI系统对用户表T_user操作插入用户Al的请求,则获取模块220获取该操作请求后,将SEQl与数据库建立连接,查找模块230从MyJDSequence表的seqName中查找是否存在T_user的记录,若不存在,则处理模块240锁定My_IDSequence表,在My_IDSequence表中创建包含该T_user的名称的记录,然后再对包含该T_user的名称的记录进行锁定,初始化该T_user的序列当前最大值seqNext为I,查询得到该T_user的序列当前最大值seqNext为I,将I增加预定值10000,然后更新seqNext为10001,并形成序列区间块[1,10000],该序列区间块为SEQl唯一持有。更新模块250根据该序列区间块更新该用户表T_uSer,即从序列区间块中获取一个序列号分配给用户Al。同样,S2系统对用户表T_user操作插入用户al的请求,则获取模块220获取操作请求后,将SEQ2与数据库建立连接,查找模块230查找到MyJDSequence表的seqName中的T_user记录,处理模块240获得该T_user的行级锁,查询得到该T_user的序列当前最大值seqNext为10001,将10001增加预定值10000,然后更新seqNext为20001,并形成序列区间块[10001,20000],该序列区间块为SEQ2唯一持有。更新模块250根据该序列区间块更新该用户表T_uSer,即从该序列区间块中获取一个序列号分配给用户al。如此SEQl在用户表T_user中插入的数据为(I,Al),(2,A2),......,(10000,A10000)。SEQ2在用户表1'_11861'中插入的数据为(IOOOLal),(10002,a2),......,(20000,alOOOO)。上述数据表处理方法及系统,创建序列表,获取用户对数据表的操作请求及数据表的名称,在序列表中查找用户操作的数据表的名称,将包含该数据表的名称的记录进行锁定,获取锁定的记录中的序列当前最大值,增加预定值后,更新序列当前最大值,再根据更新的序列当前最大值更新用户操作的数据表,由于锁定了包含用户操作的数据表的名称的记录,可保证某个用户对数据表进行操作时,其他用户对该数据表的操作无效,如此不会出现序列号冲突,可应用于分布式环境中数据同步。另外,不依赖于具体的编程语言,扩展了其应用范围,每次获取一个序列区间块,减少了数据库的访问次数,提闻了序列号生成效率;序列块中仅记录起始序列号、最大序列号和当前序列号,能节约缓存资源。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。权利要求1.一种数据表处理方法,包括以下步骤创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定;获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;根据所述更新后的序列当前最大值更新所述用户操作的数据表。2.根据权利要求1所述的数据表处理方法,其特征在于,在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定的步骤具体为在所述序列表中查找所述用户操作的数据表的名称,在所述序列表中未查找到时,将所述序列表进行锁定,在所述序列表中创建包含所述用户操作的数据表的名称的记录,初始化所述记录中的序列当前最大值,然后将所述序列表中的包含所述数据表的名称的记录进行锁定。3.根据权利要求1或2所述的数据表处理方法,其特征在于,在获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值的步骤之后还包括步骤形成包含预定值个序列号的序列区间块;根据所述更新后的序列当前最大值更新所述用户操作的数据表的步骤为根据所述序列区间块更新所述用户操作的数据表。4.根据权利要求3所述的数据表处理方法,其特征在于,所述获取用户对所述数据表的操作请求的步骤之后,还包括判断所述序列区间块中序列号是否用完,若是,则获取新的序列区间块,若否,则直接从所述序列区间块中获取序列号,根据获取的序列号更新所述用户操作的数据表,其中,所述序列号小于所述序列当前最大值。5.根据权利要求3所述的数据表处理方法,其特征在于,所述序列区间块中记录了起始序列号、最大序列号和当前序列号。6.一种数据表处理系统,其特征在于,包括创建模块,用于创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取模块,用于获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;查找模块,用于在所述序列表中查找所述用户操作的数据表的名称;处理模块,用于将所述序列表中的包含所述数据表的名称的记录进行锁定,获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;更新模块,用于根据所述更新后的序列当前最大值更新所述用户操作的数据表。7.根据权利要求6所述的数据表处理系统,其特征在于,在所述查找模块在所述序列表中未查找到所述用户操作的数据表的名称时,所述处理模块还用于对将所述序列表进行锁定,在所述序列表中创建包含所述用户操作的数据表的名称的记录,初始化所述记录的序列当前最大值,然后将所述序列表中的包含所述数据表的名称的记录进行锁定。8.根据权利要求6或7所述的数据表处理系统,其特征在于,所述处理模块还用于形成包含预定值个序列号的序列区间块;所述更新模块还用于根据所述序列区间块更新所述用户操作的数据表。9.根据权利要求8所述的数据表处理系统,其特征在于,还包括判断模块,所述判断模块用于在所述获取模块获取所述用户对所述数据表的操作请求后,判断所述序列区间块中序列号是否用完,所述获取模块在所述判断模块判断出所述序列区间块中序列号已用完时,所述处理模块还用于获取新的序列区间块,所述处理模块还用于在所述判断模块判断出所述序列区间块中序列号未用完时,直接从所述序列块中获取序列号,所述更新模块还用于根据获取的序列号更新所述用户操作的数据表,其中,所述序列号小于所述序列当前最大值。10.根据权利要求8所述的数据表处理系统,其特征在于,所述序列块中记录了起始序列号、最大序列号和当前序列号。全文摘要本发明涉及一种数据表处理方法及系统。该方法包括以下步骤创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定;获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;根据所述更新后的序列当前最大值更新所述用户操作的数据表。上述数据表处理方法及系统,由于锁定了记录,可保证某个用户对数据表操作,其他用户对该数据表的操作无效,如此不会出现序列号冲突的情形。文档编号G06F17/30GK102999525SQ20111027627公开日2013年3月27日申请日期2011年9月16日优先权日2011年9月16日发明者陈伟君申请人:深圳市金蝶中间件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1