关系型数据库迁移到mongodb的理由
高并发需求,关系型数据库不容易扩展
快速迭代
灵活的json模式
大数据量需求
应用迁移难度:
关系型到关系
oracle-》mysql oracle -》 postgresql
关系到文档-
oracle -》 mongodb
需要考虑:
总体架构(单体到分布式)
模式设计(关系模式到文档模型)
SQL语句/储存过程/JDBC/ORM
数据迁移(如何处理已有数据?)
模式设计:
针对已有关系模型,考虑如何用文档模型进行设计
方法一:使用mongexport
一次性导入,需要停机
1.数据库导出
mysql添加参数secure-file-priv=/tmp #/tmp为导出的目录
方法一:
mysqldump导出:
-T 参数用于指定导出结果的目录和表文件名前缀,会导出txt格式的数据
mysqldump -uroot -p123456 test -T /tmp/
cat /tmp/testlog.txt
select导出:
select * from test.testlog into outfile '/tmp/testlog.csv';
导出后添加,号 sed -i.bak 's/\t/,/g' testlog.txt
2.导入
mongoexport导入
方法一
bash
--headerline -第一行做为mongodb中的列,要编辑testlog.txt添加列
mongoimport -d test -c testlog --headerline --type=csv /tmp/testlog.txt
2023-11-30T00:46:52.430+0800 connected to: mongodb://localhost/
2023-11-30T00:46:52.756+0800 29757 document(s) imported successfully. 0 document(s) failed to import.
方法二
-f指定列(就是mongodb中的列)导入
mongoimport -d test -c testlog -f id,name,salary --type=csv /tmp/testlog.txt
mongodb查看文档信息正常
test> use test
already on db test
test> db.testlog.find()
db.dropDatabase() 删除当前数据库
方法二:批量同步
安装同步工具(如kettle/Talend)
创建输入源(关系型数据库)
创建输入源(mongodb)
编辑数据同步任务
执行
备注:
适用3变量同步,定期更新,特别是每晚跑批
支持基于时间戳的增量同步,需要源表有合适的时间戳支持
对源库有明显的性能影响,不宜频繁查询
不支持实时同步
三 实时同步
安装实时同步工具(如informatica/Tapdata)
创建输入
创建输入源(关系型数据库)
创建输入源(mongodb)
编辑实时数据同步任务
执行
备注:
基于源库的日志文件解析进制,可以实现秒级数据同步
对源库性能影响较少
可以支持应用的无缝迁移
四 应用主导迁移
应用程序写代码