《多索引数据库事务处理方法及数据库.pdf》由会员分享,可在线阅读,更多相关《多索引数据库事务处理方法及数据库.pdf(20页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103714090 A (43)申请公布日 2014.04.09 CN 103714090 A (21)申请号 201210379819.4 (22)申请日 2012.10.09 G06F 17/30(2006.01) (71)申请人 阿里巴巴集团控股有限公司 地址 英属开曼群岛大开曼资本大厦一座四 层 847 号邮箱 (72)发明人 阳振坤 李凯 杨传辉 陈俊全 (74)专利代理机构 北京亿腾知识产权代理事务 所 11309 代理人 戴燕 (54) 发明名称 多索引数据库事务处理方法及数据库 (57) 摘要 本申请涉及一种多索引数据库事务处理方 法, 所述数据库包含。
2、至少一行数据, 所述多索引指 向所述行数据中的至少一列数据, 所述方法包括 : 生成全局有序的最新事务版本号 ; 以所述最新事 务版本号为标记, 对所述数据库进行写事务处理, 并更新所述写事务处理后所述数据库中的数据对 应的多个索引 ; 提交所述写事务处理数据, 将所 述数据库的全局事务版本号更新为当前最新事务 版本号。本申请能够实现一种满足多索引的数据 库中, 对数据库进行事务处理时, 能够保证数据库 的 ACID 特性。 (51)Int.Cl. 权利要求书 3 页 说明书 10 页 附图 6 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书3页 说明书10页 附图。
3、6页 (10)申请公布号 CN 103714090 A CN 103714090 A 1/3 页 2 1. 一种多索引数据库事务处理方法, 其特征在于, 所述数据库包含至少一行数据, 所述 多索引指向所述行数据中的至少一列数据, 所述方法包括 : 生成全局有序的最新事务版本号 ; 以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新所述写事务处 理后所述数据库中的数据对应的多个索引 ; 提交所述写事务处理数据, 将所述数据库的全局事务版本号更新为当前最新事务版本 号。 2. 如权利要求 1 所述的多索引数据库事务处理方法, 其特征在于, 所述写事务处理进 一步包括单个写事务处理和。
4、多个写事务处理。 3. 如权利要求 2 所述的多索引数据库事务处理方法, 其特征在于, 所述单个写事务处 理进一步包括单表单行的数据库修改和单表多行的数据库修改以及多表多行的数据库修 改。 4. 如权利要求 2 所述的多索引数据库事务处理方法, 其特征在于, 所述的多个写事务 处理包括串行执行的多个写事务处理和并发执行的多个写事务处理。 5. 如权利要求 3 所述的多索引数据库事务处理方法, 其特征在于, 所述单表多行的数 据库修改包括 : 进行一行数据的单个数据库修改 ; 如果对所述行数据所述单个数据库修改处理失败, 结束所述单表多行的数据库修改处 理, 将数据库恢复到未进行所述单表多行的数。
5、据库修改之前的状态 ; 如果对所述行数据的单个数据库修改成功, 则进行下一个行数据的单个数据库修改处 理, 直至完成所述单表中全部的需要修改的行数据的数据库修改。 6. 如权利 3 所述的多索引数据库事务处理方法, 其特征在于, 所述多表多行的数据库 修改包括 : 进行一个单表中一行数据的单个数据库修改 ; 如果对所述行数据的单个数据库修改失败, 结束所述多表多行的数据库修改处理, 将 数据库恢复到未进行所述多表多行的数据库修改处理之前的状态 ; 如果对所述的行数据的单个数据库修改成功, 则进行下一个行数据的单个数据库修改 处理, 直至完成所述多表中全部的行数据的数据库修改处理。 7. 如权利。
6、要求 3 所述的多索引数据库事务处理方法, 其特征在于, 所述单表单行的数 据库修改包括 : 向所述数据库中插入一行数据, 并修改该行数据的版本号为所述最新事务版本号 ; 更新所述数据库中插入所述行数据后的多种索引中的每一种索引。 8. 如权利要求 3 所述的多索引数据库事务处理方法, 其特征在于, 所述单表单行的数 据库修改处理包括 : 删除所述数据库中的一行数据, 并修改该行数据的版本号为所述最新事务版本号 ; 更新所述数据库中删除所述行数据后的多种索引中的每一种索引。 9. 如权利要求 3 所述的多索引数据库事务处理方法, 其特征在于, 所述单表单行的数 据库修改包括 : 更新所述数据库。
7、中指定位置的行数据, 并修改该行数据的版本号为所述最新事务版本 权 利 要 求 书 CN 103714090 A 2 2/3 页 3 号 ; 更新所述数据库中更新所述行数据后的多种索引中的每一种索引。 10. 如权利要求 3 所述的多索引数据库事务处理方法, 其特征在于, 在所述的单表单行 的单个数据库修改中, 如果在进行所述单表单行的数据库修改处理后, 破坏所述数据库的设定约束, 则结束 此次数据库写事务, 将所述数据库中的数据回滚到执行所述数据库写事务处理前的状态。 11. 如权利要求 9 所述的多索引数据库事务处理方法, 其特征在于, 所述更新所述数据 库中指定位置的行数据, 并修改该行。
8、数据的版本号为所述最新事务版本号中, 如果更新的所述行数据不存在, 则结束此次写事务操作, 并将数据库恢复到未进行所 述写事务操作之前的状态。 12. 如权利要求 9 所述的多索引数据库事务处理方法, 其特征在于, 所述更新所述数据 库中指定位置的行数据, 并修改该行数据的版本号为所述最新事务版本号之后, 如果此次 更新的内容不涉及所述多个索引中的一个索引对应的索引列, 则不对所述多种索引中的每 一种索引更新。 13. 如权利要求 9 所述的多索引数据库事务处理方法, 其特征在于, 所述更新所述数据 库中指定位置的行数据, 并修改该行数据的版本号为所述最新事务版本号具体包括 : 修改数据库中行。
9、数据的版本号并保留行数据的历史版本。 14. 一种多索引数据库事务处理方法, 其特征在于, 所述方法包括 : 获取所述数据库的最新事务版本号 ; 根据设定的读取请求方式, 采用至少一种索引查询所述数据库中的数据 ; 读取查询到的所述数据库中的数据, 并返回具有不晚于所述最新事务版本号的行数据 版本号的数据。 15. 如权利要求 14 所述的多索引数据库事务处理方法, 其特征在于, 所述读取查询到 的所述数据库中的数据, 并返回具有不晚于所述最新事务版本号的行数据版本号的数据具 体包括 : 若查询到的所述数据库中行包含了早于或等于所述最新事务版本号的数据, 则返回所 述早于或等于所述最新事务版本。
10、号的数据 ; 若查询到的所述数据库中行数据版本号都晚于所述最新事务版本号, 则结束对所述行 数据的读取。 16. 如权利要求 14 所述的多索引数据库事务处理方法, 其特征在于, 所述根据设定的 读取请求方式, 采用至少一种索引查询所述数据库中的数据之后, 若没有查询到任何数据, 则结束所述读事务处理。 17. 一种数据库, 其特征在于, 包括 : 生成单元, 用以生成新的全局有序的最新事务版本号 ; 写事务处理单元, 用以以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新所述写事务处理后所述数据库中的数据的对应的多个索引 ; 更新单元, 提交所述写事务处理数据, 将所述数据库。
11、中的数据的全局事务版本号更新 为当前最新事务版本号。 18. 一种数据库, 其特征在于, 包括 : 权 利 要 求 书 CN 103714090 A 3 3/3 页 4 获取单元, 用以获取所述数据库的最新事务版本号 ; 查询单元, 用以根据设定的读取请求方式, 采用至少一种索引查询所述数据库中的数 据 ; 读取单元, 用以读取查询到的所述数据库中的数据, 并返回具有不晚于所述最新事务 版本号的行数据版本号的数据。 权 利 要 求 书 CN 103714090 A 4 1/10 页 5 多索引数据库事务处理方法及数据库 技术领域 0001 本申请涉及计算机领域, 具体涉及到一种多索引数据库写事。
12、务处理方法、 多索引 数据库读事务处理方法及数据库。 背景技术 0002 数据库 (Database) 是按照数据结构来组织、 存储和管理数据的仓库。数据库有很 多种类型, 从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统 都在各个方面得到了广泛的应用。为了提高在数据库中查询数据的效率, 数据库需要对一 些字段建立索引。 以便于按照条件进行查询的情况下, 可以先查询索引, 并通过索引查找到 相关的书库。 数据库的索引通常有几种类型, 例如顺序索引、 散列索引或者位图索引等索引 类型。 0003 现有技术中, 数据库通常只对数据建立一种索引。 采用一种索引方式进行查询, 优 。
13、点在于能够对特定的请求得到较高效率的查询, 但是对于特定请求之外的查询, 则相对另 一种索引方式, 效率就会相对较低。 0004 因此, 可以设想将两种或者多种以上的索引结合到同一数据库中, 以提高针对不 同需求对数据库中的数据进行查询时的查询效率。但是, 由于数据库需要在更新数据时 保证对书库与索引的更新事务的原子性、 一致性、 隔离性、 持久性, 简称 ACID(Atomicity Consistency Isolation Durability) 特性, 因此, 本申请的目的就是提供一种多索引的数 据库事务实现方法, 能够在更新数据时保证对书库与索引的更新事务的 ACID 特性, 并且提。
14、 高对数据库内数据的检索效率。 发明内容 0005 有鉴于此, 本申请的目的是提供一种多索引数据库事务处理方法, 以实现在更新 数据时保证对书库与索引的更新事务的 ACID 特性, 并且提高对数据库内数据的检索效率。 0006 一方面, 本申请实施例提供一种多索引数据库事务处理方法, 所述数据库包含至 少一行数据, 所述多索引指向所述行数据中的至少一列数据, 所述方法包括 : 0007 生成全局有序的最新事务版本号 ; 0008 以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新所述写事 务处理后所述数据库中的数据对应的多个索引 ; 0009 提交所述写事务处理数据, 将所述数。
15、据库的全局事务版本号更新为当前最新事务 版本号。 0010 另一方面, 本申请实施例提供一种多索引数据库事务处理方法, 所述方法包括 : 0011 获取所述数据库的最新事务版本号 ; 0012 根据设定的读取请求方式, 采用至少一种索引查询所述数据库中的数据 ; 0013 读取查询到的所述数据库中的数据, 并返回具有不晚于所述最新事务版本号的行 数据版本号的数据。 说 明 书 CN 103714090 A 5 2/10 页 6 0014 另一方面, 本申请实施例提供一种数据库, 包括 : 0015 生成单元, 用以生成新的全局有序的最新事务版本号 ; 0016 写事务处理单元, 用以以所述最新。
16、事务版本号为标记, 对所述数据库进行写事务 处理, 并更新所述写事务处理后所述数据库中的数据的对应的多个索引 ; 0017 更新单元, 提交所述写事务处理数据, 将所述数据库中的数据的全局事务版本号 更新为当前最新事务版本号。 0018 另一方面, 本申请实施例提供一种数据库, 包括 : 0019 获取单元, 用以获取所述数据库的最新事务版本号 ; 0020 查询单元, 用以根据设定的读取请求方式, 采用至少一种索引查询所述数据库中 的数据 ; 0021 读取单元, 用以读取查询到的所述数据库中的数据, 并返回具有不晚于所述最新 事务版本号的行数据版本号的数据。 0022 本申请实施例提供的多。
17、索引数据库事务处理方法, 为数据库建立了两种或两种以 上的不同种类的索引之后, 在处理数据库事务时首先为数据库生成全局有序的最新事务版 本号, 之后以事务版本号为标记, 对所述数据库进行写事务处理, 并更新所述写事务处理后 所述数据库中的数据对应的多个索引, 最后在完成全部索引的更新后提交所述写事务处理 数据, 将所述数据库的全局事务版本号更新为当前最新事务版本号。从而保证了在多索引 的数据库中, 对数据库进行事务处理时, 能够保证数据库的 ACID 特性。 附图说明 0023 为了更清楚地说明本申请实施例中的技术方案, 下面将对实施例或现有技术描述 中所需要使用的附图作简单地介绍, 显而易见。
18、地, 下面描述中的附图仅仅是本申请的一些 实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下, 还可以根据这些 附图获得其他的附图。 0024 图 1 为本申请实施例提供的多索引数据库处理方法一实施例的流程图 ; 0025 图 2 为本申请实施例提供的多索引数据库处理方法一实施例的流程图 ; 0026 图 2A 为本申请实施例提供的单表多行的单个写事务处理的处理流程图 ; 0027 图 3 为本申请实施例提供的多索引数据库处理方法一实施例的流程图 ; 0028 图 3A 为本申请实施例提供的多表多行的单个写事务处理的处理流程图 ; 0029 图 4 为本申请实施例提供的插入一。
19、行数据的处理流程图 ; 0030 图 5 为本申请实施例提供的删除一行数据的处理流程图 ; 0031 图 6 为本申请实施例提供的更新一行数据的处理流程图 ; 0032 图 6A 为图 6 中步骤 601 的详细流程图 ; 0033 图 7 为本申请实施例提供的多索引数据库处理方法一实施例的流程图 ; 0034 图 8 为本申请实施例提供的数据库一实施例的结构图 ; 0035 图 9 为本申请实施例提供的数据库另一实施例的结构图。 具体实施方式 0036 下面通过附图和实施例, 对本申请的技术方案做进一步的详细描述。 说 明 书 CN 103714090 A 6 3/10 页 7 0037 数。
20、据库常常包含大量的数据, 为了提高查询效率, 数据库需要对一些字段建立索 引, 这样按条件查询的时候, 可以先查询索引并通过索引找到相关的数据。 数据库索引有几 种类型, 例如顺序索引、 散列索引和位图索引等。 顺序索引可以同时支持范围查询和单项查 询, 针对一组字段, 数据库常常只建立一种索引。但是, 由于散列索引和位图索引等通常都 难以实现范围查询, 因此已有的数据库通常使用顺序索引, 例如基于 B/B+ 树的顺序索引。 0038 单一索引对某一部分请求可能很高效, 对另一部分请求不太高效。例如, 顺序索 引对于实现范围查询比较高效, 对随机查询则不太高效 : 假设索引针对的字段个数是 K。
21、, 数 据库表的行数是 N, 那么通过顺序索引查询单个项所需要的比较次数大约是 K*log(N), 例 如, 当 K=1, N=106时, 比较的次数大约是 1*log(N)=20, 当 K=5, N=109时, 比较的次数大约是 5*log(N)=150, 因此使用顺序索引进行随机查询所需要的比较次数较多并且随着数据库表 的条数的增加而增加。 反之, 散列索引由于需要遍历整个表因此对范围查询很低效, 但对单 项的随机查询比较高效, 所需的比较次数常常只是略大于 K 并且与数据库表的条数基本无 关, 当 K=1, N=106以及当 K=5, N=109时, 单个项的随机查询所需的比较次数略大于。
22、 1 和 5, 低 于顺序索引时所需要的 20 和 150 次。 0039 本申请通过对数据库一组字段同时建立两种或者两种以上的索引, 例如顺序索引 和散列索引。其中一种索引用来进行一类查询, 另一种索引用来进行另一类查询。例如以 顺序索引 ) 进行范围查询, 而以散列索引进行单项查询。使用不同的索引进行不同类型的 查询可以进一步提高查询速度, 例如针对单项查询, 散列索引通常只需要一次比较运算即 可定位到目标行, 提升了数据的读写事务的性能。 0040 但是, 维护双索引的技术难度主要在于需要保证对数据与索引的更新事务满足原 子性、 一致性、 隔离性和持久性, 也就是数据库的 ACID 特性。
23、。即对数据的更新保证与多个索 引同时可见或同时不可见 ; 正在更新的数据和多个索引不能被读到 ; 无论数据更新事务是 否成功, 都不能破坏数据库的完整性约束。 0041 为此, 本申请实施例提供了一种多索引数据库事务处理方法, 所述数据库包含至 少一行数据, 所述多索引指向所述行数据中的至少一列数据, 所述方法包括 : 生成全局有序 的最新事务版本号 ; 以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新 所述写事务处理后所述数据库中的数据对应的多个索引 ; 提交所述写事务处理数据, 将所 述数据库的全局事务版本号更新为当前最新事务版本号。 0042 通常在本申请的实施例中, 。
24、所述写事务处理进一步包括单个写事务处理和多个写 事务处理。其中, 所述单个写事务处理进一步包括单表单行的单个数据库修改和单表多行 的数据库修改以及多表多行的数据库修改。 0043 相应的, 所述的多个写事务处理包括串行执行的多个写事务处理和并发执行的多 个写事务处理。 0044 更进一步的说, 在本申请的实施例中, 所述单表多行的数据库修改包括 : 首先进行 一行数据的单个数据库修改 ; 如果对所述的一个单个数据库修改失败, 结束所述单表多行 的数据库修改处理, 将数据库恢复到未进行所述单表多行的数据库修改处理之前的状态 ; 如果对所述行数据的单个数据库修改成功, 则进行下一个行数据的单个数据。
25、库修改处理, 直至完成所述单表中全部需要修改的行数据的数据库修改。 0045 同理, 在本申请的一实施例中, 所述多表多行的数据库修改处理包括 : 首先, 进行 说 明 书 CN 103714090 A 7 4/10 页 8 一个单表中一行数据的单个数据库修改 ; 之后, 如果对所述行数据的单个数据库修改处理 失败, 结束所述多表多行的数据库修改处理, 将数据库恢复到未进行所述多表多行的数据 库修改处理之前的状态 ; 如果对所述的一个行数据的单个数据库修改处理成功, 则进行下 一个行数据的单个数据库修改处理, 直至完成所述多表中全部的行数据的数据库修改处 理。 0046 更具体的, 在本申请的。
26、实施例中, 所述单表单行的数据库修改处理包括 : 向所述数 据库中插入一行数据, 并修改该行数据的版本号为所述最新事务版本号 ; 之后, 更新所述数 据库中插入所述行数据后的多种索引中的每一种索引。或者删除所述数据库中的一行数 据, 并修改该行数据的版本号为所述最新事务版本号 ; 之后, 更新所述数据库中删除所述行 数据后的多种索引中的每一种索引。 再或者, 更新所述数据库中指定位置的行数据, 并修改 该行数据的版本号为所述最新事务版本号 ; 之后, 更新所述数据库中更新所述行数据后的 多种索引中的每一种索引。 0047 在前述的几种在单表单行的数据库修改中, 如果在进行所述单表单行的数据库修。
27、 改处理后, 破坏所述数据库的设定约束, 则结束此次数据库写事务处理, 将所述数据库中的 数据回滚到执行所述数据库写事务处理前的状态。 0048 较佳的, 在所述更新所述数据库中指定位置的行数据, 并修改该行数据的版本号 为所述最新事务版本号中, 如果更新的所述行数据不存在, 则结束此次写事务操作, 并将数 据库恢复到未进行所述写事务操作之前的状态 ; 或者, 如果此次更新的内容不涉及所述多 个索引中的一个索引对应的索引列, 则不对所述多种索引中的每一种索引更新。 0049 在本申请的优选实施例中, 更新所述数据库中指定位置的行数据, 并修改该行数 据的版本号为所述最新事务版本号具体包括 : 。
28、修改数据库中行数据的版本号并保留行数据 的历史版本。 0050 实施例一 0051 一种多索引数据库事务处理方法, 其流程图可参考图 1 所示, 所述数据库包含至 少一行数据, 所述多索引指向所述行数据中的至少一列数据。该实施例一关注于数据库的 写事务处理, 也就是对数据库中的数据进行增加、 删除、 修改的事务。由图 1 可见, 所述方法 包括 : 0052 步骤 101, 生成全局有序的最新事务版本号 ; 0053 本实施例是以数据库中设置顺序索引和散列索引两种索引为例, 但是在实际应用 中, 可以根据实际查询需要对相关字段建立其他种类的索引。 0054 为了保证数据与多个索引更新事务的 A。
29、CID 特性 : 每个写事务处理可能修改多个 表的多个行的多个列, 所有这些修改都对应一个唯一的版本号 mutation_ver, 每个写事务 的版本号各不相同, 并且根据事务提交的顺序满足设定的全局的偏序关系, 每行数据保存 了它的全部列的最近若干次的修改历史版本, 当某些修改历史版本不再需要时, 它们被删 除以便回收所占用的空间。 0055 同时, 生成一个全局有序的最新事务版本号, 即事务版本号 max_commited_ transaction_id。以此全局有序的事务版本号保存当前已经提交的最新事务版本号, 并且 保证任何版本早于等于这个事务的其它事务都已经提交。 0056 步骤 1。
30、02, 以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新 说 明 书 CN 103714090 A 8 5/10 页 9 所述写事务处理后所述数据库中的数据对应的多个索引 ; 0057 具体的, 在该步骤 102 中, 完成对数据库的写事务处理过程, 例如向数据库中插入 数据, 删除数据库中的数据以及更新数据库中的指定位置的数据等。从写事务处理涉及的 数目上区分, 还可以划分为包括单个写事务处理和多个写事务处理。 其中, 单个写事务处理 是指对数据进行的一次写事务处理, 而多个写事务处理则是指对数据库进行多次写事务处 理。 0058 在单个写事务处理中, 又进一步包括对单表单。
31、行的数据库修改和单表多行的数据 库修改以及多表多行的数据库修改。 0059 多个写事务处理则包括串行执行的多个写事务处理和并发执行的多个写事务处 理。 串行的多个写事务处理指按照顺序执行, 多个写事务如果并发执行, 则按上结合数据库 常用的多版本并发控制或者其他类似方法进行。 例如通过, 行锁和范围锁等方式, 实现多个 并行执行事务对数据的修改。 0060 步骤 103, 提交所述写事务处理数据, 将所述数据库的全局事务版本号更新为当前 最新事务版本号。 0061 具体而言, 在完成全部的单个写事务处理, 或者是多个写事务处理之后。 可以提交 所述的写事务处理数据, 数据库的全局最新更新为生成。
32、的当前事务版本号。 也就是说, 事务 的提交就是相当于确认在这事务内对数据的修改操作已经 “可见” , 比如行 A 和行 B, 原来的 值分别是 1 和 2, 事务内将其修改为 3 和 4, 但是在事务提交之前, 其他同时读取的人只能读 到 1 和 2, 只有在事务提交之后, 才能读到 3 和 4, 此时数据可以的全局事务版本号也由提交 之前的版本更改为新的当前最新事务版本号。 0062 全局事务版本号用于读取行数据时应该读到那些数据, 某一行数据会有多个版本 ( 比如为 v1,v2,v3), 而当前最新事务版本号是 v2, 那么读到这行数据时, 只会读到当前最 新事务版本号之前的 v1 和 。
33、v2 的数据, 由于 v3v2, 因此它不会被读取出来。 0063 实施例二 0064 本实施例提供一种多索引数据库事务处理方法, 其流程图可参考图 2 所示, 所述 数据库包含至少一行数据, 所述多索引指向所述行数据中的至少一列数据。该实施例一关 注于数据库的写事务处理, 也就是对数据库中的数据进行增加、 删除、 修改的事务。由图 2 可见, 所述方法包括 : 0065 步骤 201, 生成全局有序的最新事务版本号 ; 0066 该步骤 201 与前述实施例中的步骤 101 相同, 因此不多赘述。 0067 步骤 202, 以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新 。
34、所述写事务处理后所述数据库中的数据对应的多个索引 ; 0068 具体的, 在该步骤 202 中, 完成对数据库的写事务处理过程中, 单表多行的数据库 修改处理的处理流程, 如图 2A 所示, 单表多行的数据库修改包括 : 0069 步骤 2021, 进行一行数据的单个数据库修改处理 ; 0070 具体而言, 对一行数据进行单个数据库修改处理, 可以是对单表进行插入行、 删除 行数据或者修改一行数据中部分列数据的操作行为。如果在执行上述的几种操作后, 违背 了数据库的某个设定约束, 则此次写事务处理失败。 例如, 比如某个数据范围内的行数不能 超过一个值可以作为一个 “约束” , 用户向这个范围。
35、内插入数据的时候要保证这个范围内的 说 明 书 CN 103714090 A 9 6/10 页 10 函数不能超购某个值, 否则成为破坏数据库的约束。 0071 如果对所述行数据的单个数据库修改处理失败, 则执行 : 0072 步骤 2022, 结束所述单表多行的数据库修改处理, 将数据库恢复到未进行所述单 表多行的数据库修改之前的状态 ; 0073 具体的, 执行一次单个数据库修改处理失败之后, 由于在修改中保存了对此次修 改, 因为所有的修改操作都不是立即生效, 而是记录操作, 因此需要对数据库的数据进行回 滚, 也就是指将数据库恢复到没有修改之前的状态, 回滚只需要将这个事务内记录的修改。
36、 操作删除掉即可。 0074 如果对所述行数据的单个数据库修改处理成功, 则执行 : 0075 步骤 2023, 进行下一个行数据的单个数据库修改处理, 直至完成所述单表中全部 需要修改的行数据的数据库修改。 0076 具体的, 如果此次单个数据库修改处理没有违反数据库的某个设定约束, 则此次 数据库修改处理成功, 可以取出下一个单表中的下一个行数据的单个数据库修改处理, 例 如对某个单表的下一行数据进行数据库修改处理, 直至完成全部的写事务处理。 0077 步骤 203, 提交所述写事务处理数据, 将所述数据库的全局事务版本号更新为当前 最新事务版本号。 0078 实施例三 0079 本实施。
37、例提供一种多索引数据库事务处理方法, 其流程图可参考图 3 所示, 所述 数据库包含至少一行数据, 所述多索引指向所述行数据中的至少一列数据。该实施例一关 注于数据库的写事务处理, 也就是对数据库中的数据进行增加、 删除、 修改的事务。由图 3 可见, 所述方法包括 : 0080 步骤 301, 生成全局有序的最新事务版本号 ; 0081 该步骤 301 与前述实施例中的步骤 101 和步骤 201 相同, 因此不多赘述。 0082 步骤 302, 以所述最新事务版本号为标记, 对所述数据库进行写事务处理, 并更新 所述写事务处理后所述数据库中的数据对应的多个索引 ; 0083 在该步骤中, 。
38、需要进行多表多行的单个数据库修改处理, 可参考图 3A, 进行多表多 行的单个数据库修改处理时执行以下的步骤 : 0084 步骤 3021, 进行一个单表中的一行数据的一个单个数据库修改处理 ; 0085 在该步骤3021中, 对一个单表中的一行数据的一个单个数据库修改处理与图2所 示的实施例中的对一个表的一个行数据的单个数据库修改处理相同, 因此, 不多赘述。 0086 如果对所述的一个单表单表中一行数据的单个数据库修改处理失败, 则执行 : 0087 步骤 3022, 结束所述多表多行的数据库修改处理, 将数据库恢复到未进行所述多 表多行数据库修改处理之前的状态 ; 该步骤也与图 2 中的。
39、步骤 202 相同, 不多赘述。 0088 如果对所述的一个单表中的一个行数据的单个数据库修改处理成功, 则执行 : 0089 步骤 3023, 进行下一个所述行数据的单个数据库修改处理, 直至完成所述多表中 全部的行数据的数据库修改处理。 0090 在该步骤 3023 中, 由于涉及了不同的数据表, 则多表多行的单个数据库修改处理 应该按照顺序进行, 第一个表的第一个行的单个数据库修改处理一直到最后一个表的最后 一行的单个数据库修改处理。 说 明 书 CN 103714090 A 10 7/10 页 11 0091 步骤 303, 提交所述写事务处理数据, 将所述数据库的全局事务版本号更新为。
40、当前 最新事务版本号。 0092 在前述实施例的步骤2021和步骤2031中, 用到单表单行的单个数据库修改处理, 单表单行的单个数据库修改处理具体包括插入、 删除以及更新操作, 以下就对这几种不同 的单表单行的单个数据库修改进行详细阐述。 0093 如图 4 所示, 向数据库中的一个表插入一行数据的数据库修改, 具体包括 : 0094 步骤 401, 向所述数据库中插入一行数据, 并修改该行数据的版本号为所述最新事 务版本号 ; 0095 具体的, 首先准备好需要向数据库的对应表中插入的数据, 以不同的字段的格式 例如X,Y,Z,Q, 分别对应一行数据中的四个列, 以设定的顺序插入到数据表中。
41、。 同时, 修改 该行数据的版本号为在图 1 的步骤 101 中生成的全局最新事务版本号。 0096 此操作新增一行数据, 如果插入的行已经存在, 或者此行插入后破坏数据库的某 个约束, 则插入操作失败。 0097 步骤 402, 更新所述数据库中插入所述行数据后的多种索引中的每一种索引。 0098 具体的, 在插入数据之后, 需要对数据库的索引进行更新操作, 从而保证在从数据 库中查询数据时, 采用的索引能够查询到最近的数据。 0099 同理, 若需要插入多行数据, 则可以按照顺序执行重复执行步骤 401-402。 0100 类似的, 如图 5 所示, 在数据库的表中删除一行数据的数据库修改。
42、, 具体包括 : 0101 步骤 501, 删除所述数据库中的一行数据, 并修改该行数据的版本号为所述最新事 务版本号 ; 0102 具体的, 通过此操作删除一个表中的一行数据, 如果对应的行不存在或者此操作 执行后破坏数据库的设定的约束, 则此操作失败 ; 否则, 以增量方式标记此操作, 修改的版 本号是是此次修改的修改版本号, 例如 n2。这样的操作使得, 读事务读到该标记后, 将会发 现此行数据已经被删除。 0103 增量方式就是将修改和删除的操作记录和版本号保存到行数据中, 而不是立即生 效, 这样做的目的是能够根据版本号读取行数据, 比如某行数据在v1版本上的值为1, 在v2 版本中。
43、被删除, 因此在读取这行数据时, 使用 v1 和 v2 两个不同版本读到的结果分别是 1 和 “行已删除” 。 0104 步骤 502, 更新所述数据库中删除所述行数据后的多种索引中的每一种索引。 0105 具体的, 在步骤 501 中已经将相应的一行数据删除, 则此需要对数据库的多个索 引内容进行封信。完成后把原来的事务版本号修改为新生成的当前最新事务版本号, 并提 交此事务。后期进行垃圾回收时, 会先分别删除此数据的两个或多个索引然后真正删除此 数据。 0106 同样的, 若需要删除多行数据, 则可以按照顺序执行重复执行步骤 501-502。 0107 此外, 如图 6 所示, 对数据库进。
44、行单表单行的单个数据库修改操作, 还包含更新也 就是修改数据表中的行数据的操作, 在更新操作中需要修改数据库中行数据的版本号并保 留行数据的历史版本, 其包括 : 0108 步骤 601, 更新所述数据库中指定位置的行数据, 并修改该行数据的版本号为所述 最新事务版本号 ; 说 明 书 CN 103714090 A 11 8/10 页 12 0109 具体的, 在所述更新所述数据库中指定位置的行数据, 并修改该行数据的版本号 为所述最新事务版本号中, 如果更新的所述行数据不存在, 则结束此次更新操作, 并将数据 库恢复到未进行所述更新操作之前的状态。 0110 更新所述数据库中指定位置的行数据。
45、的详细过程, 可参考图 6A, 其包括 : 0111 步骤 6011, 复制所述指定位置的行数据的内容 ; 0112 步骤 6012, 删除所述指定位置的行数据的内容 ; 0113 具体的, 该步骤可参考图 5 所示的删除行数据的过程。 0114 步骤 6013, 插入修改后的行数据, 并修改该行数据的版本号为所述最新事务版本 号。 0115 具体的, 步骤 6013 可参考图 4 所示的实施例中的步骤 401, 不多赘述。 0116 步骤 602, 更新所述数据库中更新所述行数据后的多种索引中的每一种索引。 0117 具体的, 在对行数据更新之后, 需要将数据库的索引也进行更新, 同时更改数。
46、据库 的版本号为最新的全局最新事务版本号, 提交此次写事务。 当然, 如果此次更新的内容不涉 及所述多个索引中的一个索引对应的索引列, 则不对所述多种索引中的每一种索引更新。 0118 通过前述的实施例, 使得为数据库建立了两种或两种以上的不同种类的索引之 后, 能够保证在多索引的数据库中, 对数据库进行事务处理时, 能够保证数据库的 ACID 特 性。 0119 由于数据库中的数据存在多个版本, 那么在采用多索引的查询方式查询数据库中 的数据时, 就可能查找到不同的版本, 为了保证在对数据库进行读事务操作时, 能够满足 ACID 特性, 本申请实施例提供了一种多索引数据库事务处理方法, 所述。
47、方法包括 : 首先, 获 取所述数据库的最新事务版本号 ; 之后, 根据设定的读取请求方式, 采用至少一种索引查询 所述数据库中的数据 ; 最后, 读取查询到的所述数据库中的数据, 并返回具有不晚于所述最 新事务版本号的行数据版本号的数据。 0120 在本申请的较佳实施例中, 所述读取查询到的所述数据库中的数据, 并返回具有 不晚于所述最新事务版本号的行数据版本号的数据具体包括 : 若查询到的所述数据库中的 数据中至少一个的行数据版本号都早于或等于所述最新事务版本号, 则返回所述行数据版 本号最晚的行数据版本号对应的数据 ; 若查询到的所述数据库中的数据中全部数据的行数 据版本号都晚于所述最新。
48、事务版本号, 则结束所述读事务处理 ; 若没有查询到任何数据, 则 结束所述读事务处理。 0121 实施例四 0122 以下结合附图 7, 对本申请的实施例四, 也就是从数据库中查询书库的事务处理方 法进行详细描述。由图 7 可见, 多索引数据库事务处理方法包括 : 0123 步骤 701, 获取所述数据库的最新事务版本号 ; 0124 具体的, 在开始读事务之前, 需要获取当前最新的 “已提交事务ID” , 也就是获取最 新的数据库全局事务版本号, 作为在读取到不同版本号的数据时的取舍参考标准, 假设此 次获取到的当前已提交事务的最近版本号为 N。 0125 步骤 702, 根据设定的读取请。
49、求方式, 采用至少一种索引查询所述数据库中的数 据 ; 0126 具体而言, 由于本申请所述的数据库设置了两种以上的索引, 例如顺序索引、 散列 说 明 书 CN 103714090 A 12 9/10 页 13 索引或者位图索引。因此, 可以根据最适合的方式, 采用其中一种方式进行查询。例如, 需 要进行范围查询, 则可能选择顺序索引作为读取请求方式, 采用顺序索引查询数据库中的 数据。而若需要进行单项查询, 则, 可能选择散列索引作为读取请求方式, 采用散列索引以 随机方式查询数据库中的数据 0127 步骤 703, 读取查询到的所述数据库中的数据, 并返回具有不晚于所述最新事务版 本号的行数据版本号的数据。 0128 具体的, 如果此次查询没有查询到任何数据, 则结束此。