关于 MongoDB 与 SQL Server 通过本身自带工具实现数据快速迁移 及 注意事项 的探究

背景介绍

随着业务的发展、需求的变化,促使我们追求使用不同类型的数据库,充分发挥其各自特性。如果决定采用新类型的数据库,就需要将既有的数据迁移到新的数据库中。在这类需求中,将SQL Server中的数据导入到MongoDB 中显得尤为突出。

面对这种需求,大家优先想到的就是百度查找第三方工具,可惜截止目前,还没有一款公认比较满意的数据迁移工具。百度不到,大家可能就要回头自己开发了。如此,更是花费不少人力物力和宝贵的精力。甚至,由于没有理想的迁移工具,导致项目优化一再延迟。

其实,你原本不必如此!因为,还有一个工具,并且性能还傲视群雄。

那就是充分挖掘数据库自身的导出导入功能。

原理

MongoDB数据库 可以通过mongoexport/mongoimport命令进行数据的导出导入,并且支持文件CSV格式;

SQL Server 数据库 一样可以进行导出导入【“任务”—>导出数据/导入数据】,其数据一样可以保存到CSV文件中。

那么,我们是不是可以借助 CSV文件,在这两种数据库间进行数据迁移呢?

答案是肯定的!答案是肯定的!答案是肯定的!

此外,数据直接导出导入,性要比其它工具快一个数量级。

即:通过SQL Server 和 MongoDB 本身自带的 导入导出功能 ,可以实现数据的快速迁移。

将SQL Server中的数据导入到MongoDB中

step 1 选择指定数据库,进行【导出数据】

step 2  选择导出的数据源信息

因在SQL Server 服务器上执行,服务器名称可选择本地(. 即可),身份认证可以使用Window身份验证(如SQL Server 禁用了此window登入方式,那么就要使用SQL Server 身份验证),然后,选择数据库。

step 3 选择导出目标(此为关键步骤

目标一定要选择 【平面文件目标】

为 导出文件命名 选择 【浏览】,在打开的 界面上 选择导出文件类型【CSV 文件(*.csv)】

例如,文件命名为SQLToMongoDB01

点击 【下一步】

Step 4  指定表复制 或 查询

可以指定从数据源复制一个或多个表和视图,还是通过 T_SQL 语句从数据源中复制查询结(可以指定选择列 或对列二次加工后的数据)。

Step 5  配置平面文件目标

在这一步选择要导出的表或视图

如果想对 field 字段 进行修改,可以选择 【编辑映射】

对想要修改的列命进行重命名,例如 将SQL Server 中的 AreaCode 命名 而在MongoDB中命名为 AreaCodeMongoDB

然后 点击 【下一步】

Step 6 保存并运行包

直接点击 【下一步】

Step 7 完成该向导

直接点击 【完成】

数据导出成功

导出数据773838 笔数据。

Step 8 将产生的文件Copy至 MongoDB 服务器上

Step 9 在mongoDB 服务器上 执行 mongoimport 命令, 将从 SQL Server 导出的csv 数据导入到MongoDB中。

执行命令 为

/data/mongodb/mongobin344/bin/mongoimport --file /data/mongodb_back/SQLToMongoDB01.csv  -h 172.X.X.XXX --port 端口  --type csv --headerline -u 用户名 -p ‘密码‘ -d testdba0906 --authenticationDatabase 认证数据库 -c SQLToMongoDB01

执行成功,导入数据 773838 个文档。并且可以看到很快,不到15S。

此部分 测试验证OK!

将 MongoDB中的数据导入的SQL Server 中

Step 1 使用 mongoexport 将MongoDB数据库中的数据导出

执行命令

/data/mongodb/mongobin344/bin/mongoexport   -h 172.X.X.X --port 端口  --type csv  -u 用户名 -p ‘密码‘ -d testdba0906 --authenticationDatabase 认证数据库  -c SQLToMongoDB01  -f 字段1,字段2,字段3,字段4,字段5 -o  /data/mongodb_back/MongoDBToSQL.csv 

Step 2  将从MongoDB中导出的CSV 文件上传到 SQL Server 服务器上。

Step 3 将CSV 文件导入到SQL Server中

(此过程,不是本文章的重点,所以不再详细说明,只指出关键步骤。)

选择数据源,请选择【平面文件源】

选择源表和源视图 【可以通过编辑映射,修改列名,修改字段类型,修改字段长度】

step 4  数据导出成功

检查数据量和源表数据一致。

此部分 测试验证OK!

注意事项

注意1: 因为 mongoimport 导入的文件默认是json 格式,所以csv 文件,一定要在命令中指明 --type csv

否则,就无法识别文件中的数据。报错信息:

Failed: error processing document #1: invalid character ‘X‘ looking for beginning of value

(X代表文件中的第一个字符)

注意 2 :  mongoimport 导入的csv文件,一定要执行 –headerline 参数,指明不导入第一行。csv格式的文件第一行为列名。

否则 ,提示一定要指明字段属性,报错信息:

error validating settings: must specify --fields, --fieldFile or --headerline to import this file type

注意 3 :CSV 文件的列数据中不可以包含“” (中文双引号)。

否则,当导入此行数据时,提示错误信息

Failed: read error on entry #XXXX: line XXXX, column 110: bare " in non-quoted-field

注意 4: 如果数据中含有中文,需检查导入后是否变成了乱码。

为防止乱码,需要将csv文档改成utf-8的编码方式即可。例如使用edit with notepad ++ 编辑器打开文件,另存为utf-8就可以了。

注意 5:MongoDB导出CSV格式一定要通过 –f 参数 指明字段名,负责报错:

Failed: CSV mode requires a field list。

注意 6:MongoDB DB 数据模式自由,并且文档可以内嵌,所以将MongoDB中的数据导入到SQL Server 比较困难,特别是含有中文语句时。

注意 7 : SQL Server 导出数据时,字段数据中不可以包含nchar(9)、nchar(32)、nchar(160) 等特殊字符,否则,在导出数据生成csv文件时报错。

原文地址:https://www.cnblogs.com/xuliuzai/p/9607515.html

时间: 2024-10-28 18:52:01

关于 MongoDB 与 SQL Server 通过本身自带工具实现数据快速迁移 及 注意事项 的探究的相关文章

SQL Server DBA十大必备工具使生活轻松

[IT168 技术]曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过 其他工具了;诚然,SSMS和Profile足够强大,工作的大部分内容都能通过它们搞定,但是MS.第三方公司甚至是个人开发者为SQLServer提 供了很多其他的工具,如果你能充分的掌握这些工具,无疑会给我们数据库的管理.优化.测试和排错节省大量的时间和精力,下面就来介绍除SSMS和 Profile之外的其他有用的工具. NO1: PD(P

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

SQL Server 基础 04 函数与分组查询数据

函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值).min().max().count(求数量) sum函数语法  :  sum(列明) select sum(sno) as 序号和 from stu_info avg select avg(sno) as 序号平均值 from stu_info . . . count 用来一组值的个数,统计 sel

SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. 通过前面几篇文章介绍了

安装好SQL Server 2016,没有自带SSMS 工具

https://docs.microsoft.com/zh-cn/sql/ssms/sql-server-management-studio-changelog-ssms?view=sql-server-2016#previous-ssms-releases 安装:SQL Server Management Studio - Changelog (SSMS) 注意:默认情况下,安装好SQL Server 2016,没有自带SSMS 工具,需要手动从上面的链接下载工具安装.可以选择17.x (Fo

从SQL Server数据库转到Oracle数据库的数据脚本处理

在我们很多情况下的开发,为了方便或者通用性的考虑,都首先考虑SQL Server数据库进行开发,但有时候客户的生产环境是Oracle或者其他数据库,那么我们就需要把对应的数据结构和数据脚本转换为对应的数据库,数据结构一般来说,语法都遵循了SQL92的标准,或者我们根据不同的PowerDesigner文件进行生成对应的结构脚本即可,但是实际数据的脚本我们就需要进行一定的处理,以及文本的替换处理了,本文结合Notepad++的文本正则表达式替换,实现一些如日期较为特殊的数据脚本调整,把它从SQL S

SQL Server 2016五大优势挖掘企业用户数据价值

转载自:http://soft.zdnet.com.cn/software_zone/2016/0318/3074442.shtml 3月10日,微软公司在美国纽约举办了一场名为“Data Driven”的活动,正式发布了新一代SQL Server 2016, 与此同时,还附赠了两条爆炸性消息:微软将SQL Server 2016开放给linux,同时还发布了一款针对Oracle数据库的迁移工具,以及相关的迁移优惠政策. 业内对这两条消息进行了各种各样的猜想和推测. 一周后,SQL Server

SQL Server Reporting Service(SSRS) 第二篇 SSRS数据分组Parent Group

SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子默认使用Table进行简单的数据显示,有时为了进行更加直观的数据显示,我们需要按照某个字段对列表进行分组.为了进行更加明确的说明,我特地新建了一个表(已经填充相应数据)和一个Report(已可以进行数据的展示),Report的显示效果如下所示,下面我将按照Year和Region进行分组: 第一步:准备 先从当前的设计环境中移除ID,Year和Country两列,如下所示: 第二步:添加按Count

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. 今天来写一下统计信息对于复合索引在预估时候的计算方法和潜在问题. 本文原形来自于是个实际业务问题,某SQL在利用一个符合索引做查询的时候,发现始终会出现预估误差较大的情况, 而改变复合索引的列顺序,这个预估行数的误差会发生变化, 也就是说,Create  index idx_index1 ON T