System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据库计数领域,特别是涉及一种数据库的大对象更新方法、存储介质及设备。
技术介绍
1、大对象(large object)是数据库中的一类特殊的数据类型,主要有二进制大对象(binary large object,简称blob)和大文本对象(character large object/nationalcharacter large object,简称clob/nclob)两大类。blob用来存储二进制大型对象数据,例如图像、音频文件、视频或其他非文本格式的数据;clob和nclob则用于存储大量的字符数据,适合于存放长文本如文章、报告或者xml文档等。这类数据单个数据项的体量上限很高,最高可达gb级甚至tb级,同时体量差异又很大,数据量小的也可以小到几个字节,甚至为空。
2、在现有的数据库系统中,大对象一般包括行内对象和行外对象,行外对象可能占用大量的存储空间,如果多个记录中存储了相同的大对象数据,那么这些数据就会在数据库中多次重复出现,导致存储空间的浪费和性能的下降。
3、为解决上述问题,本领域技术人员可能做出的改进是:按照大对象的体量大小,将行外对象分为行外存储的小型对象和行外存储的大型对象,并将行外存储的大型对象分割为多个存储切片,为每个行外存储的小型对象以及大型对象的存储切片都计算一个排重特征值。在启动排重特性后,相同的大对象数据通常只会在数据库的物理存储中保留一份或仅有少量的重复数据,而多个引用该数据的记录则会指向这个单一的存储位置。这样,不仅节约了存储空间,还提高了数据访问的速度
4、但是在首次启用排重功能后,无论当前是否仍在启用排重功能,都可能遇到存在引用关系的对象或切片,执行更新操作的流程就需要做相应的调整。具体来说,当更新一个大对象时,数据库不能简单地更新该大对象的数据,因为它可能引用了其他对象,或者被其他对象所引用,直接更新会导致引用关系混乱以及数据丢失的问题。
技术实现思路
1、本专利技术第一方面的一个目的是要有针对性地更新行外存储的小型对象,并妥善处理小型对象的引用关系。
2、本专利技术第一方面的另一个目的是要以高效且一致的方式对行外存储的小型对象进行更新。
3、本专利技术第一方面的又一个目的是要在行外存储的小型对象已被其他对象引用的情况下,选择新的被引用对象来接替该小型对象。
4、特别地,根据本专利技术的第一方面,本专利技术提供了一种数据库的大对象更新方法,包括:
5、获取所述数据库的数据基表,所述数据基表具有至少一列大对象列,并且每个所述大对象列包括多个大对象数据项;
6、从所述大对象列中获取待更新的目标大对象数据项;
7、识别所述目标大对象数据项的对象类型,所述对象类型包括行外存储的小型对象,所述行外存储的小型对象的数据大小小于等于预设阈值;
8、若识别出所述目标大对象数据项为所述行外存储的小型对象,检查所述目标大对象数据项的引用关系;
9、根据所述引用关系对所述目标大对象数据项进行更新处理。
10、可选地,所述大对象数据项的对象记录中设置有引用标识和引用计数,所述引用标识为所述大对象数据项所引用的对象的标识,所述引用计数为所述大对象数据项被其他对象所引用的次数。
11、可选地,检查所述目标大对象数据项的引用关系的步骤包括:检查所述目标大对象数据项是否引用了其他对象;
12、若引用了其他对象,根据所述引用关系对所述目标大对象数据项进行更新处理的步骤包括:
13、读取所述目标大对象数据项所引用的对象的预取数据字段到内存缓冲区;
14、在所述内存缓冲区中更新所述预取数据字段;
15、将更新后的所述预取数据字段写回所述目标大对象数据项。
16、可选地,在读取所述目标大对象数据项所引用的对象的预取数据字段到内存缓冲区的步骤之后,还包括:
17、将所述目标大对象数据项所引用的对象的引用计数减1;
18、将所述目标大对象数据项的引用标识设置为空。
19、可选地,若未引用其他对象,根据所述引用关系对所述目标大对象数据项进行更新处理的步骤包括:
20、读取所述目标大对象数据项的预取数据字段到内存缓冲区;
21、在所述内存缓冲区中更新所述预取数据字段;
22、将更新后的所述预取数据字段写回所述目标大对象数据项。
23、可选地,检查所述目标大对象数据项的引用关系的步骤还包括:检查所述目标大对象数据项是否被其他对象引用;
24、若已被其他对象引用,选取一个对象接替所述目标大对象数据项作为新的被引用对象,并将所述目标大对象的引用计数清零。
25、若未被其他对象引用,执行检查所述目标大对象数据项是否引用了其他对象的步骤。
26、可选地,选取一个对象接替所述目标大对象数据项作为新的被引用对象的步骤包括:
27、从引用所述目标大对象数据项的对象集合中选取一个对象作为新的被引用对象;
28、将所述目标大对象数据项的引用计数减1作为新的被引用对象的引用计数;
29、将所述目标大对象数据项的数据复制到所述新的被引用对象;
30、将引用所述目标大对象数据项的对象集合中的其他对象的引用标识修改为新的被引用对象的标识。
31、可选地,检查所述目标大对象数据项是否被其他对象引用的步骤包括:
32、检查所述目标大对象数据项的引用计数是否为0;
33、若是,则确定所述目标大对象数据项未被其他对象引用;
34、若否,则确定所述目标大对象数据项已被其他对象引用。
35、根据本专利技术的第二方面,本专利技术提供了一种机器可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述中任意一种数据库的大对象更新方法。
36、根据本专利技术的第三方面,本专利技术提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的计算机程序,并且所述处理器执行所述计算机程序时实现上述中任意一种数据库的大对象更新方法。
37、本专利技术的数据库的大对象更新方法,首先从数据基表中获取待更新的目标大对象数据项,接着识别目标大对象数据项是否为行外存储的小型对象,若识别出目标大对象数据项为行外存储的小型对象,然后检查目标大对象数据项的引用关系,最后根据引用关系对目标大对象数据项进行更新处理。这样,可以有针对性地更新行外存储的小型对象,并妥善处理小型对象的引用关系,避免更新小型对象后,出现引用关系混乱或数据丢失的问题,有利于维护数据库的数据完整性和一致性。
38、进一步地,本专利技术的数据库的大对象更新方法,当目标大对象数据项为行外存储的小型对象且引用了其他对象时,会读取目标大对象数据项所引用的对象的预取数据字段到内存缓冲区,在内存缓冲区中更新该预取数据字段并写回目标大对象数据项。当目标本文档来自技高网...
【技术保护点】
1.一种数据库的大对象更新方法,包括:
2.根据权利要求1所述的数据库的大对象更新方法,其中,
3.根据权利要求2所述的数据库的大对象更新方法,其中,
4.根据权利要求3所述的数据库的大对象更新方法,其中,
5.根据权利要求3所述的数据库的大对象更新方法,其中,
6.根据权利要求3所述的数据库的大对象更新方法,其中,
7.根据权利要求6所述的数据库的大对象更新方法,其中,选取一个对象接替所述目标大对象数据项作为新的被引用对象的步骤包括:
8.根据权利要求6所述的数据库的大对象更新方法,其中,检查所述目标大对象数据项是否被其他对象引用的步骤包括:
9.一种机器可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1-8任一项所述的数据库的大对象更新方法。
10.一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的计算机程序,并且所述处理器执行所述计算机程序时实现根据权利要求1-8任一项所述的数据库的大对象更新方法。
【技术特征摘要】
1.一种数据库的大对象更新方法,包括:
2.根据权利要求1所述的数据库的大对象更新方法,其中,
3.根据权利要求2所述的数据库的大对象更新方法,其中,
4.根据权利要求3所述的数据库的大对象更新方法,其中,
5.根据权利要求3所述的数据库的大对象更新方法,其中,
6.根据权利要求3所述的数据库的大对象更新方法,其中,
7.根据权利要求6所述的数据库的大对象更新方法,其中,选取一个对象接替所述目标大对象数据项作为新的被...
【专利技术属性】
技术研发人员:王伟,王建华,
申请(专利权)人:中电科金仓北京科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。