zoukankan      html  css  js  c++  java
  • 关于 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文件时报错。

    注意 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的聚合阶段将其变成普通字段,否则导出的数组字段为空。

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

  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/xuliuzai/p/9607515.html
Copyright © 2011-2022 走看看