数据库迁移:SQL Server To MongoDB
一、问题引入#
业务数据一开始存放在SQL Server上,但随着业务的发展,表中的列有增加或者减少,这些操作对于传统的关系型数据库是很不方便的。
由于种种因素,考虑将数据迁移到MongoDB。MongoDB是一种开源的、分布式、非关系型的数据库,在特定的情况下,可以支持业务的存储和访问。虽然之前从没有接触过MongoDB,为了对比不同数据库的优劣性,顺带研究一下MongoDB,索性就把数据迁移。
经过一番查询,找到了一个推荐度挺高的数据库迁移软件:DataX , 这款迁移工具基本支持市面上所有的数据库(MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS),甚至还支持文件迁移至数据库。
二、解决过程#
简单的阅读了Github中DataX介绍,基本实现原理:A 数据库(reader/writer) --> 内存池 --> B 数据库(reader/writer)
。
用户需要根据数据库填写配置文档,这里填写 SQL Server(reader) to MongoDB(writer)
的配置文档。
💡 注意事项:
1、删除DataX的debug隐藏文件。若不执行该操作,程序可以无法运行
# 删除 `datax/plugin/reader/` 下的部分文件
`rm -rf datax/plugin/reader/._*`
# 删除 `datax/plugin/writer/` 下的部分文件
`rm -rf datax/plugin/writer/._*`
2、开放Linux的端口:1433
和 27017
, 或直接关闭防火墙
3、运行环境要求
- Python(推荐 Python2.6.X)
- JDK(1.8 以上,推荐 1.8)
- Linux
1️⃣ DataX的安装和运行
下载和安装过程不做说明,参考文末引用。
2️⃣ sqlserver2mongodb.json
{
"job": {
"content": [
{
"reader": {
"name": "sqlserverreader",
"parameter": {
"connection": [
{
"jdbcUrl": ["jdbc:sqlserver://xxx.xxx.xxx.xxx:1433;DatabaseName=xxx"],
"querySql": ["xxx"]
}
],
"password": "xxx",
"username": "xxx"
}
},
"writer": {
"name": "mongodbwriter",
"parameter": {
"address": ["xxx.xxx.xxx.xxx:27017"],
"collectionName": "xxx",
"column": [
{
"name": "***",
"type": "int"
},
{
"name": "***",
"type": "string"
}
],
"dbName": "xxx"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
3️⃣ 数据库迁移: bin/datax.py job/sqlserver2mongodb.json
三、反思总结#
若反过来,MongDB to SQL Server的配置文档该如何编写呢?
mongodb2sqlserver.json
{
"job": {
"content": [
{
"reader": {
"name": "mongodbreader",
"parameter": {
"address": ["xxx.xxx.xxx.xxx:27017"],
"collectionName": "xxx",
"column": [
{
"name": "a",
"type": "int"
},
{
"name": "b",
"type": "string"
},
{
"name": "c",
"type": "string"
},
{
"name": "d",
"type": "string"
}
],
"dbName": "xxx",
//"query":"{\"b\":\"xxx\",\"c\":\"xxx\"}"
}
},
"writer": {
"name": "sqlserverwriter",
"parameter": {
"column": [
"a",
"b",
"c",
"d"
],
"connection": [
{
"jdbcUrl": "jdbc:sqlserver://xxx.xxx.xxx.xxx:1433;DatabaseName=xxx",
"table": ["xxx"]
}
],
"password": "xxx",
"username": "xxx"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
四、参考引用#
作者:caojun97
出处:https://www.cnblogs.com/caojun97/p/17043266.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!