一种数据库多索引方法、装置及系统的制作方法

xiaoxiao2021-2-28  198

一种数据库多索引方法、装置及系统的制作方法【
技术领域
】[0001]本发明涉及数据库
技术领域
,尤其涉及一种数据库多索引方法、装置及系统。【
背景技术
】[0002]随着互联网应用的广泛普及,数据规模不断扩大,数据库中的表越来越多,表中的数据量也越来越大,相应地,数据操作(例如增、删、改、查)的开销也越来越大,而一台服务器的资源(CPU、磁盘和内存等)是有限的,最终数据库所能承载的数据量和数据处理能力都将遭遇瓶颈。为解决上述问题,引入分库分表机制,对数据进行拆分,将数据分布存储在不同的数据库或者不同的数据表中,降低单点服务器的承载和处理压力,提高了数据操作的效率。[0003]分库分表是通过一系列的分库分表规则将数据分布到不同的DB(数据库)或者table(表)中。通过与分库分表规则相应的DB路由或者table路由规则可以找到需要查询的具体的DB或者table。例如,以数据库的字段userid(用户id)作为indexkey(索引关键字,亦称之为区分字段或者分库的标记字段),即分库的依据和规则的基础,将userid为1~50000的所有用户个人信息放入DB1中的多个userinfo表中,将userid为50001~100000的所有用户个人信息放入DB2中的多个userinfo表中,以此类推;相应地,如果userid是1234,利用前述的规则,则应该定位到DB1,如果userid是54321,则应该定位到DB2,以此类推。其中,indexkey存储于index(索引)表中。[0004]上述举例中,以userid为indexkey,即按照用户维度分表,由于用户的个人信息(例如性别、电话号码、email等)都保存的同一个表中,所以可以很快很方便地查找某个用户的个人信息,但由于email信息很有可能分布在多张表中,如果要查找email被注册的情况则很麻烦。常用的处理方式,是记录两份数据,一份按照用户维度分库分表,一份按照email维度分库分表。也就是说,当需要增加indexkey以方便数据查找时,数据规模也需要扩充,特别是当indexkey很多时,数据规模将会很庞大,而且相应地逻辑库、物理部署和应用层逻辑等都需要调整,工作量也将非常巨大。【
发明内容】[0005]为克服相关技术中分库分表后增加indexkey导致数据规模和工作量大的问题,本申请提供一种数据库多索引方法和系统。[0006]根据本申请实施例的第一方面,提供一种数据库多索引方法,包括:[0007]建立关联索引表,所述关联索引表用于存储数据中主索引关键字值和新索引关键字值的对应关系;[0008]根据数据处理副本记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表;[0009]当根据新索引关键字进行查询时,根据新索引关键字值和关联索引表查找到对应的主索引关键字值;[0010]根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应的数据。[0011]可选的,在根据数据处理副本记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表之前,还包括:[0012]根据被处理数据的主索引关键字,确定被处理数据所在的分库;[0013]在所述数据被存入的数据库中插入所述数据处理副本记录。[0014]可选的,所述数据处理副本记录用于记录待处理状态的数据处理,数据处理副本记录每记录一条待处理的数据,对数据处理副本记录中数据所在的行加锁。[0015]可选的,定时插入数据处理副本记录,当数据处理副本记录中的操作都成功时,根据数据处理记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表。[0016]可选的,所述的数据库多索引方法,还包括:[0017]为所述关联索引表设置版本标志;[0018]在数据处理副本记录中设置更新成功标志,且所述更新成功标志大于所述关联索引表当前的版本标志,其中,每个数据处理副本记录的更新成功标志不同,且按数据处理副本记录中的操作成功的时间顺序递增;[0019]当根据所述数据处理副本记录更新所述关联索引表成功时,设置所述版本标志等于所述数据处理副本的更新成功标志。[0020]可选的,所述的数据库多索引方法,在根据数据处理副本记录中根据主索引关键字值和新索引关键字值的对应关系更新所述关联索引表之后,还包括:[0021]在所述关联索引表更新成功后,删除所述数据处理副本记录。[0022]根据本申请实施例的第二方面,提供一种数据库多索引装置,包括:[0023]关联所以表建立模块,用于建立关联索引表,所述关联索引表用于存储数据中主索引关键字值和新索引关键字值的对应关系;[0024]关联索引表更新模块,用于根据数据处理副本记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表;[0025]查询映射模块,用于当根据新索引关键字进行查询时,根据新索引关键字值和关联索引表查找到对应的主索引关键字值;[0026]查询模块,用于根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应的数据。[0027]可选的,所述的数据库多索引装置,还包括:[0028]分库确定模块,用于根据被处理数据的主索引关键字,确定被处理数据所在的分库;[0029]副本记录插入模块,用于在所述数据被存入的数据库中插入数据处理副本记录。[0030]可选的,所述数据处理副本记录用于记录待处理状态的数据处理,所述副本记录插入模块,包括:[0031]行锁定模块,用于数据处理副本记录每记录一条待处理的数据后,对数据处理副本记录中数据所在的行加锁;[0032]插入模块,用于在数据被存入的数据库中插入数据处理副本记录。[0033]可选的,所述副本记录插入模块定时插入数据处理副本记录。[0034]可选的,所述的数据库多索引装置,还包括:[0035]操作判断模块,用于判断数据处理副本记录中的操作是否都成功;[0036]当数据处理副本记录中的操作都成功时,所述关联索引表更新模块根据数据处理记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表。[0037]可选的,所述的数据库多索引装置,还包括:[0038]关联索引表版本设置模块,用于为所述关联索引表设置版本标志;[0039]更新成功标志设置模块,用于在数据处理副本记录中设置更新成功标志,且所述更新成功标志大于所述关联索引表当前的版本标志,其中,每个数据处理副本记录的更新成功标志不同,且按数据处理副本记录中的操作成功的时间顺序递增;[0040]版本标志更新模块,用于当根据所述数据处理副本记录更新所述关联索引表成功时,设置所述版本标志等于所述数据处理副本的更新成功标志。[0041]可选的,所述的数据库多索引装置,还包括:[0042]副本记录删除模块,用于在所述关联索引表更新成功后,删除所述数据处理副本记录。[0043]根据本申请实施例的第三方面,提供了一种包含上述数据库多索引装置的数据库多索引系统。[0044]本申请实施例提供的技术方案可以包括以下有益效果:通过建立关联索引表,使用关联索引表存储新索引关键字与主索引关键字的对应关系,当使用新索引关键字作为主索引关键字进行查询时,根据新索引关键字在关联索引表中查找到对应的主索引关键字,根据对应的主索引关键字路由到分库分表,完成数据的查询。从而在需要使用新索引关键字进行查询时,不需使用新索引关键字进行分库分表而重新记录一份数据,只需建立并更新关联索引表便可实现,大大降低了数据规模和工作量。[0045]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。【附图说明】[0046]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0047]图1为本申请一示例性实施例示出的一种数据库多索引方法的流程示意图。[0048]图2为本申请另一示例性实施例示出的一种数据库多索引方法的流程示意图。[0049]图3为本申请又一示例性实施例示出的一种数据库多索引方法的流程示意图。[0050]图4为本申请一示例当前第1页1 2 3 4  性实施例示出的一种数据库多索引装置的框图。
[0051] 图5为本申请另一示例性实施例示出的一种数据库多索引装置的框图。
【具体实施方式】
[0052] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及 附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例 中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附 权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0053] 为了全面理解本申请,在以下详细描述中提到了众多具体的细节,但是本领域技 术人员应该理解,本申请可以无需这些具体细节而实现。在其他实施例中,不详细描述公知 的方法、过程、组件和电路,以免不必要地导致实施例模糊。
[0054] 图1为本申请一示例性实施例示出的一种数据库多索引方法的流程示意图。如图 1所示,所述方法包括:
[0055] 步骤S101,建立关联索引表,所述关联索引表用于存储数据中主索引关键字值和 新索引关键字值的对应关系。
[0056] 步骤S102,根据数据处理副本记录中主索引关键字值和新索引关键字值的对应关 系更新所述关联索引表。
[0057] 其中,对于数据库已有的数据可以使用数据库索引生成功能来生成关联索引表。 例如,以userinfo表(用户个人信息表)按字段userid作为indexkey分库,userinfo表 中包括用户的手机、地址、email等信息,userinfo表的结构如表1所示:
[0058] 表 1
[0059]
[0060] 通常为使主索引关键字userid方便索引,会使用hash(哈希)算法将userid转 成一串数字。当希望将其他表中字段作为新的主索引关键字(称之为新索引关键字)时, 为方便主索引字关键字和新索引关键字的对应,以及方便索引,亦可使用hash算法将新索 引关键字的值转换为数字值。例如,希望以userinfo表中的email字段作为新索引关键 字,则将email字段值使用hash算法转换为数字,并在关联索引表中,将userid哈希值和 email哈希值--对应。也可以不使用email的哈希值,而将email字符串直接和ueserid 哈希值对应,关联索引表可以如表2所示。
[0061]
[0062] 关联索引表中可以只包括一个新索引关键字和主索引关键字的对应关系,也就是 说,对每个新索引关键字都建立一个关联索引表。也可以将所有新索引关键字和主索引关 键字的对应关系包括在一个关联索引表中。
[0063] 关联索引表建立后,当发生数据处理操作引起数据表变化时,需要更新所述关联 索引表,所述数据处理包括写入新数据和删除了原有数据。当发生数据处理操作时,为完成 关联索引表的更新,捞取数据库系统中的待处理状态的数据生成数据处理副本记录,数据 处理副本记录的生成过程与数据库其他副本记录的生成过程相同,其中,数据处理副本记 录每记录一条待处理的数据,对数据处理副本记录中数据所在的行加锁,以免出现重复捞 取。当数据处理副本记录可以根据数据写入和删除的规律来选择定时生成、或者由数据写 入或数据删除操作触发,当由数据写入或删除时,即生成数据处理副本记录。由于一般数据 库建立后,而且数据写入和删除通常是批量进行,因此不需根据每个数据的写入和删除来 触发生成数据处理副本记录,而是可以根据数据写入和删除的频率,定时捞取待处理状态 的批量数据生成数据处理副本记录,避免频繁地生成数据处理副本记录,占据系统处理资 源。
[0064] 生成数据处理副本记录后,将数据处理副本记录标记为待处理状态,根据被处理 数据的主索引关键字,确定被处理数据所在的分库,在被处理数据对应的分库插入对应的 数据处理副本记录。如果生成的待处理状态的数据处理副本记录中的数据属于不同的分 库,则将生成的待处理状态的数据处理副本记录根据不同分库划分,分别插入到对应的分 库中。
[0065] 当数据处理副本记录中的操作都成功时,可以将数据处理副本记录标记为待更新 状态,并根据数据处理副本记录中数据的主索引关键字值和新索引关键字值更新关联索引 表。所述更新包括在关键索引表中增加新的主索引关键字值和新索引关键字值的对应关 系,以及删除原有的主索引关键字值和新索引关键字值的对应关系。当根据数据处理副本 记录更新关联索引表成功后,可以将数据处理副本记录标记为成功状态。通常查询数据处 理副本记录的状态是否为成功状态来判断该数据处理副本记录是否已用于更新关联索引 表,以及根据该数据处理副本记录更新关联索引表是否已成功。
[0066] 其中,根据数据处理副本记录更新关联索引表,可以避免根据数据表的变化来更 新关联索引表带来的工作量大、效率低的问题。在被处理数据所在的分库中插入数据处理 副本记录,有助于数据处理操作和数据处理副本记录状态的一致。所述数据处理副本记录 也可以位于生成数据处理副本记录的数据库,而不插入被处理数据所在的分库,但由于被 处理数据和相应的操作,与数据处理副本记录不同库,较难保持数据处理操作和数据处理 副本记录状态的一致。
[0067] 当根据数据处理副本记录更新完关联索引表且成功后,可以删除所述数据处理副 本记录,以节省数据库空间。可以通过查询数据处理副本记录的状态是否为成功状态来判 断是否根据数据处理副本记录更新关联索引表成功。
[0068] 步骤S103,当根据新索引关键字进行查询时,根据新索引关键字值和关联索引表 查找到对应的主索引关键字值。
[0069] 步骤S104,根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应 的数据。
[0070] 其中,当查询时,查询条件以新索引关键字替代主索引关键字时,根据查询条件中 的新索引关键字值在关联索引表中查找到对应的主索引关键字值。如果关联索引表中使用 新索引关键字的哈希值与主索引关键字的哈希值对应,则将查询条件中的新索引关键字值 转换为哈希值,然后根据新索引关键字的哈希值查找到对应的主索引关键字的哈希值,如 果分库规则是根据主索引关键字的哈希值分库的,则根据查找到的对应的主索引关键字的 哈希值路由到分库中的数据表,如果分库规则是主索引关键字的原始值分库的,则将查找 到的对应的主索引关键字的哈希值转换为主索引关键字的原始值,根据转换得到的主索引 关键字的原始值路由到分库的数据表。路由到分库的数据表后,获取与查询条件对应的数 据。
[0071] 图2为本申请另一示例性实施例示出的一种数据库多索引方法的流程示意图。如 图2所示,所述方法包括:
[0072] 步骤S201,建立关联索引表,并设置关联索引表版本标志,所述关联索引表用于存 储数据中主索引关键字值和新索引关键字值的对应关系。
[0073] 步骤S202,捞取数据库系统中的待处理状态的数据生成数据处理副本记录。
[0074] 步骤S203,根据被处理数据的主索引关键字,确定被处理数据所在的分库,在被处 理数据对应的分库插入对应的数据处理副本记录。
[0075] 步骤S204,在所述数据处理副本记录中设置更新成功标志,所述更新成功标志的 值大于当前关联索引表版本标志的值,其中,每个数据处理副本记录的更新成功标志不同, 且按数据处理副本记录中的操作成功的时间顺序递增。
[0076] 步骤S205,当所述数据处理副本记录中的操作都成功时,比较所述所述数据处理 副本记录的更新成功标志和关联索引表版本标志,判断所述操作成功标志是否大于所述版 本标志。
[0077] 步骤S206,如果所述操作成功标志大于关联索引表版本标志,根据所述数据处理 副本记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表。
[0078] 步骤S207,当所述关联索引表更新成功时,设置关联索引表版本标志的值等于所 述数据处理副本记录的更新成功标志的值。
[0079] 其中,由于被处理的数据可能位于多个分库,为使被处理的数据和相应的操作,与 对应的数据处理副本记录一致,生成的数据处理副本记录可能也会相应地进行划分后位于 多个库中,如果数据处理副本记录与关联索引表不同库,那么将难以实现相应的数据库事 务的一致性,相应的数据库事务难以回滚,当关联索引表更新失败时,更新事务难以回滚会 造成关联索引表无法正确完成更新。通过为关联索引表设置版本标志,以及为数据处理副 本记录设置更新成功标志,且设置所述更新成功标志时,是使所述更新成功标志的值大于 当前关联索引表版本标志的值,由此可以通过比较数据处理副本记录更新成功标志的值和 关联索引表版本标志的值,当某个数据处理副本记录更新成本标志大于关联索引表版本标 志时,说明关联索引表尚未根据该数据处理副本记录更新或者更新失败,此时可以根据该 数据处理副本记录更新关联索引表,或者重 新根据该数据处理副本记录更新关联索引表, 以保证关联索引表正常且正确地更新。
[0080] 步骤S208,当根据所述数据处理副本记录更新关联索引表成功后,删除所述数据 处理副本记录。
[0081] 步骤S209,当根据新索引关键字进行查询时,根据新索引关键字值和关联索引表 查找到对应的主索引关键字值。
[0082] 步骤S2010,根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应 的数据。
[0083] 其中,步骤S209和步骤S2010分别和步骤S103和步骤S104相同。
[0084] 图3为本申请另一示例性实施例示出的一种数据库多索引方法的流程示意图。如 图3所示,所述方法包括:
[0085] 步骤S301,建立关联索引表,并设置关联索引表版本标志,所述关联索引表用于存 储数据中主索引关键字值和新索引关键字值的对应关系。
[0086] 步骤S302,捞取数据库系统中的待处理状态的数据生成数据处理副本记录,将数 据处理副本记录标记为待处理状态。
[0087] 步骤S303,根据被处理数据的主索引关键字,确定被处理数据所在的分库,在被处 理数据对应的分库插入对应的数据处理副本记录。
[0088] 步骤S304,在所述数据处理副本记录中设置更新成功标志,所述更新成功标志的 值大于当前关联索引表版本标志的值,其中,每个数据处理副本记录的更新成功标志不同, 且按数据处理副本记录中的操作成功的时间顺序递增。
[0089] 步骤S305,当所述数据处理副本记录中的操作都成功时,将数据处理副本记录标 记为待更新状态。
[0090] 步骤S306,当数据处理副本记录状态为待更新状态时,比较所述所述数据处理副 本记录的更新成功标志和关联索引表版本标志,判断所述操作成功标志是否大于所述版本 松c志。
[0091] 步骤S307,如果所述操作成功标志大于关联索引表版本标志,根据所述数据处理 副本记录中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表。
[0092] 步骤S308,当所述关联索引表更新成功时,设置关联索引表版本标志的值等于所 述数据处理副本记录的更新成功标志的值,将所述数据处理副本记录标记为成功状态。
[0093] 其中,当所述数据处理副本记录中的操作都成功时,将数据处理副本记录标记为 待更新状态,由此可以通过查询数据处理副本记录的状态判断该数据处理副本记录是否可 以用于更新关联索引表,亦即当数据处理副本记录为待更新状态时,可以根据该数据处理 副本记录更新关联索引表。从而防止将操作没有都成功的数据处理副本记录用于更新关联 索引表的误处理,避免关联索引表更新错误。
[0094] 其中,通过为关联索引表设置版本标志,以及为数据处理副本记录设置更新成功 标志,且设置所述更新成功标志时,是使所述更新成功标志的值大于当前关联索引表版本 标志的值,由此可以通过比较数据处理副本记录更新成功标志的值和关联索引表版本标志 的值,当某个数据处理副本记录更新成本标志大于关联索引表版本标志时,说明关联索引 表尚未根据该数据处理副本记录更新或者更新失败,此时可以根据该数据处理副本记录更 新关联索引表,或者重新根据该数据处理副本记录更新关联索引表,以保证关联索引表正 常且正确地更新。其中,每个数据处理副本记录的更新成功标志不同,且按数据处理副本记 录中的操作都成功的时间的时间顺序递增,数据处理副本记录的更新成功标志可以由数据 库的sequence表(Sequence表是数据库中存放等差数列的表,该表受数据库系统控制,任 何时候数据库系统都可以根据当前记录的大小加上步长来获取到该表下一条记录)管理。 如果某个数据处理副本记录由于数据库处理的错误未能及时用于更新关联索引表,而关联 索引表根据其他数据处理副本记录更新后版本标志增加,使关联索引表的版本标志大于该 数据处理副本记录的更新标志,则可以通过查询该数据处理副本记录的状态是否为成功状 态判断该数据处理副本记录是否已用于更新关联索引表及更新关联索引表成功。结合数 据处理副本记录的更新成功标志、关联索引表的版本标志以及数据处理副本记录的状态可 以充分地保证关联索引表更新正确,避免遗漏数据处理副本记录而未根据其更新关联索引 表。
[0095] 当根据数据处理副本记录更新完关联索引表且成功后,可以删除所述数据处理副 本记录,以节省数据库空间。可以通过查询数据处理副本记录的状态是否为成功状态来判 断是否已根据数据处理副本记录更新关联索引表成功。
[0096] 步骤S309,当根据新索引关键字进行查询时,根据新索引关键字值和关联索引表 查找到对应的主索引关键字值。
[0097] 步骤S3010,根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应 的数据。
[0098] 其中,步骤S309和步骤S3010分别和步骤S103和步骤S104相同。
[0099] 本申请实施例提供的数据库多索引方法,通过建立关联索引表,使用关联索引表 存储新索引关键字与主索引关键字的对应关系,当使用新索引关键字作为主索引关键字进 行查询时,根据新索引关键字在关联索引表中查找到对应的主索引关键字,根据对应的主 索引关键字路由到分库分表,完成数据的查询。从而在需要使用新索引关键字进行查询时, 不需使用新索引关键字进行分库分表,重新记录一份数据,只需建立并更新关联索引表便 可实现,大大降低了数据规模和工作量。
[0100] 通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本申请可 借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者 是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡 献的部分可以以软件产品的形式体现出来,并存储在一个存储介质中,包括若干指令用以 使得一台智能设备执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质 包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储数据和程 序代码的介质。
[0101] 图4为本申请一示例性实施例示出的一种数据库多索引装置的框图。如图3所示, 在一种可能的实施方式中,所述装置包括:
[0102] 关联索引表建立模块U401,用于建立关联索引表,所述关联索引表用于存储数据 中主索引关键字值和新索引关键字值的对应关系;
[0103] 关联索引表更新模块U402,与U402连接,用于根据数据处理副本记录中主索引关 键字值和新索引关键字值的对应关系更新所述关联索引表;
[0104] 查询映射模块U403,与U402连接,用于当根据新索引关键字进行查询时,根据新 索引关键字值和关联索引表查找到对应的主索引关键字值;
[0105] 查询模块U404,与U403连接,用于根据所述查找到的对应的主索引关键字值路由 到数据表,并获取对应的数据。
[0106] 所述的数据库多索引装置,还包括:
[0107] 数据处理副本记录生成模块,用于根据被处理数据生成数据处理副本记录,所述 数据处理副本记录生成模块可以为常用的数据库副本记录生成模块。
[0108] 图5为本申请另一示例性实施例示出的一种数据库多索引装置的框图。如图4所 示,在另一种可能的实施方式中,所述装置包括:
[0109] 关联索引表建立模块U501,用于建立关联索引表,所述关联索引表用于存储数据 中主索引关键字值和新索引关键字值的对应关系;
[0110] 关联索引表版本设置模块U502,与U501连接,用于为所述关联索引表设置版本标 志;
[0111] 数据处理副本记录生成模块U503,用于根据被处理数据生成数据处理副本记录;
[0112] 分库确定模块U504,与U503连接,用于根据被处理数据的主索引关键字,确定被 处理数据所在的分库;
[0113] 副本记录插入模块U505,与U503和U504连接,用于在被处理数据所在的分库中插 入数据处理副本记录。
[0114] 更新成功标志设置模块U506,与U505连接,用于在数据处理副本记录中设置更新 成功标志,且所述更新成功标志大于所述关联索引表当前的版本标志,其中,每个数据处理 副本记录的更新成功标志不同,且按数据处理副本记录中的操作成功的时间顺序递增;
[0115] 操作判断模块U507,与U505连接,用于判断数据处理副本记录中的操作是否都成 功;
[0116] 比较模块U508,与U507和U5010连接,用于当数据处理副本记录中的操作都成功 时,比较所述更新成功标志和所述版本标志的大小;
[0117] 关联索引表更新模块U509,与U501和U508连接,用于当所述更新成功标志大于所 述版本标志时,根据数 据处理副本记录中主索引关键字值和新索引关键字值的对应关系更 新所述关联索引表;
[0118] 版本标志更新模块U5010,与U509连接,用于当所述关联索引表更新成功时,设置 所述版本标志等于所述数据处理副本的更新成功标志;
[0119] 副本记录删除模块U5011,与U5010连接,用于在根据所述数据处理副本记录更新 所述关联索引表成功后,删除所述数据处理副本记录。
[0120] 查询映射模块U5012,与U501连接,用于当根据新索引关键字进行查询时,根据新 索引关键字值和关联索引表查找到对应的主索引关键字值;
[0121] 查询模块U5013,与U5012连接,用于根据所述查找到的对应的主索引关键字值路 由到数据表,并获取对应的数据。
[0122] 其中,在一种可能的实施方式中,所述副本记录插入模块用于定时插入数据处理 副本记录。
[0123] 其中,在一种可能的实施方式中,所述副本记录插入模块,可以包括:
[0124] 行锁定模块,所述数据处理副本记录用于记录待处理状态的数据处理,数据处理 副本记录每记录一条待处理的数据,对数据处理副本记录中数据所在的行加锁;
[0125] 插入模块,用于在被处理数据所在的分库库中插入数据处理副本记录。
[0126] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本 申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0127] 根据本申请实施例的第三方面,提供一种包含上述数据库多索引装置的数据库多 索引系统。所述数据库多索引系统使用所述数据库多索引装置建立关联索引表来实现多个 索引关键字的查询,相比常规的多索引数据库系统数据量小且查询快速。
[0128] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部 分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或 系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法 实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为 分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或 者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根 据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术 人员在不付出创造性劳动的情况下,即可以理解并实施。
[0129] 需要说明的是,在本文中,诸如"第一"和"第二"等之类的关系术语仅仅用来将一 个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之 间存在任何这种实际的关系或者逆序。而且,术语"包括"、"包含"或者其任何其他变体意 在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那 些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者 设备所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不 排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0130] 以上所述仅是本申请的【具体实施方式】,使本领域技术人员能够理解或实现本申 请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
【主权项】
1. 一种数据库多索引方法,其特征在于,包括: 建立关联索引表,所述关联索引表用于存储数据中主索引关键字值和新索引关键字值 的对应关系; 根据数据处理副本记录中主索引关键字值和新索引关键字值的对应关系更新所述关 联索引表; 当根据新索引关键字进行查询时,根据新索引关键字值和关联索引表查找到对应的主 索引关键字值; 根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应的数据。2. 如权利要求1所述的数据库多索引方法,其特征在于,在根据数据处理副本记录中 主索引关键字值和新索引关键字值的对应关系更新所述关联索引表之前,还包括: 根据被处理数据的主索引关键字,确定被处理数据所在的分库; 在所述数据被存入的数据库中插入所述数据处理副本记录。3. 如权利要求2所述的数据库多索引方法,其特征在于,所述数据处理副本记录用于 记录待处理状态的数据处理,数据处理副本记录每记录一条待处理的数据,对数据处理副 本记录中数据所在的行加锁。4. 如权利要求2所述的数据库多索引方法,其特征在于,定时插入数据处理副本记录, 当数据处理副本记录中的操作都成功时,根据数据处理记录中主索引关键字值和新索引关 键字值的对应关系更新所述关联索引表。5. 如权利要求4所述的数据库多索引方法,其特征在于,还包括: 为所述关联索引表设置版本标志; 在数据处理副本记录中设置更新成功标志,且所述更新成功标志大于所述关联索引表 当前的版本标志,其中,每个数据处理副本记录的更新成功标志不同,且按数据处理副本记 录中的操作成功的时间顺序递增; 当根据所述数据处理副本记录更新所述关联索引表成功时,设置所述版本标志等于所 述数据处理副本的更新成功标志。6. 如权利要求4或5所述的数据库多索引方法,其特征在于,在根据数据处理副本记录 中根据主索引关键字值和新索引关键字值的对应关系更新所述关联索引表之后,还包括: 在所述关联索引表更新成功后,删除所述数据处理副本记录。7. -种数据库多索引装置,其特征在于,包括: 关联所以表建立模块,用于建立关联索引表,所述关联索引表用于存储数据中主索引 关键字值和新索引关键字值的对应关系; 关联索引表更新模块,用于根据数据处理副本记录中主索引关键字值和新索引关键字 值的对应关系更新所述关联索引表; 查询映射模块,用于当根据新索引关键字进行查询时,根据新索引关键字值和关联索 引表查找到对应的主索引关键字值; 查询模块,用于根据所述查找到的对应的主索引关键字值路由到数据表,并获取对应 的数据。8. 如权利要求7所述的数据库多索引装置,其特征在于,还包括: 分库确定模块,用于根据被处理数据的主索引关键字,确定被处理数据所在的分库; 副本记录插入模块,用于在所述数据被存入的数据库中插入数据处理副本记录。9. 如权利要求8所述的数据库多索引装置,其特征在于,所述数据处理副本记录用于 记录待处理状态的数据处理,所述副本记录插入模块,包括: 行锁定模块,用于数据处理副本记录每记录一条待处理的数据后,对数据处理副本记 录中数据所在的行加锁; 插入模块,用于在数据被存入的数据库中插入数据处理副本记录。10. 如权利要求8所述的数据库多索引装置,其特征在于,所述副本记录插入模块定时 插入数据处理副本记录。11. 如权利要求7所述的数据库多索引装置,其特征在于,还包括: 操作判断模块,用于判断数据处理副本记录中的操作是否都成功; 当数据处理副本记录中的操作都成功时,所述关联索引表更新模块根据数据处理记录 中主索引关键字值和新索引关键字值的对应关系更新所述关联索引表。12. 如权利要求11所述的数据库多索引装置,其特征在于,还包括: 关联索引表版本设置模块,用于为所述关联索引表设置版本标志; 更新成功标志设置模块,用于在数据处理副本记录中设置更新成功标志,且所述更新 成功标志大于所述关联索引表当前的版本标志,其中,每个数据处理副本记录的更新成功 标志不同,且按数据处理副本记录中的操作成功的时间顺序递增; 版本标志更新模块,用于当根据所述数据处理副本记录更新所述关联索引表成功时, 设置所述版本标志等于所述数据处理副本的更新成功标志。13. 如权利要求11或12所述的数据库多索引装置,其特征在于,还包括: 副本记录删除模块,用于在所述关联索引表更新成功后,删除所述数据处理副本记录。14. 一种包括权利要求7至13所述数据库多索引装置的数据库多索引系统。
【专利摘要】本申请实施例公开了一种数据库多索引方法、装置及系统。通过建立关联索引表,使用关联索引表存储新索引关键字与主索引关键字的对应关系,当使用新索引关键字作为主索引关键字进行查询时,根据新索引关键字在关联索引表中查找到对应的主索引关键字,根据对应的主索引关键字路由到分库分表,完成数据的查询。通过使用关联索引表来代替使用新索引关键字进行分库分表,从而避免重新记录一份或多份数据,大大降低了数据规模和工作量。
【IPC分类】G06F17/30
【公开号】CN105488050
【申请号】CN201410475100
【发明人】于君泽
【申请人】阿里巴巴集团控股有限公司
【公开日】2016年4月13日
【申请日】2014年9月17日

最新回复(0)