数据库表索引的实现方法和装置与流程

文档序号:12719778阅读:226来源:国知局
本申请涉及数据处理
技术领域
:,尤其涉及一种数据库表索引的实现方法和装置。
背景技术
::随着技术的发展,各种网络应用日渐深入人们的生活。这些应用的业务系统需要使用和管理日益增加的各种业务数据,来完成其业务过程。业务数据通常以表的结构存放在数据库中,为了加快对表中数据的访问速度,可以在数据库表中建立索引。索引是对数据库表中一列或多列的值进行排序的一种结构,采用索引查找表中的记录(行)能够基于特定的算法来进行,而不必进行全表扫描,有助于更快的获取信息。唯一性索引还可以用来确保索引列不包含重复的值,例如多列唯一性索引可以确保索引列中每个值组合都是唯一的。一些中小型的数据库对索引的长度做出了限制,例如,MySQL(一种关系型数据库管理系统)数据库中,采用MyISAM存储引擎的表的最大索引长度是1000字节,采用InnoDB存储引擎的表的最大索引长度是3072字节。而很多业务系统的数据库表中包括长度超过最大索引长度的列,例如用来保存KV(Key-Value,键-值)结构或JSON(JavaScriptObjectNotation,JavaScript对象表示法)序列化字符串的列。现有技术中,对具有索引长度限制的数据库表,只能对长度不超过最大索引长度的列建立索引。当用来建立索引的列可能超过最大索引长度时,只能对该列的值进行限制,这样会造成业务信息的损失,在一些情况下甚至难以满足业务上的要求;如果不损失业务信息,就只能接受查询速度下降,业务响应迟滞的结果;对需要以超过最大索引长度的列来建立唯一性索引的应用场景,无法建立索引造成多条相同的记录保存在数据库表中。技术实现要素:有鉴于此,本申请提供一种数据库表索引的实现方法,所述数据库表包括至少一个用来建立索引的摘要列,每个摘要列对应于一个所述数据库表中的引用列,所述方法包括:获取所述数据库表中摘要列和引用列的对应关系;当在所述数据库表中新增记录时,在所述记录中与引用列对应的摘要列保存所述引用列值的摘要值;当对所述数据库表的操作以引用列及其列值为条件时,将条件中的引用列替换为对应的摘要列,将条件中的引用列值替换为所述引用列值的摘要值后,进行所述操作。本申请还提供了一种数据库表索引的实现装置,所述数据库表包括至少一个用来建立索引的摘要列,每个摘要列对应于一个所述数据库表中的引用列,所述装置包括:对应关系获取单元,用于获取所述数据库表中摘要列和引用列的对应关系;新增记录处理单元,用于当在所述数据库表中新增记录时,在所述记录中与引用列对应的摘要列保存所述引用列值的摘要值;条件操作处理单元,用于当对所述数据库表的操作以引用列及其列值为条件时,将条件中的引用列替换为对应的摘要列,将条件中的引用列值替换为所述引用列值的摘要值后,进行所述操作。由以上技术方案可见,本申请的实施例中,在数据库表中增加对应于引用列的摘要列,用来保存引用列值的摘要值,采用摘要列来生成索引,并在对数据库表进行以引用列及其列值为条件的操作时,将其替换为以对应的摘要列及其列值为条件,这样即使引用列的长度超过最大索引长度,也能够建立索引来加快数据操作速度和业务响应速度,并且不会因限制列长度损失业务数据的完整性,在建立的索引为唯一性索引时还能够避免数据库表中出现重复的记录。附图说明图1是业务系统访问数据库的第一种方式的网络结构示意图;图2是业务系统访问数据库的第二种方式的网络结构示意图;图3是本申请实施例中一种数据库表索引的实现方法的流程图;图4是运行本申请实施例的设备的一种硬件结构图;图5是本申请实施例中一种数据库表索引的实现装置的逻辑结构图。具体实施方式本申请的实施例提出一种新的数据库表索引的实现方法,对列长度可能超过最大索引长度的引用列,在数据库表中增加对应的摘要列,以引用列值的摘要值作为摘要列的值,采用摘要列而非引用列即可建立满足长度限制条件的索引,不仅能够通过该索引提升对表数据的操作速度,而且无需缩减引用列中的业务数据,从而解决现有技术中的问题。业务系统通常通过两种方式来对数据库进行访问,第一种方式如图1所示,业务系统通过数据库中间件来对数据库表进行操作,添加、删除、更新、查询其中的业务数据;第二种方式如图2所示,业务系统直接访问数据库,在这种方式中,通常业务系统的实现包括业务逻辑层和数据访问层,其中业务逻辑层用来实现业务过程,并通过数据访问层来操作数据库表。在第一种方式中,本申请的实施例应用在数据库中间件上,业务系统无需更改现有的对数据库表的操作;在第二种方式中,本申请的实施例应用在数据访问层,类似的,业务逻辑层无需修改现有实现即可完成对数据库表的操作。根据实际应用中业务系统和数据库的具体实现,本申请的实施例也可以应用在其他具有数据库访问控制功能的逻辑单位、服务或系统中,不做限定。以下将应用本申请实施例的逻辑单位、服务或系统统称为访问控制功能模块,将通过访问控制功能模块进行数据库表操作的逻辑单位、服务或系统统称为业务功能模块。本申请的实施例可以运行在任何具有计算和存储能力的设备上,例如可以是手机、平板电脑、PC(PersonalComputer,个人电脑)、笔记本、服务器、虚拟机等物理设备或逻辑设备;也可以由两个或两个以上分担不同职责的物理或逻辑设备、相互协同来实现本申请实施例中的各项功能。本申请的实施例中,将数据库表中列长度可能超过索引最大长度、并且在业务过程中需要根据列值查询数据库表记录的列作为引用列,还可以根据实际场景的具体情况将数据库表中其他会用来查询记录的列作为引用列。一个数据库表中可以有一个到多个引用列。在确定引用列后,在数据库表中为每个引用列增加一个对应的摘要列,摘要列用来存储对应的引用列的摘要值,即:每个数据库表记录的摘要列值为该记录对应的引用列值的摘要值,其中,摘要值是将引用列值输入预定的摘要算法后得到的结果。本申请实施例对摘要算法的选择不做限定,例如,各种版本的CRC(CyclicRedundancyCheck,循环冗余校验)、MD(Message-DigestAlgorithm,消息摘要算法)、SHA(SecureHashAlgorithm,安全哈希算法)等。当有超过一个的摘要列用来生成多列索引、或某个摘要列与其他列用来生成多列索引时,要选择使用于生成某个索引的所有摘要列和其他列的列长度总和小于所在数据库表最大索引长度的摘要算法。摘要算法用来根据一定的运算规则对输入数据进行某种形式的提取,提出的内容即为摘要数据,摘要数据与输入数据有密切联系,只要输入数据稍有改变,摘要数据便完全不同。这样,以引用列值查询数据库表,和以引用列值的摘要值查询数据库表,在数据库表的容量范围内基本可以得到完全相同的查询结果,因此,可以用摘要列替代对应的引用列来建立索引,以引用列值的摘要值来使用索引,从而避免因列长度超过索引长度限制而导致数据库访问速度下降。需要说明的是,在数据库表中增加的摘要列可以对业务功能模块不可见,换言之,业务功能模块只要按照现有的方式进行数据库表中业务数据的操作即可,而无需了解数据库表中是否有摘要列、以及是否需要使用由摘要列建立的索引。访问控制功能模块可以参照现有技术来在数据库表中添加摘要列,并给基于包括摘要列在内的一个到多个列建立索引(也可以由人工完成),本申请的实施例不做限定。各种数据库都会保存并在运行时加载元数据,按照元数据生成数据库中的各种对象(如数据库本身、表、视图等)。元数据是用来描述数据的数据,包括数据库中的各种对象的定义信息,其中数据库表的元数据可以包括表中各个列的列名、列长度、列类型、以及对全部索引的定义等;同时数据库也提供了创建、修改或删除元数据的工具,例如,可以采用通用于多种数据库的DDL(DataDefinitionLanguage数据定义语言)语句来为数据库表添加列、添加列注释、添加索引等等。可见,访问控制功能模块利用修改工具改变数据库表的元数据,即可在该数据库表中添加摘要列、建立新的索引。本申请的实施例中,数据库表索引的实现方法的流程如图3所示。数据库表包括至少一个用来建立索引的摘要列,每个摘要列对应于一个数据库表中的引用列步骤310,获取所述数据库表中摘要列和引用列的对应关系。访问控制功能模块在某个数据库表的元数据中添加摘要列和以摘要列生成的索引后,数据库根据新的元数据加载该数据库表,加载后该数据库表中即包括摘要列和以摘要列生成的索引。在对该数据库表的记录执行具体操作前,访问控制功能模块需要知道摘要列对应于哪个引用列,以便确定记录中摘要列的值和根据摘要列值使用索引。例如,可以在访问控制功能模块的代码中直接写入某个数据库表中的每个摘要列以及与该摘要列对应的引用列,这样访问控制功能模块在运行过程即可得到该对应关系;再如,可以将某个数据库表中的每个摘要列与引用列的对应关系写入预定的配置文件中,访问控制功能模块读取该配置文件即可获得这一对应关系。在一种实施方式中,可以在数据库表的元数据中以预定方式表明哪个列是摘要列或哪个列是引用列、以及摘要列与引用列的对应关系,这样按照与该预定方式相匹配的摘要列发现规则,访问控制功能模块可以在数据库表的元数据中发现摘要列与引用列的对应关系。以下举例说明:第一个例子中,在对摘要列命名时,在列名中带有预定摘要列标志和其对应的引用列列名。预定摘要列标志用来表示本列为摘要列,可以采用不会在该数据库表的其他列名中完整出现的字符串作为预定摘要列标志,例如'*-digest-*',还可以规定该预定摘要列标志在列名中的位置,如开头或结尾。与本摘要列对应的引用列的列名也可以以预定的位置或预定的格式出现。这样,如果元数据中数据库表的列名带有预定摘要列标志字符串,并且该列名被数据库表的索引引用(即采用该列来建立索引),访问控制功能模块即可知道,该列是摘要列,并且从其列名中的预定位置找到对应的引用列列名、或查找出在列名中以预定格式出现的引用列列名。第二个例子中,在元数据的摘要列注释中,写入预定摘要列标志和其对应的引用列的列名。预定摘要列标志用来表明本列是摘要列,可以采用不会出现在本数据库表的其他列注释中的预定字符串来作为预定摘要列标志,例如'*-digest-*'、或'Thiscolisadigestcol.'等。类似的,所对应的引用列的列名也可以采用能够辨识的约定格式写入到摘要列注释中,如'-*OriginalColName*-'、或'AbstractedfromOriginalColName.'等。这样,访问控制功能模块如果从元数据的某个列注释中发现了预定摘要列标志,并且该列被数据库表的索引引用,则可以确定该列是摘要列,并且从该列注释中可以得到该摘要列对应的引用列。第三个例子中,在元数据的引用列注释中,写入预定引用列标志和其对应的摘要列的列名。预定引用列标志用来表明本列是引用列,可以采用不会出现在本数据库表的其他列注释中的预定字符串来作为预定引用列标志,例如'*-Original-*'、或'Thiscolisaoriginalcol.'等。类似的,所对应的摘要列的列名也可以采用能够辨识的约定格式写入到引用列注释中,如'-*DigestColName*-'、或'AbstractingtoDigestColName.'等。这样,访问控制功能模块如果从元数据的某个列注释中发现了预定引用列标志,并且该列注释中的摘要列被数据库表的索引引用,则可以确定该列是引用列,并且该列注释中的摘要列即为该引用列对应的摘要列。访问控制功能模块可以在每次对数据库表中进行操作时获取摘要列和引用列的对应关系;也可以在访问控制功能模块启动时获取该对应关系并缓存,用于后续对该数据库表的操作;还可以在首次对该数据库表进行操作时获取给对应关系并缓存。步骤320,当在该数据库表中新增记录时,在该记录中与引用列对应的摘要列保存该引用列值的摘要值。业务功能模块要在该数据库表中增加一条记录时,采用插入记录指令,以新增记录中若干个列及其列值为参数,调用访问控制功能模块。由于在该数据库表中增加的摘要列通常对业务功能模块不可见,因此在插入记录指令的参数中往往不包括摘要列及其列值。访问控制功能模块在该数据库表中添加记录时,不仅将插入记录指令中各个列的列值分别写入新增记录对应的列中,而且为每个引用列按照预定的摘要算法计算其列值的摘要值,写入到与该引用列对应的摘要列中。具体而言,访问控制功能模块可以采用两种方式来执行插入记录指令。第一种方式是,在收到业务功能模块的插入记录指令后,先修改插入记录指令,在插入记录指令中增加摘要列及其列值,摘要列值为摘要列对应的引用列值的摘要值;然后执行修改后的插入记录指令,将新增记录中包括摘要列值在内的各个列值写入到对应的列中。第二种方式是,在收到业务功能模块的插入记录指令后,先执行该插入记录指令,将参数中包括的列值写入到新增记录对应的列中;再生成并执行对新增记录的更新指令,在更新指令中将新增记录的摘要列值更新为与该摘要列对应的引用列值的摘要值。当业务功能模块修改数据库表指定记录中的引用列值时,采用针对指定记录的更新指令,以引用列及其新引用列值为参数,调用访问控制功能模块。在引用列值变化时,其对应的摘要列值应该随之变化,但是更新指令的参数中通常不包括对应的摘要列及其新摘要列值。访问控制功能模块在修改指定记录的引用列值时,不仅将指定记录的引用列值更新为新引用列值,并且将该记录中与要修改的引用列对应的摘要列值更新为新引用列值的摘要值。具体而言,访问控制功能模块可以采用两种方式来执行对指定记录中引用列值的更新指令。第一种方式是,在收到业务功能模块的更新指令后,先修改更新指令,在更新指令中增加与要修改的引用列对应的摘要列及其新摘要列值,新摘要列值为新引用列值的摘要值;然后执行修改后的更新指令,将指定记录中的引用列和对应的摘要列的列值分别修改为新引用列值和新摘要列值。第二种方式是,在收到业务功能模块对指定记录的更新指令后,先执行该更新指令,将指定记录的引用列修改为更新指令参数中的新引用列值;再生成并执行对指定记录的另一条更新指令,这条更新指令用来将指定记录中与被修改列值的引用列对应的摘要列值更新为新引用列值的摘要值。需要说明的是,当数据库表中新增记录后,数据库将自动按照新增记录中的摘要列值更新采用摘要列生成的索引;同样,当修改现有记录中引用列及其对应的摘要列的列值后,数据库将自动按照修改后的摘要列值更新以该摘要列生成的索引。步骤330,当对数据库表的操作以引用列及其列值为条件时,将条件中的引用列替换为对应的摘要列,将条件中的引用列值替换为该引用列值的摘要值后,进行该操作。当业务功能模块以引用列及其列值为条件对数据库表进行记录的查询、删除、更新等操作时,采用相应的操作指令(如查询指令、删除指令或更新指令),调用访问控制功能模块,该操作指令的条件中包括引用列及其列值。以引用列及其列值为条件,意味着操作所针对的记录的是引用列的列值符合该条件的记录。为了能够利用所建立的索引提高对记录的检索速度,访问控制功能模块在收到以引用列及其列值为条件的操作指令后,以该引用列对应的摘要列替换条件中的引用列,以该引用列值的摘要值替换条件中的该引用列值,并执行替换后的操作指令;换言之,访问控制模块以对应于该引用列的摘要列及其列值(该引用列值的摘要值)为条件,而不是以该引用列及其列值为条件,来对数据库表进行操作。可见,本申请的实施例中,对列长度可能超过最大索引长度的引用列,在数据库表中增加对应的摘要列,用来保存引用列值的摘要值,采用摘要列来建立满足长度限制条件的索引,并且通过将数据库表操作的条件中的引用列及其列值替换为对应的摘要列及其列值,利用基于摘要列建立的索引来加快数据操作速度和业务响应速度,同时由于无需限制引用列的长度而不会损失业务数据的完整性。另外,对于需要以引用列值为基础建立唯一性索引的应用场景,现有技术中会因引用列长度超过索引长度限制而无法建立唯一性索引,导致数据库表中可能存在相同的记录。应用本申请的实施例后,采用摘要列建立唯一性索引即可避免数据库表中记录重复的情况发生。在本申请的一个应用示例中,业务系统通过数据库中间件来对MySQL数据库中的一张名为contact_way的表进行操作。表contact_way用来保存用户的联系方式,其结构如表1所示:表1表1中,列contact_way_id为contact_way表中的记录编号;列user_id为用户标识,是contact_way表的主键;列contact_way_type为用户的联系方式类型;列contact_way_value为用户的具体联系方式信息;列gmt_modified为记录的最后修改时间;列gmt_create为记录的创建时间。contact_way表的建表DDL语句中记载了contact_way表的元数据:createtablecontact_way(contact_way_idvarchar(32)notnullcomment'contactwayid',user_idvarchar(32)notnullcomment'userid',contact_way_typevarchar(20)notnullcomment'contactwaytype',contact_way_valuevarchar(2048)notnullcomment'contactwayvalue',gmt_modifiedtimestampnotnullcomment'lastmodifieddatetime',gmt_createtimestampnotnullcomment'createddatetime',primarykey(contact_way_id))comment='contactway';列contact_way_value采用UTF8字符集来保存用户的联系方式字符串,联系方式字符串最大长度为2048字符,这样列contact_way_value的列长度为9144字节,已经超过MySQL的最大索引长度。由于需要以列contact_way_value为基础来建立索引,则可以将列contact_way_value作为引用列。通过修改contact_way表的建表DDL语句,在contact_way表中增加引用列contact_way_value对应的摘要列contact_way_value_digest_,采用摘要列contact_way_value_digest_建立两个索引,分别是采用列user_id、列contact_way_type和摘要列contact_way_value_digest_建立的唯一性索引uk_contact_way,和采用摘要列contact_way_value_digest_、列contact_way_type和列contact_way_id建立的索引idx_value_type,修改后的DDL语句为:createtablecontact_way(contact_way_idvarchar(32)notnullcomment'contactwayid',user_idvarchar(32)notnullcomment'userid',contact_way_typevarchar(20)notnullcomment'contactwaytype',contact_way_valuevarchar(2048)notnullcomment'contactwayvalue',contact_way_value_digest_varchar(128)notnullcomment'contactwayvaluedigest',gmt_modifiedtimestampnotnullcomment'lastmodifieddatetime',gmt_createtimestampnotnullcomment'createddatetime',primarykey(contact_way_id))comment='contactway';createuniqueindexuk_contact_wayoncontact_way(user_id,contact_way_type,contact_way_value_digest_);createindexidx_value_typeoncontact_way(contact_way_value_digest_,contact_way_type,contact_way_id);本应用示例中,摘要列的命名规则是:对应的引用列列名+后缀'_digest_';摘要列值是对应的引用列值的MD5(MessageDigestAlgorithm5,消息摘要算法第5版)值,摘要列的列长度为32字节。对应的摘要列发现规则为:列名以'_digest_'结尾并被索引引用,列名在'_digest_'的部分为对应的引用列列名。数据库中间件在启动运行时,从MySQL数据库的information_schema库(MySQL中用来访问数据库表元数据的虚拟库)中,获取表contact_way的元数据,包括列名和索引定义。根据摘要列发现规则,数据库中间件可以得知列contact_way_value_digest_为摘要列,对应的引用列是contact_way_value。数据库中间件缓存表contact_way中摘要列contact_way_value_digest_与引用列contact_way_value的对应关系。MySQL数据库采用SQL(StructuredQueryLanguage,结构化查询语言)语句来对数据库表进行访问。当业务系统要在表contact_way中插入一条记录时,数据库中间件收到如下insert指令:insertcontact_way(contact_way_id,user_id,contact_way_type,contact_way_value,gmt_create,gmt_modified)values('66660000000001','77770000000001','ADDRESS','JSONformattedlongaddressstring',now(),now());来自业务系统的insert指令中不包括摘要列以及要插入记录中的摘要列值。数据库中间件可以采用两种方式来进行该记录的插入:第一种方式:数据库中间件将来自业务系统的inset指令修改为:insertcontact_way(contact_way_id,user_id,contact_way_type,contact_way_value,contact_way_value_digest_,gmt_create,gmt_modified)values('66660000000001','77770000000001','ADDRESS','JSONformattedlongaddressstring','201e6c5491af0120d0bc7ca783f728bd',now(),now());并执行修改后的insert指令,将该记录插入表contact_way中,该记录中摘要列的列值为引用列值的MD5值。第二种方式:数据库中间件执行来自业务系统的insert指令,在表contact_way中插入一条不包括摘要列值的记录,然后生成并执行如下update语句:updatecontact_waysetcontact_way_value_digest_='201e6c5491af0120d0bc7ca783f728bd'wherecontact_way_id='66660000000001';上述update指令将之前insert指令中插入记录的摘要列值更新为引用列值的MD5值。当业务系统对表contact_way进行记录查询,并且查询条件中包括引用列及其列值时,数据库中间件收到如下select指令:selectuser_idfromcontact_waywherecontact_way_value='JSONformattedlongaddressstring';数据库中间件以对应的摘要列替换条件中的引用列,以引用列值的MD5值替换条件中的引用列值,将select指令修改为:selectuser_idfromcontact_waywherecontact_way_value_digest_='201e6c5491af0120d0bc7ca783f728bd';并执行修改后的select指令。当业务系统对表contact_way进行记录删除,并且删除条件中包括引用列及其列值时,数据库中间件收到如下delete指令:deletefromcontact_waywherecontact_way_value='JSONformattedlongaddressstring';数据库中间件以对应的摘要列替换条件中的引用列,以引用列值的MD5值替换条件中的引用列值,将delete指令修改为:deletefromcontact_waywherecontact_way_value_digest_='201e6c5491af0120d0bc7ca783f728bd';并执行修改后的delete指令。当业务系统要更新表contact_way中一条记录的引用列值、并且以引用列及其列值为条件时,数据库中间件收到如下update指令:updatecontact_waysetcontact_way_value='AnewJSONformattedlongaddressstring'whereuser_id='77770000000089'andcontact_way_type='ADDRESS'andcontact_way_value='JSONformattedlongaddressstring';来自业务系统的update指令中不包括摘要列以及应随引用列值刷新的摘要列值。数据库中间件可以采用两种方式来进行该记录的更新:第一种方式:数据库中间件以对应的摘要列替换条件中的引用列,以引用列值的MD5值替换条件中的引用列值,并且在要更新的列中增加摘要列及其列值,将来自业务系统的update指令修改为:updatecontact_waysetcontact_way_value='AnewJSONformattedlongaddressstring',contact_way_value_digest_='aff7f5cbc47e15e543ad04591265c117'whereuser_id='77770000000001'andcontact_way_type='ADDRESS'andcontact_way_value_digest_='201e6c5491af0120d0bc7ca783f728bd';并执行修改后的update指令,将要更新记录的引用列值刷新为指令中新的引用列值,并将该记录的摘要列值刷新为指令中新引用列值的MD5值。第二种方式:数据库中间件以对应的摘要列替换条件中的引用列,以引用列值的MD5值替换条件中的引用列值,将来自业务系统的update指令修改为:updatecontact_waysetcontact_way_value='AnewJSONformattedlongaddressstring'whereuser_id='77770000000001'andcontact_way_type='ADDRESS'andcontact_way_value_digest_='201e6c5491af0120d0bc7ca783f728bd';执行修改后的指令,将表contact_way中要更新记录的引用列值刷新为指令中新的引用列值,然后生成并执行如下update语句:updatecontact_waysetcontact_way_value_digest_='aff7f5cbc47e15e543ad04591265c117'whereuser_id='77770000000001'andcontact_way_type='ADDRESS'andcontact_way_value_digest_='201e6c5491af0120d0bc7ca783f728bd';第二条update指令将要更新记录的摘要列值刷新为新引用列值的MD5值。这样,本应用示例中,通过在表contact_way中增加摘要列,并采用摘要列来建立索引,避开了MySQL数据库最大索引长度的限制;基于数据库表的元数据,即可自动发现表中的摘要列和对应的引用列,新增索引只需改造建表DDL语句,简单有效,易于扩展。与上述流程实现对应,本申请的实施例还提供了一种数据库表索引的实现装置。该装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的CPU(CentralProcessUnit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图4所示的CPU、内存以及非易失性存储器之外,数据库表索引的实现装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。图5所示为本申请实施例提供的一种数据库表索引的实现装置,所述数据库表包括至少一个用来建立索引的摘要列,每个摘要列对应于一个所述数据库表中的引用列,所述装置包括对应关系获取单元、新增记录处理单元和条件操作处理单元,其中:对应关系获取单元用于获取所述数据库表中摘要列和引用列的对应关系;新增记录处理单元用于当在所述数据库表中新增记录时,在所述记录中与引用列对应的摘要列保存所述引用列值的摘要值;条件操作处理单元用于当对所述数据库表的操作以引用列及其列值为条件时,将条件中的引用列替换为对应的摘要列,将条件中的引用列值替换为所述引用列值的摘要值后,进行所述操作。一个例子中,所述对应关系获取单元具体用于:按照预定的摘要列发现规则,在所述数据库表的元数据中发现摘要列与引用列的对应关系。上述例子中,所述摘要列发现规则包括:摘要列的列名中包括预定摘要列标志和所对应的引用列列名,并被数据库表的索引引用;摘要列的注释中包括预定摘要列标志和所对应的引用列列名,并被数据库表的索引引用;或,引用列的注释中包括预定引用列标志和所对应的摘要列列名,并被数据库表的索引引用。可选的,所述对应关系获取单元具体用于:读取预定的配置文件,所述配置文件中保存有所述数据库表中摘要列和引用列的对应关系。可选的,所述新增记录处理单元具体用于:修改插入记录指令,在插入记录指令中增加摘要列并以所述摘要列对应的引用列值的摘要值作为其摘要列值,执行修改后的插入记录指令;或,执行插入记录指令在数据库表中插入新增记录,生成并执行对所述新增记录的更新指令,将所述新增记录的摘要列值更新为与所述摘要列对应的引用列值的摘要值。一种实现方式中,所述装置还包括引用列值更新处理单元,用于当修改所述数据库表中记录的引用列值时,将所述记录中与所述引用列对应的摘要列值更新为修改后引用列值的摘要值。上述实现方式中,所述引用列值更新处理单元具体用于:修改对所述记录的更新指令,在更新指令中增加与要修改列值的引用列对应的摘要列,并以修改后引用列值的摘要值作为其摘要列值,执行修改后的更新指令;或,执行对所述记录的更新指令,对所述记录的引用列值进行修改,生成并执行对所述记录的更新指令,将所述记录中与被修改列值的引用列对应的摘要列值更新为修改后引用列值的摘要值。可选的,所述对数据库表的操作以引用列及其列值为条件,包括:对所述数据库表的查询指令、删除指令或更新指令的条件中包括引用列及其列值。可选的,所述摘要值采用循环冗余检验CRC、消息摘要法MD、或安全哈希算法SHA生成。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1