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

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

  • 相关阅读:
    今天的雪糕格外好吃!
    定了!对于本周四(7.16日)抽奖活动取消简要说明,新抽奖活动暂定下周三(7.22日)...
    你喜欢什么样的课堂?
    无题
    属于你们的“礼仪小课堂”
    红歌合唱之团结就是力量
    《此生未完成》痛句摘录(一)
    端午前夕的班级小游戏
    排序>插入排序 小强斋
    排序>交换排序 小强斋
  • 原文地址:https://www.cnblogs.com/xuliuzai/p/9607515.html
Copyright © 2020-2023  润新知