变更数据表结构的方法

文档序号:6620648阅读:326来源:国知局
变更数据表结构的方法
【专利摘要】本发明提供变更数据表结构的方法,有助于使变更数据表结构的执行时间较短且可控。本发明的一种变更数据表结构的方法包括:对应于一个或多个处于运行状态原结构数据表,所述计算机网络中的各个节点保存一个或多个新结构数据表;将选定的节点作为新发布节点,其他节点为新订阅节点,新发布表和新订阅表分别为新发布节点和新订阅节点中的所述新结构数据表,将新发布节点中的所述原结构数据表中的数据添加到对应的新结构数据表中,并将该数据发布到新订阅节点;在各个节点中的新结构数据表与原结构数据表达到数据同步的情况下,停止所述根节点中的原结构数据表的数据写入,然后将各个节点中的新结构数据表作为运行状态的数据表。
【专利说明】变更数据表结构的方法

【技术领域】
[0001] 本发明涉及一种变更数据表结构的方法。

【背景技术】
[0002] 随着计算机网络应用的普及,数据库的容量也在不断增大,变更数据表结构的工 作也变得越来越耗时。变更数据表结构的惯常做法一般有2种:
[0003] 1、直接在数据表上操作,变更表结构定义,可能存在的直接影响,如下面的1、2两 个原因。
[0004] 2、创建新结构表,在维护窗口导入数据,再修改表名;可能存在的影响只是数据导 入时间受原表大小制约。
[0005] 维护窗口是业务的暂停时间段,为了尽可能小的影响系统运行,维护窗口越短越 好。面对数据量日益增长的数据表,尤其是已经上千万条数据,容量超过几十GB甚至上百 GB时,对大容量表的结构变更工作(专指扩充现有固定长度的字段长度)就变得十分困难, 原因有以下几点:
[0006] 1、停机时间增长。因为对数据表中固定长度的字段进行长度扩充时(包括但不限 于int类型变更为bigint、char (10)变更为char (20)等),为保证关系数据库的ACID原 贝1J,会对数据表添加架构更新锁(Schema-M),以阻止在结构变更时有新数据写入;而对于 大容量的表而言,结构变更的执行时间(以下简称执行时间)将变得更长,以至于超出预期 的维护窗口时间,直接影响业务访问;
[0007] 2、执行及回滚时间风险增加。随着数据量的增加,大容量表的结构变更时间将优 于数据量的增长而快速增加,一旦超出维护窗口时间,是继续等待还是终止变更进入回滚 状态,将令维护人员很难抉择,而且回滚时间可能超出已经执行时间的几倍或者几十倍。这 使得操作的不确定性风险大大增加;此外,由于生产环境的复杂程度,很难在测试环境完全 模拟生产环境提前进行测试,使得测试结果的适用性、可靠性降低,这也增加了对执行时间 不可控的风险。
[0008] 因此对于变更数据表结构来说,需要一种执行时间较短且可控的方案。


【发明内容】

[0009] 有鉴于此,本发明提供一种变更数据表结构的方法,有助于使变更数据表结构的 执行时间较短且可控。
[0010] 为实现上述目的,根据本发明的一个方面,提供了一种变更数据表结构的方法。
[0011] 本发明的这种变更数据表结构的方法,用于在包含根节点以及多级子节点的计算 机网络中变更各节点中的数据表的结构,所述根节点中的数据表接收数据并向各子节点发 布,该方法包括:对应于一个或多个处于运行状态原结构数据表,所述计算机网络中的各个 节点保存一个或多个新结构数据表;将选定的节点作为新发布节点,其他节点为新订阅节 点,新发布表和新订阅表分别为新发布节点和新订阅节点中的所述新结构数据表,将新发 布节点中的所述原结构数据表中的数据添加到对应的新结构数据表中,并将该数据发布到 新订阅节点中的新结构数据表中;在各个节点中的新结构数据表与原结构数据表达到数据 同步的情况下,停止所述根节点中的原结构数据表的数据写入,然后将各个节点中的新结 构数据表作为运行状态的数据表。
[0012] 可选地,所述选定的节点是所述根节点或所述子节点。
[0013] 可选地,所述选定的节点是向所述计算机网络添加的新节点,该新节点为所述根 节点的订阅节点。
[0014] 可选地,所述将新发布节点中的所述原结构数据表中的数据添加到对应的新结构 数据表中的步骤包括:将新发布节点中的所述原结构数据表中的指定范围的数据添加到对 应的新结构数据表中,然后将该原结构数据表与该新结构数据表之间的差异数据添加到该 新结构数据表中。
[0015] 可选地,将各个节点中的新结构数据表作为运行状态的数据表的步骤包括:将各 个节点中的新结构数据表的表名修改为运行状态的数据表的表名。
[0016] 根据本发明的另一方面,提供了另一种变更数据表结构的方法。
[0017] 本发明的这种变更数据表结构的方法,用于变更单节点中的数据表的结构,该方 法包括:对应于一个或多个处于运行状态原结构数据表,所述单节点保存一个或多个新结 构数据表;设置新节点,并将该新节点和所述单节点分别作为订阅节点和发布节点;将所 述新节点作为新发布节点,所述单节点作为新订阅节点,新发布表和新订阅表分别为新发 布节点和新订阅节点中的所述新结构数据表,将新发布节点中的所述原结构数据表中的数 据添加到对应的新结构数据表中,并将该数据发布到新订阅节点中的新结构数据表中;在 各个节点中的新结构数据表与原结构数据表达到数据同步的情况下,停止所述根节点中的 原结构数据表的数据写入,然后将各个节点中的新结构数据表作为运行状态的数据表。
[0018] 可选地,所述将新发布节点中的所述原结构数据表中的数据添加到对应的新结构 数据表中的步骤包括:将新发布节点中的所述原结构数据表中的指定范围的数据添加到对 应的新结构数据表中,然后将该原结构数据表与该新结构数据表之间的差异数据添加到该 新结构数据表中。
[0019] 可选地,将各个节点中的新结构数据表作为运行状态的数据表的步骤包括:将各 个节点中的新结构数据表的表名修改为运行状态的数据表的表名。
[0020] 根据本发明的技术方案,在变更数据表结构时,在维护窗口期间之前,将原结构数 据表的数据转移到新结构数据表中,对于原结构数据表与新结构数据表之间仍存在的差异 数据则陆续补齐,使二者数据同步;然后进入维护窗口,在维护窗口期间,将新结构数据表 作为运行状态的数据表,主要工作是修改数据表的名称,耗时较短,再加上一些检查、测试 的工作,这些工作耗时一般不高,因此总的来说能够大幅度缩短维护窗口的长度。并且从本 实施例技术方案可以看出,维护窗口的长度主要取决于数据表的个数,而与数据表本身的 大小无关,而数据表的个数一般有限而且较为稳定,所以维护窗口的时间可控。

【专利附图】

【附图说明】
[0021] 附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
[0022] 图1是与本发明实施例有关的计算机网络的示意图;
[0023] 图2是根据本发明实施例的变更数据表结构的方法的主要步骤的示意图;
[0024] 图3是根据本发明实施例的向新结构数据表填充数据的示意图。

【具体实施方式】
[0025] 以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种 细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识 至IJ,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同 样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0026] 图1是与本发明实施例有关的计算机网络的示意图。如图1所示,根节点11中运 行的数据表为发布表,发布表的内容向各级子节点例如节点21发送,各级子节点中运行的 数据表为订阅表,订阅表的内容全部来自于发布表。各个节点中运行的数据表可以是一个, 也可以是多个。在变更表结构时,发布表和各个订阅表都需要变更。
[0027] 在本发明实施例中,各个节点中的原结构数据表之间的订阅关系是图中的各级子 节点中的订阅表的数据来自于根节点11中的发布表,数据表中的数据的流向如图1中的直 线箭头所示。在变更数据表结构时,在各个节点中建立每个原结构数据表对应的新结构的 数据表,此时新结构数据表尚为空表,需将数据导入其中。在这种情况下,本实施例中采用 一种新的发布-订阅机制来实现各个节点中的新结构数据表的数据填充。以下结合图2作 出说明。图2是根据本发明实施例的变更数据表结构的方法的主要步骤的示意图。
[0028] 步骤S21 :各个节点保存各自原结构数据表所对应的新结构数据表。新结构数据 表应当与原结构数据表一一对应。一个简单的对应方式是新结构数据表的表名由原结构数 据表的表名加上前缀或后缀而构成。当然也可采用其他的方式来实现上述对应,使新结构 数据表在作为运行状态数据表时能够准确地取代对应的原结构数据表。在接下来的步骤 中,新结构数据表会被填充数据,在该过程中,原结构数据表仍处于运行状态,即根节点11 中的发布表会接受外部的数据写入,按原有的订阅关系,数据会按图1中的直线箭头所示 分发到各个订阅表。
[0029] 步骤S22 :选定一个节点为新发布节点。以图1为例,可以选择根节点11,也可以 选择其他节点,在以下描述中,以选择节点31作为新发布节点,则其他节点例如节点21、 35、包括节点11,都成为新订阅节点。也就是说这里形成了另一套发布-订阅架构。本步骤 中,选定的新节点是系统中已有的节点,也可以在系统中新设置一个节点作为新发布节点, 尽量使本步骤中选择的发布节点有充足的运算资源,有利于后续步骤的高效执行。
[0030] 步骤S23 :在新发布节点内对新结构数据表进行数据填充。可以按照指定的范围, 例如创建副本的时间点之前的数据,先将新发布节点中的原结构数据表的该范围的数据填 充到该原结构数据表对应的新结构表中。参考图3,图3是根据本发明实施例的向新结构数 据表填充数据的示意图。
[0031] 图3中,原结构数据表31中,指定范围的数据为数据311,将其副本填充到对应的 新结构数据表32中。因为各个节点中的原数据表仍会持续地接收到新数据,对于节点11 来说是外部的写入数据,对于节点11的各个子节点来说是通过订阅得到的数据,所以在新 结构数据表得到数据311后,原结构数据表31中又出现新数据312。对于该新数据来说,该 新数据312是按原有的订阅关系得到(若新发布节点是根节点11,则该新数据312则是外 部写入数据),也需要添加到新结构数据表32中。在添加的过程中又会出现新的差异数据, 仍需添加到新结构数据表32中,因为添加的速度大于新的差异数据出现的速度,所以这是 一个收敛的过程,最终达到只要原结构数据表收到一项数据就会立即添加到新结构数据表 的状态,即二者形成同步。
[0032] 步骤S24 :将选择的发布节点内的新结构数据表的数据分发到其他节点中。这里 即按上述的另一套发布-订阅系统进行数据发布,使数据到达新订阅节点中的新结构数据 表中,数据的流向如图1中的弯线箭头所示。实际上本步骤与步骤S23有部分的重叠,因为 差异数据是分批地补充到新结构数据表,从而也是分批地进行发布。在每个节点中的新结 构数据表和原结构数据表情况下,就可以进入数据维护窗口。
[0033] 步骤S25 :停止根节点中的原结构数据表的数据写入。本步骤实现停写,标志着进 入维护窗口。
[0034] 步骤S26 :将各个节点中的新结构数据表作为运行状态的数据表。具体是将各个 节点中的新结构数据表的表名修改为运行状态的数据表的表名。
[0035] 以上对于更新图1所示的计算机网络中的数据表结构的方案做出了说明。该方案 的构思可以应用于仅包含单个节点的系统中。可以在该单节点中建立新结构数据表并使其 与原结构数据表的数据同步,然后进入数据维护窗口,以及将该新结构数据表作为运行状 态的数据表。也可以新增一个节点,将其作为原单个节点的订阅节点,再将该新增的节点作 为新的发布节点,原单个节点作为订阅节点,以形成新的发布-订阅架构,然后按照类似于 图2的步骤完成数据表的结构更新。
[0036] 根据本发明实施例的技术方案,在变更数据表结构时,在维护窗口期间之前,将原 结构数据表的数据转移到新结构数据表中,对于原结构数据表与新结构数据表之间仍存在 的差异数据则陆续补齐,使二者数据同步;然后进入维护窗口,在维护窗口期间,将新结构 数据表作为运行状态的数据表,主要工作是修改数据表的名称,耗时较短,再加上一些检 查、测试的工作,这些工作耗时一般不高,因此总的来说能够大幅度缩短维护窗口的长度。 并且从本实施例技术方案可以看出,维护窗口的长度主要取决于数据表的个数,而与数据 表本身的大小无关,而数据表的个数一般较少而且较为稳定,所以维护窗口的时间可控。经 发明人测算,在原结构数据表为16个、40%左右的表的记录数在5000万以上的情况下,采 用现有技术至少需要70小时,而采用本实施例的技术方案只需3小时,维护窗口的长度缩 短至1/20以内。
[0037] 以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的 普通技术人员而言,能够理解本发明的方法和设备的全部或者任何步骤或者部件,可以在 任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者 它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们 的基本编程技能就能实现的。
[0038] 因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来 实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包 含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构 成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以 是任何公知的存储介质或者将来开发出的任何存储介质。
[0039] 还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和 /或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列 处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序 执行。某些步骤可以并行或彼此独立地执行。
[0040] 上述【具体实施方式】,并不构成对本发明保护范围的限制。本领域技术人员应该明 白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何 在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围 之内。
【权利要求】
1. 一种变更数据表结构的方法,用于在包含根节点以及多级子节点的计算机网络中变 更各节点中的数据表的结构,所述根节点中的数据表接收数据并向各子节点发布,其特征 在于,该方法包括: 对应于一个或多个处于运行状态原结构数据表,所述计算机网络中的各个节点保存一 个或多个新结构数据表; 将选定的节点作为新发布节点,其他节点为新订阅节点,新发布表和新订阅表分别为 新发布节点和新订阅节点中的所述新结构数据表,将新发布节点中的所述原结构数据表中 的数据添加到对应的新结构数据表中,并将该数据发布到新订阅节点中的新结构数据表 中; 在各个节点中的新结构数据表与原结构数据表达到数据同步的情况下,停止所述根节 点中的原结构数据表的数据写入,然后将各个节点中的新结构数据表作为运行状态的数据 表。
2. 根据权利要求1所述的方法,其特征在于,所述选定的节点是所述根节点或所述子 节点。
3. 根据权利要求1所述的方法,其特征在于,所述选定的节点是向所述计算机网络添 加的新节点,该新节点为所述根节点的订阅节点。
4. 根据权利要求1、2或3所述的方法,其特征在于,所述将新发布节点中的所述原结构 数据表中的数据添加到对应的新结构数据表中的步骤包括:将新发布节点中的所述原结构 数据表中的指定范围的数据添加到对应的新结构数据表中,然后将该原结构数据表与该新 结构数据表之间的差异数据添加到该新结构数据表中。
5. 根据权利要求1、2或3所述的方法,其特征在于,将各个节点中的新结构数据表作为 运行状态的数据表的步骤包括:将各个节点中的新结构数据表的表名修改为运行状态的数 据表的表名。
6. -种变更数据表结构的方法,用于变更单节点中的数据表的结构,其特征在于,该方 法包括: 对应于一个或多个处于运行状态原结构数据表,所述单节点保存一个或多个新结构数 据表; 设置新节点,并将该新节点和所述单节点分别作为订阅节点和发布节点; 将所述新节点作为新发布节点,所述单节点作为新订阅节点,新发布表和新订阅表分 别为新发布节点和新订阅节点中的所述新结构数据表,将新发布节点中的所述原结构数据 表中的数据添加到对应的新结构数据表中,并将该数据发布到新订阅节点中的新结构数据 表中; 在各个节点中的新结构数据表与原结构数据表达到数据同步的情况下,停止所述根节 点中的原结构数据表的数据写入,然后将各个节点中的新结构数据表作为运行状态的数据 表。
7. 根据权利要求6所述的方法,其特征在于,所述将新发布节点中的所述原结构数据 表中的数据添加到对应的新结构数据表中的步骤包括:将新发布节点中的所述原结构数据 表中的指定范围的数据添加到对应的新结构数据表中,然后将该原结构数据表与该新结构 数据表之间的差异数据添加到该新结构数据表中。
8.根据权利要求6或7所述的方法,其特征在于,将各个节点中的新结构数据表作为运 行状态的数据表的步骤包括:将各个节点中的新结构数据表的表名修改为运行状态的数据 表的表名。
【文档编号】G06F17/30GK104112016SQ201410344171
【公开日】2014年10月22日 申请日期:2014年7月18日 优先权日:2014年7月18日
【发明者】肖磊 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1