什么是数据迁移?在数据迁移中需要考虑的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是数据迁移?在数据迁移中需要考虑的问题相关的知识,希望对你有一定的参考价值。

  数据迁移(又称分级存储管理,hierarchical storage management,hsm)是一种将离线存储与在线存储融合的技术。它将高速、高容量的非在线存储设备作为磁盘设备的下一级设备,然后将磁盘中常用的 数据按指定的策略自动迁移到磁带库(简称带库)等二级大容量存储设备上。当需要使用这些数据时,分级存储系统会自动将这些数据从下一级存储设备调回到上一 级磁盘上。对于用户来说,上述数据迁移操作完全是透明的,只是在访问磁盘的速度上略有怠慢,而在逻辑磁盘的容量上明显感觉大大提高了。
  数据迁移是将很少使用或不用的文件移到辅助存储系统(如磁带或光盘)的存档过程。这些文件通常是需在未来任何时间可进行方便访问的图像文档或历史信息。迁移工作与备份策略相结合,并且仍要求定期备份。还包括电脑数据迁移,迁移旧电脑(旧系统)中的数据、应用程序、个性化设置等到新电脑(新系统),在系统升级后很有必要。
  对数据的检查包括以下6个方面。
  (1)数据格式检查。检查数据的格式是否一致和可用,目标数据要求为number型。
  (2)数据长度检查。检查数据的有效长度,对于char类型的字段转换到varchar类型中,需要特别关注。
  (3)区间范围检查。检查数据是否包含在定义的最大值和最小值的区间中。例如年龄为300或录入日期为4000—1—1显然有问题。
  (4)空值、默认值检查。检查新旧系统定义的空值、默认值是否相同,不同数据库系统对空值的定义可能不同,需要特别关注。
  (5)完整性检查。检查数据的关联完整性。如记录引用的代码值是否存在,特别需要注意的是有些系统在使用一段时间后,为了提高效率而去掉了外键约束。
  (6)一致性检查。检查逻辑上是否存在违反一致性的数据,特别是存在分别提交操作的系统。
参考技术A 数据迁移,从字面意思理解就是数据从一个地方转移到另外一个地方。数据迁移是一个很重要的环节,在很多项目里它都是必不可少的,如:服务器和存储硬件的升级或者整合;数据密集型应用程序的增加等。数据迁移过程中会面临如:数据丢失、兼容性问题、影响业务等一系列风险。
数据丢失:这个分为两种情况,有一些数据丢失所能够通过备份数据和技术团队找回恢复数据的;而另外一种,我们称之为灾难性的数据丢失是不一样的,这种数据丢失不容易被技术团队注意,甚至在业务需要前都不会被注意到。
兼容性:在迁移过程中的系统变化、文件格式的意外变更或者源端和目标端用户访问的混乱都会造成兼容性问题的发生。尽管数据被迁移至目标端,但还是无法时间数据的成功访问。
影响业务:缺乏专业技术支持的数据迁移可能会导致系统长时间的宕机,造成数据丢失、项目时间延长、预算超额等问题。
参考技术B 数据迁移是一种将离线存储与在线存储融合的技术。
在生产环境中,做数据迁移需要考虑很多的可能性和场景,尽量排除可能发生的问题。
需要考虑的问题包括:

1、充分测试
在生产中进行数据的大批量迁移时,充分的测试时必须的。
2、完整的备份策略
在数据迁移之前进行完整的备份,一定要是全量的。甚至在允许的情况下做冷备都可以。数据的备份越充分,出现问题时就有了可靠的保证。
3、完整的日志
在数据迁移,数据升级的时候,一定要保留完整的日志记录,这样如果稍候有问题,也可以及时查验,也可以避免很多不必要的纷争。
4、网络带宽
网络是很重要的一个因素,数据迁移的时候肯定会从别的服务器中传输大量的文件,dump等,如果网络太慢,无形中就是潜在的问题。

考虑使用 Core Data 轻量级迁移的多个数据模型版本

【中文标题】考虑使用 Core Data 轻量级迁移的多个数据模型版本【英文标题】:Consideration of multiple datamodel versions with Core Data light weight migration 【发布时间】:2015-01-08 03:41:01 【问题描述】:

我是 Core Data 迁移的新手。我阅读了有关轻量级迁移的教程。场景是这样的:

我创建了一个数据模型,它是版本 1。 所以我必须在我的实体中添加一个属性,我使用轻量级迁移来做到这一点。现在数据模型是第 2 版。 很遗憾,我需要再次添加另一个属性。我仍然使用轻量级迁移来做到这一点,现在数据模型是版本 3。

如果我的用户经常更新,那没关系。但是,如果我的用户拥有数据模型版本 1,并将应用程序直接更新到数据模型版本 3,该怎么办?我需要编写代码来处理从 v1 到 v3 的迁移,还是因为我使用了轻量级迁移而自动为我处理?

【问题讨论】:

【参考方案1】:

您的应用需要能够处理所有可能发生的迁移。如果当前版本是第三版,那么必须可以将之前的所有版本升级到第三版。

这并不意味着您实际上必须为迁移编写代码。如果可以进行自动轻量级迁移,那么它就可以工作,而无需任何自定义迁移代码。这是否有效取决于模型的变化方式。如果通过自动轻量级迁移可以实现 v1 --> v3 迁移,则可以使用它。如果无法使用自动轻量级迁移,则需要您自己处理。答案取决于版本 1 与版本 3 的相似程度,与还有版本 2 的事实无关。

【讨论】:

我想我明白了:如果核心数据可以自动为 v1 -> v3 创建映射模型(只要 v1 -> v3 满足the doc 中列出的情况,那么它会自动发生.V1,V2,V3有点误导,其实只有V(old)和V(new)吧?【参考方案2】:

根据我的经验,这会自动运行。它也很容易测试,所以我建议这样做。创建 v1,在设备上安装应用程序,向应用程序添加一些数据。创建 v2、v3,然后在同一设备上运行应用程序。有用吗?

此外,您在编写新的应用程序代码时需要小心,不要假设新字段在升级时数据库中的任何现有记录都包含有效数据。

【讨论】:

以上是关于什么是数据迁移?在数据迁移中需要考虑的问题的主要内容,如果未能解决你的问题,请参考以下文章

在数据迁移期间删除实体中的所有记录

从特定版本开始 Flyway 迁移

大体量数据迁移思路

从Oracle迁移到MySQL的各种坑及自救方案

mysql迁移之巨大数据量快速迁移方案

Django在迁移后插入默认数据