用于水务公司营业收费系统升级的数据迁移方法转让专利

申请号 : CN201811166165.0

文献号 : CN109284293B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄樱曾亦黄曾华程方小勇袁鹏

申请人 : 湖南工学院

摘要 :

用于水务公司营业收费系统升级的数据迁移方法,涉及数据处理技术领域,包括以下步骤:建立数据映射关系:比对分析源数据库与目标数据库的数据结构,建立源数据库与目标数据库之间的数据映射关系;数据迁移:通过与源数据库相对应的SQL程序从源数据库中抽取数据迁移到中间数据库中,并根据所述源数据库与目标数据库之间的数据映射关系对迁移到中间数据库中的数据进行比对、分析和校验,修正错误和异常数据;通过与目标数据库相对应的SQL程序从中间数据库中抽取符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库。通过该方法可将两层C/S结构数据库中的数据迁移到三层B/S结构的数据库中,从而实现新老系统的平滑切换升级。

权利要求 :

1.用于水务公司营业收费系统升级的数据迁移方法,其特征在于,包括以下步骤:建立数据映射关系:比对分析源数据库与目标数据库的数据结构,建立源数据库与目标数据库之间的数据映射关系;

数据迁移:通过与源数据库相对应的SQL程序从源数据库中抽取数据迁移到中间数据库中,并根据所述源数据库与目标数据库之间的数据映射关系对迁移到中间数据库中的数据进行比对、分析和校验,修正错误和异常数据;通过与目标数据库相对应的SQL程序从中间数据库中抽取符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库;

在从源数据库中抽取数据迁移到中间数据库的过程中,根据迁移的顺序从源数据库中依次抽取对应的数据集并给其添加分区信息及原始识别信息,在中间数据库中划分出与抽取的数据集一一对应的存储分区;

根据分区信息将数据集迁移到中间数据库对应的存储分区,获取存储分区中的增量数据,生成第一中间识别信息;

对比原始识别信息和第一中间识别信息,若原始识别信息和第一中间识别信息一致,则执行对该存储分区中数据进行比对、分析和校验,修正错误和异常数据,同时进入源数据库中下一数据集的迁移操作。

2.根据权利要求1所述的用于水务公司营业收费系统升级的数据迁移方法,其特征在于:执行数据迁移的顺序依次为:用户信息迁移、表册和区域的架构信息迁移、管理部门架构信息迁移、数字字典迁移,最后再将水价信息、操作员信息、水费信息、缴费信息、抄表信息、托收信息及单据信息迁移到中间数据库。

3.根据权利要求2所述的用于水务公司营业收费系统升级的数据迁移方法,其特征在于,还包括:将与用户信息相关的表单的基础表格设置为索引表,将表中的非主键列存储于具有堆组织方式的溢出存储区中,将常用序列存储于B树的叶子节点中。

4.根据权利要求3所述的用于水务公司营业收费系统升级的数据迁移方法,其特征在于,还包括:将包含用户账户及账单信息的表通过Join语句关联起来,对这些表中用于用户账户及账单查询并且不重复的关键字段建立索引。

5.根据权利要求4所述的用于水务公司营业收费系统升级的数据迁移方法,其特征在于,还包括:通过数据库查看SQL真实的执行计划判断索引使用合理性,根据SQL真实的执行计划调整所建立的索引。

6.根据权利要求1所述的用于水务公司营业收费系统升级的数据迁移方法,其特征在于,还包括:完成对存储分区中数据进行比对、分析和校验,修正错误和异常数据后,重新获取该存储分区中的增量数据,生成第二中间识别信息,再执行该存储分区中符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库的操作;

获取目标数据库中的增量数据,生成迁移结果识别信息;

对比第二中间识别信息和迁移结果识别信息,若第二中间识别信息和迁移结果识别信息一致,则断开该存储分区与源数据库及目标数据库的连接,同时进入另一存储分区中数据集的迁移操作。

7.根据权利要求1-6中任意一项所述的用于水务公司营业收费系统升级的数据迁移方法,其特征在于:将SQL中只含数值信息的字段设计为数字型的字段。

说明书 :

用于水务公司营业收费系统升级的数据迁移方法

技术领域

[0001] 本发明涉及数据处理技术领域,特别涉及一种用于水务公司营业收费系统升级的数据迁移方法。

背景技术

[0002] 随着信息化建设在水务行业的逐步深入,自来水公司对于营业收费系统的响应速度和功能完善有了更高的要求,为此开发了新的收费系统来满足当前形势下的业务需求。
[0003] 传统营业收费系统的数据库为两层的 C/S 结构,新营业收费系统的数据库为三层 B/S结构,与两层的 C/S 结构相比,B/S 能够允许合理地划分三层结构的功能使之在逻辑上保持相对的独立性,从而使整个系统的逻辑结构更为清晰和流畅,同时也能够提高整个系统的可维护性和可扩展性。不过在新系统正式上线之前,老系统中大量的原始数据怎样成功地迁移到新系统中成为系统升级过程中的关键步骤。
[0004] 具体而言,老营业收费系统中的数据大部分是财务报表和用户信息类的数据,主要的基础数据包括用户状态、收费方式、证件类型、工单状态、水表状况等。数据迁移的过程就是将源数据库中的上述数据转换到目标数据库的过程,从两层结构到三层结构,从C/S到B/S,数据迁移的成功与否将决定整个营业收费系统能否实现平滑升级和更新,一旦迁移失败,将导致新系统无法正常运行,此外,为了保障自来水公司的正常营运,数据迁移的效率也必须重点关注。

发明内容

[0005] 本发明要解决的技术问题是提供一种用于自来水公司营业收费系统升级的数据迁移方法,通过该方法将两层C/S结构的老系统数据库中的数据迁移到三层B/S结构的新系统数据库中,以实现新老系统的切换升级并保障自来水公司的正常营运。
[0006] 为了解决上述技术问题,本发明采用如下技术方案:一种用于水务公司营业收费系统升级的数据迁移方法,其特征在于,包括以下步骤:
[0007] 建立数据映射关系:比对分析源数据库与目标数据库的数据结构,建立源数据库与目标数据库之间的数据映射关系;
[0008] 数据迁移:通过与源数据库相对应的SQL程序从源数据库中抽取数据迁移到中间数据库中,并根据所述源数据库与目标数据库之间的数据映射关系对迁移到中间数据库中的数据进行比对、分析和校验,修正错误和异常数据;通过与目标数据库相对应的SQL程序从中间数据库中抽取符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库。
[0009] 其中,执行数据迁移的顺序依次为:用户信息迁移、表册和区域的架构信息迁移、管理部门架构信息迁移、数字字典迁移,最后再将水价信息、操作员信息、水费信息、缴费信息、抄表信息、托收信息及单据信息迁移到中间数据库。
[0010] 进一步地,将与用户信息相关的表单的基础表格设置为索引表,将表中的非主键列存储于具有堆组织方式的溢出存储区中,将常用序列存储于B树的叶子节点中。
[0011] 更进一步地,将包含用户账户及账单信息的表通过Join 语句关联起来,对这些表中用于用户账户及账单查询并且不重复的关键字段建立索引。
[0012] 其中,通过数据库查看SQL真实的执行计划判断索引使用合理性,根据SQL真实的执行计划调整所建立的索引。
[0013] 优选地,在上述实施方案中,根据迁移的顺序从源数据库中依次抽取对应的数据集并给其添加分区信息及原始识别信息,在中间数据库中划分出与抽取的数据集一一对应的存储分区;
[0014] 根据分区信息将数据集迁移到中间数据库对应的存储分区,获取存储分区中的增量数据,生成第一中间识别信息;
[0015] 对比原始识别信息和第一中间识别信息,若原始识别信息和第一中间识别信息一致,则执行对该存储分区中数据进行比对、分析和校验,修正错误和异常数据,同时进入源数据库中下一数据集的迁移操作。
[0016] 进一步地,在完成对存储分区中数据进行比对、分析和校验,修正错误和异常数据后,重新获取该存储分区中的增量数据,生成第二中间识别信息,再执行该存储分区中符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库的操作;
[0017] 获取目标数据库中的增量数据,生成迁移结果识别信息;
[0018] 对比第二中间识别信息和迁移结果识别信息,若第二中间识别信息和迁移结果识别信息一致,则断开该存储分区与源数据库及目标数据库的连接,同时进入另一存储分区中数据集的迁移操作。
[0019] 优选地,对于SQL中只含数值信息的字段,将其设计为数字型的字段。
[0020] 本发明提供的数据迁移方法先通过对数据库查询数据结构的分析,建立了源数据库与目标数据库的数据映射关系,通过针对源数据库开发的SQL程序从源数据库中抽取数据迁移至中间数据库进行比对、分析和校验,修正错误和异常数据后再通过针对目标数据库开发的SQL程序从中间数据库中抽取满足前述映射关系的数据迁移至目标数据库中,这样大大降低了迁移过程出错的概率,同时保持了整体数据一致性。进一步地,本发明通过对数据迁移顺序以及数据查询和抽取方式的优化,大大缩短了迁移实施的过程,从而保证了在允许的停机时间内能够完成所有数据的迁移工作。

附图说明

[0021] 图1为实施例中数据迁移模型图;
[0022] 图2为实施例中数据迁移步骤图;
[0023] 图3为某水务公司采用实施例所涉数据迁移方法所要迁移数据的查询结果图;
[0024] 图4为前述水务公司采用实施例所涉数据迁移方法实施数据迁移后的结果分析图。

具体实施方式

[0025] 为了便于本领域技术人员的理解,下面结合具体实施例与附图对本发明作进一步的说明。
[0026] 图1示出了本发明所涉数据迁移的模型图,总体来说,本发明所涉用于水务公司营业收费系统升级的数据迁移方法包括以下步骤:
[0027] 建立数据映射关系:比对分析源数据库与目标数据库的数据结构,建立源数据库与目标数据库之间的数据映射关系;
[0028] 数据迁移:通过与源数据库相对应的SQL程序从源数据库中抽取数据迁移到中间数据库中,并根据所述源数据库与目标数据库之间的数据映射关系对迁移到中间数据库中的数据进行比对、分析和校验,修正错误和异常数据;通过与目标数据库相对应的SQL程序从中间数据库中抽取符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库。
[0029] 简单来说,在图1所示的模型结构中,首先对新老系统的数据库结构进行比对和分析,建立起新老系统的映射关系,建立中间数据库。然后把老数据库的数据先迁移到中间库,在中间库通过分析、对比和校验,对错误和异常数据进行修正和处理,通过新老系统的映射关系把数据整理好之后,最后再通过基于新系统开发的程序把整理好的数据迁移到新系统的数据库中去。
[0030] 图2示出了数据迁移过程的执行顺序,如图2所示,执行数据迁移的顺序依次为:用户信息迁移、表册和区域的架构信息迁移、管理部门架构信息迁移、数字字典迁移,最后再将水价信息、操作员信息、水费信息、缴费信息、抄表信息、托收信息及单据信息迁移到中间数据库。
[0031] 图2所示迁移顺序是根据迁移过程中的重要程度和职能划分来确定的,通过分析并确定出迁移过程中的先后顺序,从而来执行整个数据迁移的步骤,这样就可以让整个迁移的步骤完整、有序和可靠。
[0032] 在进行新老系统切换的过程中要尽量去减少消耗的时间,这样才能达到更好的预期效果,基于此,需要针对迁移过程加以改进从而努力提升迁移的速度来减少所要花费的时间。例如,可以在上述实施方案的基础上通过建立索引和优化SQL语句的方式来达到优化的效果。
[0033] 数据库的索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提升检索的速率。目前的数据库中的索引是采用 B 树结构来实现的,可以根据 B 树的一些特点来使用特定的方法。首先,采用传统的标准表结构的话就是通过顺序扫描的方式来返回相关
[0034] 的记录,而采用索引的方式,那么数据库将会通过全索引的扫描方式访问相关的记录。其次,由于存储结构的不同,索引表在存储数据的时候是把所有的记录行跟排过序的主键列同时一起存储在数据库中的。由于这种数据结构的关系所以在查询的时候只要找到了主键的话,就可以查询到整条的记录的信息,但是标准表在进行数据查询的时候就必须先找到对应的ROWID 列,再去查询主键,最后再去查询相应的记录。因此,通过建立索引表的方式可以减少在数据查询过程中的一些中间环节,从而避免了额外的数据读取操作。
[0035] 具体到实际操作时,可以将与用户信息相关的表单的基础表格设置为索引表,将表中的非主键列存储于具有堆组织方式的溢出存储区中,将常用序列存储于B树的叶子节点中。因为在营业收费系统中建立的索引表比较大,所以使用了溢出存储可以减少所占的存储空间,根据 B 树的存储和查询机制也可以大大地提高常用列的查询效率。
[0036] 此外,还可以将包含用户账户及账单信息的表通过Join 语句关联起来,对这些表中用于用户账户及账单查询并且不重复的关键字段建立索引。在新系统中,如果我们需要知道某个用户水费欠缴情况,我们就需要知道用户信息、所在营业所、水费缴纳的情况等,由于这些信息都包含于不同的表中,通过使用 Join 语句来把这些表都关联起来后,对这些关联的字段建立索引可以显著地提升数据的查询速度。当然,对于重复率高的字段不需要建立索引,而对于那些不重复的关键字段可以对其建立索引,因为对于在实际应用中变换频繁的表格,建立索引表就不怎么合适。
[0037] 在前述实施方案的基础上,可以通过数据库查看SQL真实的执行计划判断索引使用合理性,根据SQL真实的执行计划调整所建立的索引,从而更好地保证系统性能。建立索引的目的是提升系统的性能,但是同时也会增加一些额外的开销,在建立索引时应当考虑其合理性,不合理的索引反而会使系统性能下降,在现有技术中,判断SQL 的响应时间是判定索引合理性的一种基本方法,但是该方法会受 SQL 复杂程度、数据量、主机负载及缓存因素等的影响,具体到本发明针对水务公司营业收费系统升级的数据迁移操作过程中,由于涉及的SQL较复杂、数据量较大,从而难以准确判断,此时通过数据库查看 SQL 真实的执行计划来判断索引使用的合理性反倒是更优的选择。
[0038] 对 SQL 语句的优化的目的也就是要提升系统的查询速度,而查询速度很大程度上是跟扫描的方式有关系,使用优化的结果将大大加快数据库迁移的速度从而可以节省很多宝贵的时间。在系统切换的过程中可以在以下几个方面来改进优化效果。
[0039] 1、对于 where 语句,在有 where 的子句中对字段不进行 null 值判断,也去避免使用 !=或<>操作符,如果不是这样那搜索引擎将会进行全表扫描而放弃使用索引;在处理连接条件时,不能用“or”来进行连接,而应使用其他的连接方式如“union”等来替换它,因为在数据表中并不是给每个字段都加上了索引,而是在关键的字段中加上了索引,如果使用“or”的话一些字段有索引,一些字段没有索引,那么也将导致搜索引擎进行全表扫描;对于“in”一般也用exists 替代;不在where 子句中使用未知参数,因为SQL 语句只在运行的时候才会解析其局部变量,但是优化过的程序不能将访问计划的选择推迟到运行时;它只能在编译的时候进行选择。如果在编译时建立了访问计划,但是变量的值还是未知的,所以无法作为索引的选择输入项。那么语句也将会执行全表扫描。
[0040] 2、对于update 语句,因为我们只是更改里面的部分字段,应避免update 所有字段,因为那样将会频繁的调动从而引起很大地性能消耗,同时也会带来大量的日志来占用存储空间。
[0041] 值得一提的是,还可以将SQL中只含数值信息的字段设计为数字型的字段。因为搜素引擎在处理查询程序和连接机制时会逐一比较字符串中的每一个字符,但是对于数字型的字段而言只要比较一次,从而可以大大地提升性能。
[0042] 为了验证上述实施方案的效果,申请人在其承接的某自来水公司营业收费系统升级项目中应用了上述数据迁移方法,在该自来水公司营业收费系统升级过程中,有 827 个表需要从老系统迁移到新系统中,如图3所示,总共涉及94526515 条数据,采用传统方式完成上述数据迁移需要耗费的时间至少在11.5小时以上,若迁移过程中出现系统错误,需要耗费的时间更长,将无法满足自来水公司营运需求。采用本发明所涉方法后,实际完成迁移仅耗费约6个小时,从图4所示对数据迁移的结果统计可以看出,新老系统迁移之后的数据对比结果中除了欠费汇总出现些微差错之外其他的准确率都是完全一致的,对于如此大量的数据迁移而言,效果令人满意。
[0043] 作为一种优选的实施方案,例如还可以根据迁移的顺序从源数据库中依次抽取对应的数据集并给其添加分区信息及原始识别信息,在中间数据库中划分出与抽取的数据集一一对应的存储分区;
[0044] 根据分区信息将数据集迁移到中间数据库对应的存储分区,获取存储分区中的增量数据,生成第一中间识别信息;
[0045] 对比原始识别信息和第一中间识别信息,若原始识别信息和第一中间识别信息一致,则执行对该存储分区中数据进行比对、分析和校验,修正错误和异常数据,同时进入源数据库中下一数据集的迁移操作;
[0046] 在完成对存储分区中数据进行比对、分析和校验,修正错误和异常数据后,重新获取该存储分区中的增量数据,生成第二中间识别信息,再执行该存储分区中符合源数据库与目标数据库间数据映射关系的数据迁移到目标数据库的操作;
[0047] 获取目标数据库中的增量数据,生成迁移结果识别信息;
[0048] 对比第二中间识别信息和迁移结果识别信息,若第二中间识别信息和迁移结果识别信息一致,则断开该存储分区与源数据库及目标数据库的连接,同时进入另一存储分区中数据集的迁移操作。
[0049] 通过上述方式可以更好地在数据完整性、准确性与迁移速度之间实现平衡。采用该优选的方案后,实际完成迁移耗费时间在前述方案的基础上进一步缩短了近一小时,并且新老系统迁移之后的数据准确率几乎达到了完全一致(欠费汇总异常率降低至0.0012%,可以近似看作准确率为100%,其余项目准确率为100%),取得了非常不错的效果。
[0050] 为了让本领域普通技术人员更方便地理解本发明相对于现有技术的改进之处,本发明的一些附图和描述已经被简化,并且为了清楚起见,本申请文件还省略了一些其它元素,本领域普通技术人员应该意识到这些省略的元素也可构成本发明的内容。