ORM 是用于迁移数据的正确工具吗?

2024-04-24

背景

我们正在升级旧版导入工具,它的作用是将数据从连接到 SQL Server 的一个数据库移动到同一服务器上的第二个数据库,并使用不同的模式沿途执行转换和映射。

这是一个帮助解释正在发生的事情的示例

假设源数据库有一张表名为Client_Info目标表有两个名为Clients and Cities

Source.dbo.Client_Info

+-----------+----------+----------+-------+
| FirstName | LastName |   City   | State |
+-----------+----------+----------+-------+
| John      | Smith    | Richmond | VA    |
| Jeff      | Walters  | New York | NY    |
+-----------+----------+----------+-------+

目标.dbo.Clients

+-----------+-------------+--------------------------------------+
| FirstName |  LastName   |               CityGuid               |
+-----------+-------------+--------------------------------------+
| Scott     | Chamberlain | 07d954bf-3214-4df4-b640-48c27db2b1ed |
+-----------+-------------+--------------------------------------+

目的地.dbo.城市

+--------------------------------------+----------+-------+
|               CityGuid               | CityName | State |
+--------------------------------------+----------+-------+
| 07d954bf-3214-4df4-b640-48c27db2b1ed | Richmond | VA    |
+--------------------------------------+----------+-------+

合并后我希望目的地看起来像这样

目标.dbo.Clients

+-----------+-------------+--------------------------------------+
| FirstName |  LastName   |               CityGuid               |
+-----------+-------------+--------------------------------------+
| Scott     | Chamberlain | 07d954bf-3214-4df4-b640-48c27db2b1ed |
| John      | Smith       | 07d954bf-3214-4df4-b640-48c27db2b1ed |
| Jeff      | Walters     | 98a75f88-eeaa-49ba-b464-2ac988a7b093 |
+-----------+-------------+--------------------------------------+

目的地.dbo.城市

+--------------------------------------+----------+-------+
|               CityGuid               | CityName | State |
+--------------------------------------+----------+-------+
| 07d954bf-3214-4df4-b640-48c27db2b1ed | Richmond | VA    |
| 98a75f88-eeaa-49ba-b464-2ac988a7b093 | New York | NY    |
+--------------------------------------+----------+-------+

目前,它是一个 VB6 项目,我们仅使用硬编码的 SQL 语句,使用临时 #t 表来整理记录,并根据需要使用现有值或新值填充 GUID 列。

此后,我们已转为 C# .NET 商店,并且认为是时候将导入工具更新为 C# 了,因为当我们的软件新版本出现时,目标数据库发生变化,对工具进行更改变得越来越困难(只是为了安装 Visual Studio 6 并在 Windows 8 上运行而进行的斗争)。

我的问题

像 NHibernate 这样的 ORM 工具是适合这项工作的工具吗?我们之前没有人真正使用过 ORM(而且我们不是编写与新数据库进行日常使用的软件的开发团队,我们只是负责将旧数据库迁移到新数据库,并且“真正的开发人员”告诉我们他们对每个版本的架构进行了哪些更改)。我不太确定是否使用 ORM,因为我认为 ORM 用于诸如CRUD对客户端的操作,而不是像这样对服务器数据库迁移的操作。

我认为“正确”的方法是使用 SSIS,但我的部门中没有人熟悉它我的主管觉得 https://softwareengineering.stackexchange.com/questions/184107/my-boss-has-a-bad-case-of-not-invented-here让每个人学习另一种语言来维护它会花费太多的时间和资源(这个迁移工具是在我在另一个问题中讨论的步骤之后运行的)。

我主要寻找的是一种进行迁移的方法:

  • 海量数据
  • 允许在传输期间设置某些列(例如重新使用外键 GUID)
  • 随着目标数据库架构的更改而轻松更改
  • 最好用 C# 或 SQL 完成。

满足这些要求我应该寻找什么样的工具?

我问这个问题是因为我认为 ORM 不是正确的做法,但我不确定应该使用什么来代替。除了 SSIS(因为太不同而已从表中删除)之外,我不知道除了使用硬编码的 SQL 语句之外还能做什么,但这打破了我心中的“易于更改”要求。


毫无疑问,SSIS 是执行此操作的完美工具。

ORM 仅适用于应用程序中的 CRUD 操作(正如您所提到的),并且很有可能引起大数据传输的严重问题。 大多数 ORM 甚至不建议用于涉及大量行的 CRUD 操作,更不用说数据库级数据迁移了。 ORM 主要用于简化软件应用程序和数据库之间持久数据连接的编码。

另一方面,SSIS 是为数据库、数据仓库级别的安全 ETL(提取转换加载)而设计的。与存储过程相比,迁移发生的速度也明显更高。

我想补充的另一件重要的事情是,SSIS 非常简单(根据我的经验)。大多数操作涉及在 Visual Studio 设计器上拖放 ETL 控件,然后在配置屏幕上配置数据类型。除非您真的喜欢编写代码,或者在极其复杂的场景中,否则仅使用这些代码和一些数据类型 Transformation(T) 片段就可以了。

据我了解,目前老板认为这是一项不必要的投资。然而,SSIS是微软在数据仓库领域的王牌。查看您当前的要求,这正是您的组织所需要的。根据我们组织的经验,只要 Microsoft 存在,这一投资将证明每一分钱都是值得的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORM 是用于迁移数据的正确工具吗? 的相关文章

随机推荐

  • NSURLRequest http协议版本

    这是我今天提出的一个非常简单的问题 是否可以设置特定的HTTP协议版本NSURLRequest对象 例如 1 0 或 1 1 我在 telnet 上谈论的一个例子 pavlov pavlov telnet ya ru 80 Trying 8
  • BouncyCastle 类上的 NoClassDefFoundError

    在使用 BC 类的 Web 应用程序上一段时间后 我遇到了 NoClassDefFoundError java lang NoClassDefFoundError org bouncycastle util Pack at org boun
  • 错误:[ng:areq] 参数“MyCtrl”不是函数,未定义

    我是 Angularjs 的新手 我正在学习教程 但我在标题中遇到了错误 HTML 代码 div div div div
  • Outlook 添加、文本框、删除\退格键不起作用

    我开发了一个 Outlook 插件 自定义任务窗格 在用户控件中带有 Web 浏览器 当我在网络浏览器的文本框中写入内容时 退格键或删除按钮旁边的所有功能都运行良好 但我无法使用这些键 我是否遗漏了什么 我迟到了几年 但我设法解决了这个问题
  • 使用 SQL 语句更改忽略表添加列(如果不存在)

    我想向 mysql 表添加一个新列 但如果该列已存在 我想忽略该列的添加 我目前正在使用 ALTER IGNORE TABLE db tablename ADD COLUMN column name text NULL 但这会引发错误 ER
  • 错误:$compile:tpload 无法加载模板 Http 状态:404

    当我尝试使用 Angular 运行本地项目时 我从 Chrome 收到 404 状态 我不确定问题出在哪里 并且我已经尝试过类似问题的建议答案 这是我的指令文件 use strict ngdoc directive name stockDo
  • cmake:在 CMakeLists.txt 中选择生成器

    我想强制CMake使用 Unix Makefiles 发电机来自 CMakeLists txt 中 这是我现在使用的命令 cmake G Unix Makefiles 我希望是这样的 cmake 当在安装了 VC 和自定义工具链的 Wind
  • 在引导响应页面中如何将 div 居中

    我需要使用 bootstrap 将 div 放置在页面的中心来创建响应式页面 如下面提到的布局所示 Bootstrap 5 更新 使用弹性盒进行简单的垂直网格对齐 import url https cdnjs cloudflare com
  • 如何在 shell 函数中获得“set -e”的效果和用处?

    set e 或以 bin sh e 对于出现问题时自动轰炸非常有用 它使我不必对每个可能失败的命令进行错误检查 如何在函数内获得与此等效的内容 例如 我有以下脚本 该脚本在出现错误时立即退出 并显示错误退出状态 bin sh e echo
  • 根据内部数组中的值对外部数组进行排序,javascript

    我有一个包含数组的数组 我想根据内部特定列中的值对外部数组进行排序 我敢打赌这听起来有点令人困惑 所以我将直接跳到一个例子 初始数据 var data row 1 col1 2 row 1 col2 c row 1 coln row 2 c
  • 分析跟踪新 Web+App 中的自定义事件

    我曾经使用以下命令跟踪自定义事件 API 命中 google analytics and PHP via cURL 但现在分析正在弃用这种方法 我知道新的分析 Web App 用于跟踪此类事件 但我找不到任何可以让我跟踪这些事件的东西 我当
  • React Native项目没有index.ios.js或index.android.js

    你好 我是 React Native 的新手 我按照下面的链接构建了我的第一个项目 但发现没有 index ios js 或 index android js 可供我编辑 https facebook github io react nat
  • 如何在gnuplot中绘制带有彩色边框的矩形

    我想在我的图中画一个空矩形 到目前为止我有 set style rect back fs empty border lt 3 set object 1 rect from 1 1 to 2 2 我有一个带有虚线的矩形 如何更改线条的颜色 l
  • F# 中的异步 EF 查询

    在使用 EF6 的 C 中 我可以轻松地进行如下异步操作 using var context new MyDbContext var item await context SomeEntities Where e gt e Id 1 Fir
  • 如何在窗口窗体中制作圆形标签?

    众所周知 标签通常是正方形或长方形 我真的需要制作圆形标签 谁能告诉我这是否可能 或者至少为我指出正确的方向 抱歉 只是为了把事情说清楚 我想要一个圆形标签 不仅仅是在屏幕上画一个圆圈 您可以设置 Label 的 Region 属性 var
  • 在 CentOS 6.4 中意外删除了符号链接 libc.so.6。如何获得 sudo 权限来重新创建它?

    我不小心删除了符号链接 lib64 libc so 6 gt lib64 libc 2 12 so sudo rm libc so 6 然后我不能使用任何东西 包括ls命令 我输入的任何命令都会出现错误 ls error while loa
  • 如何使用 USPS 验证给定地址?

    我想向 USPS 验证给定的地址 地址 城市 州 邮政编码 如果提供的地址是有效地址 则返回结果 如果不是有效地址 则返回无效地址 那么我怎样才能在 C Net 中做到这一点呢 美国邮政服务 USPS 通过其地址信息 API 提供此服务 U
  • 扁平按钮与凸起按钮

    我想知道之间的基本区别Flat button and Raised Button 根据新Android材料设计指南 我想使用凸起按钮 但我不知道它们是什么 网络上有一些论坛显示一个凸起的按钮 但他们称之为 扁平 谁能告诉我两者之间的基本区别
  • Android 找不到类异常

    我正在使用两个单独的类 其中一个有一些按钮 另一个打开谷歌地图 我正在其上进行覆盖 如果有人能看到我打开 Map class 的意图的问题 请告诉我 我将输入我的错误消息和代码 package com state park import j
  • ORM 是用于迁移数据的正确工具吗?

    背景 我们正在升级旧版导入工具 它的作用是将数据从连接到 SQL Server 的一个数据库移动到同一服务器上的第二个数据库 并使用不同的模式沿途执行转换和映射 这是一个帮助解释正在发生的事情的示例 假设源数据库有一张表名为Client I