新闻、帮助、产品更新动态

最新的业界新闻,产品系统更新开发动态,帮助教程和活动发布

Cloudbase数据库迁移方案

发布日:2021-06-29 13:11       阅读数:

功能介绍
云开发数据库环境之间的迁移一直是个老大难问题,虽然SDK中提供了单个集合的export和import,但是要达到实现整个数据库的迁移还只是100步中的第一步,该方案便是介绍一种将A环境数据库迁移至B环境数据库的思路,仅供参考。
 
需要的准备
将文件夹下的函数部署至对应环境
已经创建好的A环境与B环境
如果迁移至的环境在另一个账号下,需要另一个账号的secretID和secretKey,并在init该环境时添加该两个字段
可以直接在云开发控制台进行操作,无需发起调用
将函数的超时时间调至900秒.
使用的资源
两边环境的云函数
两边环境的云数据库
目标环境的云存储
函数介绍
migrate
迁移函数,需部署至被迁移的环境下
 
记得修改demo中的环境ID为自己的环境ID
 
需主动发起调用,无需参数。
 
它会调用exportDatabase函数导出数据,并得到一个返回值数组,数据格式大致如下

然后会调用copyDatabase,进行迁移
 
exportDatabase
导出函数,需部署至被迁移的环境下
 
被migrate调用
 
copyDatabase
需部署至被迁移的环境下
 
被migrate调用

importDatabase
导入函数,需部署至迁移目标环境下
 
该函数接收CollectionName函数进行集合导入,用户无需主动调用,该函数被copyDatabase调用。
 
时序图



完整步骤
1将函数部署到对应环境(除了importDatabase是部署到目标环境,剩下三个均为被迁移环境),记得云端安装依赖。
2调用migrate(建议控制台直接调用)
3等待返回值
4前往新环境数据库查看迁移结果

注意事项
1由于 export 这个接口每秒只能调用一次,所以保险起见,在代码层级上每个集合的导出都间隔一秒。所以migrate这个函数总调用时间会比较长,建议耐心等待(每有一个集合需要约2秒),若集合数量比较大,建议将函数超时时间往上调整。若需要大于900秒,考虑使用云托管实现。
2migrate将一次性执行完所有的逻辑,运行时间较长,请耐心等待,等待期间可以去干别的事儿。
3每个文档的导出都是异步的需要时间,得到migrate的返回值之后,请等待一段时候再调用copyDatabase,由于每个文档大小不定所以这个时间不确定,但在copyDatabase中内置了检测函数,如果在未完全导出前发起调用,该函数会停止并提示那一项暂未导出完成,可以放心调用。
4返回success后,到控制台查看可能会出现集合已经创建,但文档数量为0的情况,这是因为导入是一个异步事件,创建集合和文档导入并非同时进行的,等待一段时间即可。
5文档数为0的集合会被跳过。
6若出现系统错误,内部错误等,可以适当调大云函数运行内存。
7若migrate函数控制台出現  ESOCKETTIMEDOUT 或其他报错,但其他三个函数均运行正常,那可以忽视,以目标环境数据库数据是否正确迁移为准。
8借用了目标环境的云存储作为媒介,若嫌占用大小可以删除,目录为/tmp/db-imports
9未经过严格测试,暂且不清楚性能上限,目前测试20+集合,几百条文档没有问题。

开源代码
https://github.com/Readercyc/Cloudbase-Solution

编辑:航网科技   来源:腾讯云

本文版权归原作者所有 转载请注明出处

联系我们

客服部:深圳市龙华区龙胜商业大厦5楼B5区

业务部:深圳市南山区讯美科技广场2栋12楼1202

资质证书

  • Copyright © 2011-2020 www.hangw.com. All Rights Reserved 深圳航网科技有限公司 版权所有 增值电信业务经营许可证:粤B2-20201122 - 粤ICP备14085080号

    在线客服

    微信扫一扫咨询客服


    全国免费服务热线
    0755-36300002

    返回顶部