背景
我们正在升级旧版导入工具,它的作用是将数据从连接到SQL Server的一个数据库移动到同一服务器上的第二个数据库,并使用不同的架构执行转换和映射。
以下是帮助解释正在发生的事情的示例
假设源数据库有一个名为Client_Info
的表,目标表有两个名为Clients
和Cities
的表
Source.dbo.Client_Info
+-----------+----------+----------+-------+
| FirstName | LastName | City | State |
+-----------+----------+----------+-------+
| John | Smith | Richmond | VA |
| Jeff | Walters | New York | NY |
+-----------+----------+----------+-------+
Dest.dbo.Clients
+-----------+-------------+--------------------------------------+
| FirstName | LastName | CityGuid |
+-----------+-------------+--------------------------------------+
| Scott | Chamberlain | 07d954bf-3214-4df4-b640-48c27db2b1ed |
+-----------+-------------+--------------------------------------+
Dest.dbo.Cities
+--------------------------------------+----------+-------+
| CityGuid | CityName | State |
+--------------------------------------+----------+-------+
| 07d954bf-3214-4df4-b640-48c27db2b1ed | Richmond | VA |
+--------------------------------------+----------+-------+
合并后,我希望目的地看起来像这样
Dest.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 |
+-----------+-------------+--------------------------------------+
Dest.dbo.Cities
+--------------------------------------+----------+-------+
| 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,但我部门中没有人熟悉它and my supervisor feels让每个人都学习另一个需要太多的时间和资源用来维护它的语言(这个迁移工具是在我在另一个问题中讨论的步骤之后运行的。)
我正在寻找的主要方法是使用以下方式进行迁移:
我应该根据这些要求寻找什么样的工具?
我问这个问题,因为我认为ORM不是正确的做法,但我不确定应该使用什么。除了SSIS(因为太过不同而已经脱离桌面)之外,我不知道除了使用硬编码的SQL语句之外该做什么,但这打破了我脑海中“易于改变”的要求。
答案 0 :(得分:2)
SSIS是完成此任务的完美工具,请放手。
ORM仅适用于应用程序中的CRUD操作(如您所述),并且很有可能引起对大数据传输的严重关注。 大多数ORM甚至不建议用于涉及大量行的CRUD操作,忘记数据库级数据迁移。 ORM主要用于软件应用程序和数据库之间持久数据连接的易编码。
另一方面,SSIS是在数据库,数据仓库级别安全地进行ETL(Extract Transform Load)。与存储过程相比,迁移的速度也明显更高。我想补充的另一件重要事情是,SSIS非常容易(根据我的经验)。大多数操作涉及在Visual Studio设计器上拖放ETL控件,然后在配置屏幕上配置数据类型。除非你真的喜欢编写代码,或者在非常复杂的场景中,否则只需使用一些数据类型转换(T)片段就可以了。
据我所知,老板认为这是一项不必要的投资。但是,SSIS是微软在数据仓库领域的王牌。查看您当前的需求,这正是您的组织所需要的。根据我们组织的经验,只要微软生活,这项投资将证明每一分钱都值得。
答案 1 :(得分:2)
我也不会使用完整的ORM,但像Dapper这样的微型ORM非常适合这样的任务(除此之外)。如果您熟悉TSQL和c#,它可以非常快速地运行,非常接近金属,以获得高性能和易用性。 (你可以在15分钟内提高效率)
刚刚完成了一个类似的项目,使用它将数据从服务器移动到服务器,它可以像冠军一样工作和执行。
答案 2 :(得分:1)
ORM绝对不是正确的工具,因为您正确指出它们适用于OLTP应用程序。
鉴于SSIS不在桌面上(是正确选择它是一个选项),我会考虑查看Rhino ETL。非常灵活,你可以使用SqlBulkCopy
,显然你应该考虑在这里做。它是open source,太启动了。