用于优化索引、主数据库节点和订户数据库节点的方法
【技术领域】
[0001] 本发明设及数据库技术,尤其设及一种用于优化索引、主(master)数据库节点和 订户(sub S Cr i b er)数据库节点的方法。
【背景技术】
[0002] 在关系数据库中,索引为最普通的加速查询数据库的方法。索引与表相关联。一旦 索引与表相关联,索引上的操作(读或写)是隐式的。用户不需要认知索引。
[0003] 出于恢复和复制目的,通常畑BMS生成描述每个操作的日志。该日志称为重做日志 或事务日志或简称为日志。在许多情况下,该日志为实体性质。每当数据库上发生写操作 时,日志记录该写操作。运由"日志写入进程(log writer process)"完成。运些日志包括: 表(数据段)的更新和与表关联的索引(索引段)的更新。
[0004] 图1为示出RDBMS存储引擎内的标准操作示例的示意图。如图1所示,考虑具有两个 索引的简单表。当向表内插入一条记录时,数据库进程将该记录写入数据段和两个索引段, 同时生成各操作的日志。
[0005] 另一方面,对于高可用性的要求,负载均衡数据库使用复制作为标准方法。最常见 的复制实施形式为"日志传送Qog shipping)"。
[0006] 图2为示出主数据库节点和订户数据库节点之间的日志传送示例的示意图。如图2 所示,在该解决方案中,指定的主数据库节点不断将其日志(例如,重做日志)传送到订户数 据库节点。订户数据库节点将运些日志应用到数据库W和主数据库节点同步。传送的日志 包括数据段和索引段的更新。
[0007] 出于无缝切换(或故障转移)目的,主数据库节点和订户数据库节点中的架构最好 保持相同。通信领域和企业领域中的大部分HA系统使用可读写的主数据节点和一个或多个 只读订户数据库节点。
[000引如今,从主数据库节点到订户数据库节点的日志传送为所有数据库复制的正常特 征。专用复制解决方案,如(例如化acle中的)GoldenGate可W在异构拓扑中同步数据库。通 过使用【参考1】中的转换中间件(translation middleware)提供类似解决方案。运些解决 方案使用基于SQL语句的逻辑复制,与基于日志传送的同步相比,基于SQL语句的逻辑复制 慢得多。
[0009] 【参考2】提出一项发明:从主数据库节点传送的数据,在订户数据库节点中进行语 义的重新解释并随后应用到数据库。该解决方案可W减少从主数据库节点传送的日志的大 小。
[0010] 【参考3】提出一项发明:主数据库节点将日志传送到备用数据库节点。备用数据库 节点具有映射到主DB表的表(称为联合表映射)。该更改被应用到联合表。
[0011] 然而,所有上述解决方案都具有W下两个缺点:(1)在订户数据节点中完成了重新 解释而主数据库节点却没有认知到运个事实,运无法帮助减少主数据库节点的负载;(2)由 于两个节点在语义上不等,切换将会非常昂贵。
[0012] 【参考4】提供了一项可减少主数据库节点和订户数据库节点负载的发明。本发明 还可W减少主数据库节点上的内存消耗。在本发明中,订户数据库节点具有自己的索引集, 订户数据库从主数据库节点接收日志后生成索引。切换后,新的主数据库节点丢弃运些索 引。该解决方案的优点在于能够在主数据库节点上进行简单切换并优化了内存。
[0013] 然而,该解决方案具有3个问题:(1)其不具有减少订户数据库节点上的冗余索引 的机制;(2)其要求订户数据库节点确认哪些索引需要额外填充,并且运通常无法单独在存 储引擎层完成;(3)其基于对于管理员而言的角色将onus索引创建放置在多个节点上。
[0014] 【参考1】"基于中间件的数据库复制:理论与实践之间的差距",有关数据管理的 2008年ACM SIGMOD国际会议录,第739至752页。
[001引【参考2】标题为"语义复制(SEMANTIC RE化ICATIONr的WIPO专利申请W0/2007/ 037984(还称为美国专利8290910)。
[0016] 【参考3】标题为"选择性数据库复制(沈LECTIVE DATABA沈RE化ICATIONrWIPO专 利申请W0/2010/073110。
[0017] 【参考4】标题为"物理数据复制中的备用索引(STANDBY INDEX IN PHYSICAL DATA REPLICATIONr 的美国专利申请20110320404。
【发明内容】
[0018] 本发明的实施例设及一种用于优化索引、主数据库节点和订户数据库节点的方 法。本发明的目的在于保持架构相同的同时减少所述主数据库节点和所述订户数据库节点 中不必要的索引。
[0019] 根据本发明的实施例的第一方面,提供一种用于优化索引的方法,所述方法包括:
[0020] 当所述索引被添加到所述主数据库节点时,主数据库节点检查索引的角色信息是 否匹配所述主数据库节点的角色信息;
[0021] 当所述索引的所述角色信息匹配所述主数据库节点的所述角色信息时,所述主数 据库节点通过使用所述索引更新数据库信息。
[0022] 根据本发明的实施例的另一方面,在检查索引的角色信息是否匹配所述主数据库 节点的角色信息之前,所述方法进一步包括:
[0023] 为所述主数据库节点添加所述角色信息。
[0024] 根据本发明的实施例的另一方面,在检查索引的角色信息是否匹配所述主数据库 节点的角色信息之前,所述方法进一步包括:
[0025] 通过使用数据定义语言创建所述索引;
[00%]更新带有所述角色信息的所述索引。
[0027] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0028] 所述主数据库节点检查所述索引的所述角色信息是否匹配订户数据库节点的所 述角色信息;
[0029] 当所述索引的所述角色信息匹配所述订户数据库节点的所述角色信息时,所述主 数据库节点将所述索引发送到所述订户数据库节点W使所述索引与所述订户数据库节点 同步。
[0030] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0031] 所述主数据库节点接收所述订户数据库节点的所述角色信息。
[0032] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0033] 当需要插入记录到与所述索引相关联的表中时,所述主数据库节点检查所述索引 的所述角色信息是否匹配所述主数据库节点的所述角色信息;
[0034] 当所述索引的所述角色信息不匹配所述主数据库节点的所述角色信息时,为所述 记录生成虚拟重做信息。
[0035] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0036] 所述主数据库节点检查所述索引的所述角色信息是否匹配订户数据库节点的所 述角色信息;
[0037] 当所述索引的所述角色信息匹配所述订户数据库节点的所述角色信息时,所述主 数据库节点将所述虚拟重做信息发送到所述订户数据库节点。
[0038] 根据本发明的实施例的另一方面,当所述索引的所述角色信息匹配所述主数据库 节点的所述角色信息时,所述方法进一步包括:
[0039] 所述主数据库节点将所述记录插入到与所述索引相关联的所述表中;
[0040] 为所述记录生成重做信息。
[0041] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0042] 所述主数据库节点检查所述索引的所述角色信息是否匹配订户数据库节点的所 述角色信息;
[0043] 当所述索引的所述角色信息匹配所述订户数据库节点的所述角色信息时,所述主 数据库节点将所述重做信息发送到所述订户数据库节点。
[0044] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0045] 当所述主数据库节点的所述角色信息更新时,所述主数据库节点检查所述索引的 所述角色信息是否匹配所述主数据库节点的更新的角色信息;
[0046] 当所述索引的所述角色信息匹配所述主数据库节点的所述更新的角色信息时,所 述主数据库节点填充所述索引。
[0047] 根据本发明的实施例的第二方面,提供一种用于优化索引的方法,包括:
[0048] 当所述订户数据库节点被添加到包含主数据库节点的集群时,订户数据库节点更 新所述订户数据库节点的角色信息;
[0049] 所述订户数据库节点将所述订户数据库节点的所述角色信息发送到所述主数据 库节点。
[0050] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0051] 所述订户数据库节点接收来自所述主数据库节点的索引;
[0052 ]使所述索引与所述主数据库节点同步。
[0053] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0054] 所述订户数据库节点接收来自所述主数据库节点的重做信息;
[0055] 当所述重做信息为索引重做信息时,基于所述重做信息更新相关段。
[0056] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0057] 当所述重做信息既不是索引重做信息也不是虚拟重做信息时,更新带有所述重做 信息的所述索引。
[0058] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0059] 当所述重做信息不是索引重做信息而是虚拟重做信息时,根据所述重做信息生成 索引数据并更新所述索引。
[0060] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0061] 当所述订户数据库节点的所述角色信息更新时,所述订户数据库节点检查所述索 引的所述角色信息是否匹配所述订户数据库节点的更新的角色信息;
[0062] 当所述索引的所述角色信息匹配所述订户数据库节点的所述更新的角色信息时, 所述订户数据库节点填充所述索引。
[0063] 根据本发明的实施例的另一方面,所述方法进一步包括:
[0064] 当所述索引的所述角色信息不匹配所述订户数据库节点的所述更新的角色信息 时,所述订户数据库节点截断所述索引。
[0065] 根据本发明的实施例的第=方面,提供一种主数据库节点,包括:
[0066] 第一检查单元,用于当所述索引被添加到所述主数据库节点时,检查索引的角色 信息是否匹配所述主数据库节点的角色信息;
[0067] 第一更新单元,用于当所述索引的所述角色信息匹配所述主数据库节点的所述角 色信息时,通过使用所述索引更新数据库信息。
[0068] 根据本发明的实施例的另一方面,所述主数据库节点进一步包括:
[0069] 第一添加单元,用于为所述主数据库节点添加所述角色信息。
[0070] 根据本发明的实施例的另一方面,所述主数据库节点进一步包括:
[0071] 第一创建单元,用于通过使用数据定义语言创建所述索引;
[0072] 第二更新单元,用于更新带有所述角色信息的所述索引。
[0073] 根据本发明的实施例的另一方面,所述主数据库节点进一步包括:
[0074] 第二检查单元,用于检查所述索引的所述角色信息是否匹配订户数据库节点的所 述角色信息;
[0075] 第一发送单元,用于当所述索引的所述角色信息匹配所述订户数据库节点的所述 角色信息时,将所述索引发送到所述订户数据库节点W使所述索引与所述订户数据库节点 同步。
[0076] 根据本发明的实施例的另一方面,所述主数据库节点进一步包括:
[0077] 第一接收单元,用于接收所述订户数据库节点的所述角色信息。
[0078] 根据本发明的实施例的另一方面,所述主数据库节点进一步包括:
[0079] 第=检查