背景介绍

随着业务的发展、需求的变化,促使我们追求使用不同类型的数据库,充分发挥其各自特性。如果决定采用新类型的数据库,就需要将既有的数据迁移到新的数据库中。在这类需求中,将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文件时报错。

注意 8:通过mongoexport工具包将 MongoDB中的数据导入到CSV格式的文件时,报错:

 Failed: Failed to parse: **********. Unrecognized field 'snapshot'.

很可能的原因是mongoexport工具包的版本与要导出数据的MongoDB的版本不一致。例如,我们使用3.4.4版本的mongoexport工具包导出线上版本4.0.4的MongoDB数据是报错。将mongoexport工具调整为4.0.4就不报错了。

注意 9:如果要导出的MongoDB文档含有数组,请通过 unwind的聚合阶段将其变成普通字段,否则导出的数组字段为空。

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

转载于:https://www.cnblogs.com/xuliuzai/p/9607515.html

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

  1. mysql 百亿数据_从SQL Server到MySQL,近百亿数据量迁移实战

    沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:Java 的版本是 1.2,C# 尚未诞生,MySQL 还没有被 Sun 收购,版本号是 3.23.工程师们选择了当时最合适 ...

  2. 云世界,一切如梦幻,数据也玩虚拟化。 SQL Server 2019 新特性系列一:数据虚拟化

    SQL Server 2019 新特性系列一:数据虚拟化 最新更新 SQL Server已经到了CTP2.2版本,主要更新了如下功能: 大数据集群:在大数据群集上使用 azure 数据工作室中的 sp ...

  3. SQL Server 2019将结合Spark创建统一数据平台

    转载来自于:http://blog.itpub.net/31077337/viewspace-2214805/ 根据其官网最新消息,微软公布了SQL Server 2019预览版.在该预览中,SQL ...

  4. SQL Server 2005 命令行实用工具

    SQL Server 2005 命令行实用工具 bcp 实用工具 说明:用于在 Microsoft SQL Server 实例和用户指定格式的数据文件之间复制数据. 安装位置:x:"Prog ...

  5. Microsoft SQL Server 2005 提供了一些工具来监控数据库

    --WL 09-07-03 /*Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务 ...

  6. sql server使用convert来取得datetime日期数据

    sql server使用convert来取得datetime日期数据,以下实例包含各种日期格式的转换 语句及查询结果: Select CONVERT(varchar(100), GETDATE(), ...

  7. SQL Server 2005中的SQLCMD工具使用

    SQL Server 2005中的SQLCMD工具使用 1.你可以用SQLCMD执行交互式动作,如: C:\sqlcmd>sqlcmd 1> SELECT name from sys.da ...

  8. Sql Server 中利用游标对table 的数据进行分组统计式输出…

    Sql Server 中利用游标对table 的数据进行分组统计式输出- Table Name: Tb_Color Create table Tb_Color(id int identity(1,1) ...

  9. SQL Server Always On可用性组中的数据同步

    This article describes the data synchronization process on SQL Server Always On Availability Groups ...

最新文章

  1. 使用NSRunloop等待异步任务完成
  2. 《C程序猿从校园到职场》勘误
  3. Windows平台SSH登录Linux并使用图形化界面
  4. C++标准库类模板(stack)和 队列(queue)
  5. 百练OJ:2799:浮点数格式
  6. 选择题微型计算机系统包括,全国计算机一级选择题专项训练及答案2016
  7. win7台式电脑怎么连wifi_台式电脑怎么用wifi网络
  8. xml文件转换成图片_怎样能把PDF文件转换成图片?
  9. 为什么 ++[[]][+[]]+[+[]] = 10 ?
  10. pycharm console日志如何输出到txt_日志记录——logging模块
  11. php 将前端网页输出成unicdoe编码
  12. php中系统函数的特征,老鸟需要知道的一些php系统类函数
  13. 17. PHP 表单处理
  14. linux自定义自动补全命令
  15. redis缓存与数据库一致性问题解决
  16. C语言 将一个3*3的矩阵转置,用函数和指针实现
  17. 【中创算力】第六届优秀员工表彰大会暨四月中创生日会
  18. Android 6.0 Phone 多方通话流程
  19. 江苏省普通高校“专转本”选拔考试 计算机专业大类专业综合基础理论考试大纲
  20. MIUI系统 无法从非官方渠道安装系统应用

热门文章

  1. SCRIPT1028:缺少标识符、字符串或数字 jquery ajax
  2. JavaScript中变量的相互引用
  3. 国庆双节长假旅游出行必装的手机软件
  4. 工作流引擎设计之退回任务定义
  5. Java, Mono, or C++?
  6. Go语言的Channel文章,整个人都感觉不好了
  7. (C++)1026 程序运行时间
  8. php tab标签,JavaScript代码分享:tab标签的切换
  9. Mac下sublime text2 解决中文乱码
  10. Java常用多线程辅助工具---countdownLatch