海量数据迁移,亚马逊云科技云数据库服务为大库治理提供新思路

1.背景

 目前,文档型数据库由于灵活的schema和接近关系型数据库的访问特点,被广泛应用,尤其是游戏、互联网金融等行业的客户使用MongoDB构建了大量应用程序,比如游戏客户用来处理玩家的属性信息;又如股票APP用来存储与时间线相关的行情数据。随着时间的推移和业务的发展,MongoDB库越来越大,大库治理是必须面临的问题。

 一般来讲,大库治理有如下几种方案。一是做冷热数据隔离,将数据根据使用频率分为热、温、冷、冻级别,超过一定时间的冷数据,转储到另一个冷库或低成本存储的数据库;热库只保留近期访问频繁的数据;二是做垂直拆分,比如大系统有多个集合,按照模块进行垂直划分,把不同模块对应的集合拆分到不同库,实现数据量和访问量的垂直分离;三是做水平拆分,比如选择userid的哈希值,将大的集合水平拆分到多个库,实现整体存储和计算能力的扩展。第四,也有部分业务,它的历史数据的使命完成,走完生命周期,可以直接删除。这4种方案,各有利弊,且需要根据实际业务场景进行选型。而很多场景下,客户会选择水平sharding,主要原因如下:

  • 很多业务需要经常查询历史数据,水平sharding不需要删除或分离历史数据;

  • 长远来看,水平sharding的扩展性更好,可以支撑更大的业务规模。

 DocumentDB Elastic Cluster是亚马逊云科技提供的一个很好的支持水平sharding的云数据库服务。本文,主要针对客户从MongoDB副本集架构迁移到DocumentDB Elastic Cluster的过程中,如何进行海量数据迁移的问题,进行研究,并提供最佳实践。

2.可选迁移方案

 众所周知,含有大数据量的数据库的迁移,是比较有挑战性的问题。数据库在不断的读写,不仅需要在目标库完成当前全量数据的初始化,也需要把初始化期间的数据变化同步到新库。以下是迁移方案示意图:

 MongoDB记录文档变化的方式有两种:oplog和change stream。由于,oplog或change stream的存储空间是有限的,因此全量初始化阶段的迁移速度是必须要考虑的因素。另外,增量同步阶段的速度也必须大于源数据库的变化速度,这样才能实现新旧数据库的数据一致。这两个阶段,我们都需要依赖稳定、高效的工具来完成。尤其在大型数据库的迁移时,甚至要配合一定的数据迁移策略(比如并行、压缩;冷、热数据分别迁移;不同集合分别迁移等)。

亚马逊云科技有3种可行的迁移方案:

  • AWS DMS全量+增量迁移

  • Mongoshake全量+增量迁移

  • Mongodump/mongorestore+DMS增量迁

方案1:AWS DMS全量+增量

 DMS是亚马逊云科技的一项云服务,允许迁移关系数据库、MongoDB数据库和其他类型的数据存储。可以使用DMS执行一次性迁移,或复制源库正在进行的更改以保持源和目标同步。DMS在全量迁移阶段提供了Auto segmentation和Range segmentation的方式来并行加速迁移;在CDC增量阶段,3.5 bet版也支持并发方式写入DocumentDB。

方案2:Mongoshake全量+增量

 开源的Mongoshake,也支持迁移写入DocumentDB。由于它属于开源产品,优势是社区活跃,遇到问题可以定制开发解决,迁移速度较快;劣势是遇到问题可以获得的技术支持力度较低,用户需要自己定位或求助社区。

方案3:Mongodump/mongorestore+DMS增量

 mongodump是MongoDB官方提供的备份工具,它可以从MongoDB数据库读取数据,并生成BSON文件,然后通过mongorestore工具恢复到MongoDB。它也同样支持从DocuemntDB备份数据。而mongodb-database-tools的6.1版本也支持恢复到DocumentDB Elastic Cluster。这种方案的优势是稳定快速,缺点是增量同步能力不足。但是,可以借助DMS的增量同步能力。重点是需要选择好增量同步的起始位点,防止数据丢失。

以上三种方案,各有优缺点,如下表。

使用DMS托管服务,用户配置迁移任务最方便,整个迁移过程,日志清晰、速度直观,可观测性较好。Mongoshake在增量写入DocumentDB环节速度略慢,在TPS较高的场景不适用;而mongodump和mongorestore在MongoDB大数据库迁移场景上,速度比DMS full load更快。大库迁移是否成功的一个非常重要因素是迁移速度。

原标题:大型MongoDB数据库迁移到DocumentDB Elastic Cluster的最佳实践

原链接:https://aws.amazon.com/cn/blogs/china/best-practices-for-migrating-large-mongodb-databases-to-documentdb-elastic-cluster/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/91191.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现。 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。 这个时…

RabbitMQ简单使用

RabbitMq是一个消息中间件:它接收消息、转发消息。你可以把它理解为一个邮局:当你向邮箱里寄出一封信后,邮递员们就能最终将信送到收信人手中。 RabbitMq、消息相关术语如下: 生产者:生产者只发送消息,发…

React(5)

1.受控组件案例 1.1之前的影院案例改写 import React, { Component } from react import axios from axios import BetterScroll from better-scroll import ./css/02_tab.cssexport default class Cinema extends Component {constructor() {super();this.state {cinemaLis…

Jmeter进阶使用:BeanShell实现接口前置和后置操作

一、背景 我们使用Jmeter做压力测试或者接口测试时,除了最简单的直接对接口发起请求,很多时候需要对接口进行一些前置操作:比如提前生成测试数据,以及一些后置操作:比如提取接口响应内容中的某个字段的值。举个最常用…

只需要自动售货机,商业模式立马大变样!

随着互联网、大数据和人工智能的蓬勃发展,商业模式正以前所未有的方式融合,其中自动售货机作为新零售模式的一颗璀璨明珠,正引领着购物体验的革命。这个巧妙的结合将消费者的便利、数据的智能分析以及科技的创新融为一体,重新定义…

Mysql:Access denied for user ‘root‘@‘localhost‘ (using password:YES)解决方案

最近在配置Maven以及Mybatis时,连接localhost数据库时出现无法连接,用cmd测试时报错:Access denied for user ‘ODBC’‘localhost’ (using password: NO),这个意思就是不允许远程访问,一开始笔者进入mysql试了一下是…

Untiy Json和Xml的序列化和反序列化

Json的序列化和反序列化 1.定义数据类 [Serializable] public class ZoomPoint {// 点名称, 将作为Key被字典存储public string name;// 轴心X坐标public Vector2 pivot Vector2.one / 2;// 放大倍率,小于1是为缩小倍率,小于0是取绝对值,不…

机器学习中基本的数据结构说明

数据维度或数据结构 当我们在机器学习或深度学习的领域内处理数据,我们通常会遇到四种主要的数据结构:标量,向量,矩阵和张量。理解这些基本数据结构是非常重要的,因为它们是机器学习算法和神经网络的核心。下面是对这…

NLPR、SenseTime 和 NTU 加速自动视频纵向编辑

视频人像编辑技术已经在电视、视频和电影制作中得到了应用,并有望在不断发展的网真场景中发挥关键作用。最先进的方法已经可以逼真地将同源音频合成为视频。现在,来自北京模式识别国家实验室(NLPR)、商汤科技研究和南洋理工大学的…

go.sum are different when using go mod vendor/download

本地Golang配置 今天本地编译一个项目,遇到以下错误 PS D:\Code\Golang\jiankunking\k8s-ext> go mod tidy go: downloading github.com/huaweicloud/huaweicloud-sdk-go-obs v3.23.4incompatible verifying github.com/gin-gonic/ginv1.7.3: checksum mismat…

JVM 内存结构快速入门

文章目录 一、简介二、JVM内存区域2.1 方法区2.3.2 永久代和元空间 2.2 堆2.1.2 对象的创建和销毁 2.2 栈内存2.2.1 栈帧的组成和作用2.2.2 栈的特点 2.4 程序计数器2.4.1 程序计数器的作用和使用场景 一、简介 Java 内存模型(Java Memory Model,JMM&…

微信小程序云开发快速入门(2/4)

前言 我们对《微信小程序云开发快速入门(1/4)》的知识进行回顾一下。在上章节我们知道了云开发的优势以及能力,并且我们还完成了码仔备忘录的本地版到网络版的改造,主要学习了云数据库同时还通过在小程序使用云API直接操作了云数…

做海外游戏推广有哪些条件?

做海外游戏推广需要充分准备和一系列条件的支持。以下是一些关键条件: 市场调研和策略制定:了解目标市场的文化、玩家偏好、竞争格局等是必要的。根据调研结果制定适合的推广策略。 本地化:将游戏内容、界面、语言、货币等进行本地化&#…

智慧工地源码,PC+APP源码,项目管理端+企业监管端+数据大屏端

智慧工地概念 智慧工地是一种崭新的工程全生命周期管理理念,是指运用信息化手段,通过对工程项目进行精确设计和施工模拟,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟…

DIP:《Deep Image Prior》经典文献阅读总结与实现

文章目录 Deep Image Prior1. 方法原理1.1 研究动机1.2 方法 2. 实验验证2.1 去噪2.2 超分辨率2.3 图像修复2.4 消融实验 3. 总结 Deep Image Prior 1. 方法原理 1.1 研究动机 动机 深度神经网络在图像复原和生成领域有非常好的表现一般归功于神经网络学习到了图像的先验信息…

解压版 MySQL 数据库的安装与配置

目录 1 下载2 安装3 配置3.1 添加环境变量3.2 新建配置文件3.3 初始化MySQL3.4 注册MySQL服务3.5 启动MySQL服务3.6 修改默认账户密码 4 登录5 卸载 安装环境:Win10 64位 软件版本:MySQL 5.7.24 解压版 1 下载 点击链接 进入如下界面 ❗️注意: 我们一般不会选择最新…

物联网智慧安防实训综合实训基地建设方案

一、系统概述 物联网智慧安防实训综合实训基地是一个为学生提供综合实践、培养技能的场所,专注于物联网技术与智慧安防应用的培训和实训。通过物联网智慧安防实训综合实训基地的建设和运营,学生可以在真实的环境中进行实践训练,提高其物联网技…

MongoDB增删改查操作

数据库操作&#xff1a; 在MongoDB中&#xff0c;文档集合存在数据库中。 要选择使用的数据库&#xff0c;请在mongo shell程序中发出 use <db> 语句 // 查看有哪些数据库 show dbs;// 如果数据库不存在&#xff0c;则创建并切换到该数据库&#xff0c;存在则直接切换到…

使用ntp服务器调整linux系统时间(附带代码示例)

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;RodmaChen 为了防止应用在系统上运行时候&#xff0c;系统时间与真实时间出现误差。可以调用ntp服务器获取正确的时间进行调整 NTP简介 网络时间协议&#xff08;NTP&…