关于 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 完成该向导
直接点击 【完成】
数据导出成功
导出数据 笔数据。
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
执行成功,导入数据 个文档。并且可以看到很快,不到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文件时报错。
本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!
关于 MongoDB 与 SQL Server 通过本身自带工具实现数据快速迁移 及 注意事项 的探究的更多相关文章
- 从SQL Server到MySQL,近百亿数据量迁移实战
从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...
- Navicat Premium 12 破解(MySQL、MariaDB、MongoDB、SQL Server、SQLite)
打开注入到安装目录中的exe中 破解提示(还没好,继续看下去) 如果你安装的是中文版,选一下中文版(英文默认即可),获取一下key(名字和组织可以自定义) 打开Navicat,选择注册(第一次打开选注 ...
- SQL Server中bcp命令的用法以及数据批量导入导出
原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...
- SQL Server 2016五大优势挖掘企业用户数据价值
SQL Server 2016五大优势挖掘企业用户数据价值 转载自:http://soft.zdnet.com.cn/software_zone/2016/0318/3074442.shtml 3月1 ...
- SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过 存储过程 创建存储过程 use pubs --pubs为数据库 go create proc ...
- SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型
原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...
- sql server中如何修改视图中的数据?
sql server中如何修改视图中的数据? 我做个测试,视图的数据有标记字段时,如果是这种方式(0 as FlagState),是无法修改的 --创建视图语句 --- create view V_E ...
- SQL Server 一列或多列重复数据的查询,删除
业务需求 最近给公司做一个小工具,把某个数据库(数据源)的数据导进另一个数据(目标数据库).要求导入目标数据库的数据不能出现重复.但情况是数据源本身就有重复的数据.所以要先清除数据源数据. 于是就把关 ...
- SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪
概述 1.变更数据捕获(CDC) 每一次的数据操作都会记录下来 2.更改跟踪 只会记录最新一条记录 以上两种的区别: http://blog.csdn.n ...
随机推荐
- 使用jQuery获取元素的宽度或高度的几种情况
今天说说使用jQuery获取元素大小的遇到几种情况 使用jQuery获取元素的宽度或高度的有几种情况: 1.使用width(),它只能获取当前元素的内容的宽度: 2.使用innerWidth(),它只 ...
- JDK1.8下载与安装及环境变量配置
一.在Oracle官网下载及安装JDK1.8 1.输入Oracle官网地址 www.oracle.com 2.出现Oracle界面后点击 Downloads 3.点击 Java 4.点击 Java ( ...
- MiniProfiler监控Asp.Net MVC5和EF性能
1. 安装依赖包 在web项目打开nuget包管理器搜索 MiniProfiler.Mvc5和MiniProfiler.EF6安装. 2. 在Global.asax中添加配置代码 protected ...
- selenium下拉到页面最底端
selenium操控浏览器下拉到页面最底端: #!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver ...
- Java接口的实例应用:致敬我的偶像——何塞·穆里尼奥
文/沉默王二 曹操在<短歌行>中为杜康酒打过一个价值一亿个亿的广告——“何以解忧,唯有杜康”,我替曹操感到惋惜的是他本人并不会收到这笔不菲的代言费.想一想,要是三国时期的明星人物们有这个代 ...
- mac用户丢失管理员身份急救
用了这么久mac,发现居然还存在这么大一个bug.就是如果你曾经编辑mac电脑默认用户资料,比如试图改用户名.试图改HOME路径之类的,有很高比率可能导致该用户丧失管理员权限. 随后悲剧就开始了,所有 ...
- Error: Cannot fit requested classes in a single dex file (# methods: 149346 > 65536)
引用第三方库的jar文件,都有可能会触发这个错误.解决方案如下: 参考<[Android]Cannot fit requested classes in a single dex file. T ...
- JavaSE之Long 详解 Long的方法简介以及用法
基本功能 Long 类在对象中包装了基本类型 long 的值 每个 Long 类型的对象都包含一个 long 类型的字段 static long MAX_VALUE long 8个字节最大值2^63- ...
- python 中 *args 和 **kwargs 的区别
在 python 中,*args 和 **kwargs 都代表 1个 或 多个 参数的意思.*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型.下文举例说明 ...
- Nlog、Log4Net 的一个小扩展(增加自定义LEVEL)
因公司ELK监控分析日志的需要,需要区分进程运行状态日志以及错误日志,以便能够根据日志级别(level)进行不同策略的预警,而现有的Nlog.Log4Net都没有Process这样的level,故针对 ...