数据库Sharding集群:扩容问题解决方案

2023-11-16

数据库Sharding集群扩容问题方案

MySQLSharding集群一般按照用户id进行哈希分区,这里面存在两个问题:
1)集群的容量不够怎么办?
2)单个用户的数据量太大怎么办?

一、问题一

对于第1个问题,MySQLSharding集群往往会采用双倍扩容的方案,即从2台服务器扩到4台,接着再扩到8台……,依次类推。
假设原来有2个dbgroup,第一个dbgroup的主机为A0,备机为A1,第二个dbgroup的主机为B0,备机为B1。

按照用户id哈希取模,结果为奇数的用户分布在第一个dbgroup,结果为偶数的用户分布在第二个dbgroup。

扩容前的架构图

二、问题一解决方案

常见的一种扩容方式如下:
1)等待A0和B0的数据同步到其备服务器,即A1和B1。
2)停止写服务,等待主备完全同步后解除A0与A1、B0与B1之间的主备关系。
3)修改中间层的映射规则,将哈希值模4等于1的用户数据映射到A1,哈希值模4等于3的用户数据映射到B1。
4)开启写服务,用户id哈希值模4等于0、1、2、3的数据将分别写入到A0、A1、B0、B1。这就相当于有一半的数据分别从A0、B0迁移到A1、B1。
5)分别给A0、A1、B0、B1增加一台备机。

扩容后的解决方案

最终,集群由2个dbgroup变为4个dbgroup。可以看到,扩容过程需要停一小会儿服务,另外,扩容进行过程中如果再次发生服务器故障,将使扩容变得非常复杂,很难做到完全自动化。

三、问题二

对于第2个问题,可以在应用层定期统计大用户,并且将这些用户的数据按照数据量拆分到多个dbgroup。当然,定期维护这些信息对应用层是一个很大的代价。

好啦,有更多的问题,欢迎留言,咱们再交流哈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库Sharding集群:扩容问题解决方案 的相关文章

  • SQL语句中case、when、then的使用

    使用语法为 select pro id AS id pro title AS title pro name AS name pro ltime AS ltime pro place AS place pro linkman AS linkm
  • 数据库主从复制,读写分离,分库分表理解 (数据库架构演变)

    主从复制 主从复制 主要是针对MySQL数据库的高可用性 容灾性上面 是叫做高可用性 高可用性可以简单的理解为容灾性 稳定性 针对故障 风险情况下的处理 备案 策略 指系统无中断地执行其功能的能力 代表系统的可用性程度 高可用性通常通过提高
  • MySQL高级学习笔记

    目录 1 MySQL数据库逻辑架构 1 网络连接层 2 服务层 MySQL Server 1 连接池 Connection Pool 2 系统管理和控制工具 Management Services Utilities 3 SQL接口 SQL
  • MySQL8数据库原理与应用(微课版)课后笔记-实训7

    最近学习笔记记录 仅供学习参考 在完成课后实训7前所需的建表语句如下 CREATE TABLE bmdmb bmh varchar 10 NOT NULL COMMENT 部门号 bmmc char 50 NOT NULL COMMENT
  • MySQL——事务和视图

    2023 9 17 本章开始介绍TCL语言 Transaction Control Language 事务控制语言 事务 事务的概念 一个或一组sql语句组成一个执行单元 这个执行单元要么全部执行 要么全部不执行 事务的特性 ACID 原子
  • MySQL~多表查询

    一 多表查询 查询语法 select 列名列表 from 表名列表 where 1 准备sql 创建部门表 CREATE TABLE dept id INT PRIMARY KEY AUTO INCREMENT NAME VARCHAR 2
  • sql语句中case when then else函数用法

    Case具有两种格式 简单Case函数和Case搜索函数 简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END Case搜索函数 CASE WHEN sex 1 THEN 男 W
  • column in where clause is ambiguous MySQL异常

    在多表连接查询中 若连接条件字段在多个表中同名 却没有使用全限定名称 如 logicdeleteFlag 执行时会报这个异常 MySQL没办法识别 这个字段指的是哪个表的字段 必须使用全限定名称 如 tableName logicdelet
  • 基于Python的在线自主评测系统设计与实现

    博主介绍 擅长Java 微信小程序 Python Android等 专注于Java技术领域和毕业项目实战 文末获取源码联系 精彩专栏推荐订阅 不然下次找不到哟 Java项目精品实战案例 300套 Java微信小程序项目实战 200套 Pyt
  • mysql 强制使用索引和强制不使用索引

    前一段面试时问过这个问题 当时不太懂 今天刚好看到这一块的内容就梳理下 首先说个概念 SQL提示 就是在sql中加入我自己的提示来达到我想要的效果 关于索引有三种sql提示 use index index name 希望mysql参考的索引
  • 黑马程序员MySQL-视图SQL笔记

    对应课程地址 视图 准备数据 create database if not exists mydb6 view use mydb6 view create table dept deptno int primary key dname va
  • MySQL5.7和MySQL8.0的区别是什么

    MySQL5 7和MySQL8 0的区别是什么 1 MySQL5 7和MySQL8的区别 MySQL 5 7和MySQL 8 0之间有以下几个主要区别 版本功能区别 MySQL 5 7版本已经是一个非常稳定的成熟的版本 主要是针对5 7以下
  • mysql的数据备份脚本

    一 数据库的备份脚本脚本命令 1 核心命令 usr local mysql bin mysqldump h IP p3306 u dbuser p dbpasswd f A F E R quick single transaction fl
  • 数据库分库分表

    一 为什么要分库分表 如果一个网站业务快速发展 那这个网站流量也会增加 数据的压力也会随之而来 比如电商系统来说双十一大促对订单数据压力很大 Tps十几万并发量 如果传统的架构 一主多从 主库容量肯定无法满足这么高的Tps 业务越来越大 单
  • MySQL 中 MyISAM 与 InnoDB 引擎的区别

    分析 回答 区别很多 大家说出下面几点 面试就应该 OK 了 1 事务支持 MyISAM不支持事务 而InnoDB支持 InnoDB的AUTOCOMMIT默认是打开的 即每条SQL语句会默认被封装成一个事务 自动提交 这样会影响速度 所以最
  • MySQL创建用户的三种方法

    前言 mysql创建用户的方法分成三种 INSERT USER表的方法 CREATE USER的方法 GRANT的方法 一 账号名称的构成方式 账号的组成方式 用户名 主机 所以可以出现重复的用户名 跟其他的数据库不一样 用户名 16字符以
  • MySQL的浮点型和定点型解析和案例演示

    小数型 1 概述 浮点型和定点型 1 浮点数类型包括单精度浮点数 float型 和双精度浮点数 double型 定点数类型就是decimal型 2 两者区别 1 浮点型 小数点移动 精度有限 而且会丢失精度 系统自动四舍五入 4个字节 最大
  • MySQL——卸载重装MySQL失败?

    该问题通常是因为MySQL卸载时 没有完全清除相关信息导致的 解决办法是 把以前的安装目录删除 如果之前安装并未单独指定过服务安装目录 则默认安装目录是 C Program Files MySQL 彻底删除该目录 同时删除MySQL的Dat
  • MYSQL05高级_查看修改存储引擎、InnoDB和MyISAM对比、其他存储引擎介绍

    文章目录 查看 修改存储引擎 InnoDB和MyISAM对比 Archive引擎 归档 Blackhole引擎丢数据 CSV 引擎 Memory引擎 内存表 Federated引擎 访问远程表 Merge引擎 管理多个MyISAM NDB引
  • MySQL锁的总结

    锁保证数据并发访问的一致性 有效性 锁是mysql在服务器层和存储引擎层的并发控制 锁机制 共享锁与排他锁 共享锁 读锁 其它事务可以读 但不能写 排他锁 写锁 其它事务不能读 也不能写 锁粒度 mysql不同的存储引擎支持不同的锁机制 所

随机推荐

  • k8s系统获取真实客户端ip

    k8s部署 系统获取真实客户端ip 我们生产中使用的是kong网关环境的架构也不同 第一种kong网管后走nginx 第二种kong网管后不走nginx kong网管后走ingress nginx 修改kong的配置 配置要信任的原始IP地
  • 使用python做手机app后台

    编辑器 HBuiderX PyCharm 主要技术 5 App python HBuiderX 下载地址 http www dcloud io hbuilderx html PyCharm 下载地址 http www jetbrains c
  • 如何在html里写css类选择器,关于html:如何在CSS选择器中排除特定的类名?

    当用户鼠标将鼠标悬停在类名称为 reMode hover 的元素上时 我尝试应用背景色 但是如果元素也有 reMode selected 我不想更改颜色 注意 因为我在某种有限的环境中工作 所以只能使用CSS而不是JavaScript 为了
  • ASN.1 常用类型 编码详解 入门

    文章目录 编码结构 标识符 Identifier 长度 Length 短形式 长形式 内容 Contents 基本类型 布尔类型 BOOLEAN 整形 INTEGER 实数 REAL 枚举类型 ENUMERATED 二进制的编码 十进制的编
  • 微信测试号 如何配置服务器配置,微信测试号配置失败

    appID wxd281df297a6dc834 appsecret 20b2deacfa8a9e88a9afcbbe12da1f31 define TOKEN weixin function checksignature signatur
  • openGL之API学习(三十三)查看opengl、显卡的信息

    const GLubyte name glGetString GL VENDOR 返回负责当前OpenGL实现厂商的名字 const GLubyte biaoshifu glGetString GL RENDERER 返回一个渲染器标识符
  • LWIP学习笔记(2)---ARP简析

    ARP协议概述 即地址解析协议 用于实现从 IP 地址到 MAC 地址的映射 即询问目标IP对应的MAC地址 ARP分组格式 以太网目的地址 MAC 以太网源地址 MAC 帧类型 硬件类型 协议类型 OP 发送端目的地址 发送端 地址 目的
  • Selenium 高频面试题及答案

    1 什么是 Selenium 它用于做什么 Selenium 是一个用于自动化测试的开源框架 它提供了多种工具和库 用于模拟用户在不同浏览器和操作系统上的行为 并且可用于测试网页应用程序 2 Selenium WebDriver 和 Sel
  • 2023前端面试题及答案整理(CSS)

    盒模型 标准盒模型 W3C标准 一个块的总宽度 内容宽度 margin 左右 padding 左右 border 左右 怪异盒模型 IE标准 一个块的总宽度 width 包含 padding 和 border margin 左右 怪异盒模型
  • C++并发编程框架Theron(8)——Theron中包含的类(二)

    1 前言 本篇文章主要接着上一篇来介绍Theron框架库中包含的类 上一篇中主要介绍了Theron下Actor Address AllocatorManager和Catcher类 在本篇文章中我会相继介绍DefaultAllocator E
  • 解决vscode找不到arduino esp8266头文件

    用Arduino IDE写ESP8266没有代码补全 不能跳转查看头文件 个人觉得这是最难受的 vscode装上Microsoft的arduino扩展后 有时候会找不到头文件 刚开始自己傻傻的一个个往includePath里面添加 后来在引
  • 决策树(Decision Tree)简介

    决策树 Decision Tree 及其变种是另一类将输入空间分成不同的区域 每个区域有独立参数的算法 决策树分类算法是一种基于实例的归纳学习方法 它能从给定的无序的训练样本中 提炼出树型的分类模型 树中的每个非叶子节点记录了使用哪个特征来
  • 李宏毅机器学习课程第4讲:Estimator

    李宏毅机器学习课程第4讲 Estimator 味儿太冲了 开头又是宝可梦哈哈哈哈哈 不过听了这一讲 我对于过拟合和欠拟合的理解更深刻了 李老师从Bias和Variance两个角度进行了解释 对 于 这 样 一 个
  • linux centos7 centos8 Rocky8.8 Rocky9.2 sed错误sed: -e expression #1, unknown option to `s‘解决办法

    报错如下 sed e expression 1 char 13 unknown option to s 需要替换的行为 monitor url http 192 168 25 100 8443 rest 查询资料得知 报错是因为替换的字符串
  • 高等数学(工本)填空题

    1 2 3 4 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 4
  • Error: listen EADDRINUSE: address already in use 127.16.20.217:8090

    端口占用npm run staert无效 今天遇到一个问题 就是在提交代码时怕把本地端口号提交到远程 然后将已经启用的端口设置为localhost 待提交完代码后再刷新页面 结果一直更新不出来 然后重启代码 终端报 Error listen
  • 怎么上传代码到GitHub

    怎么上传代码到GitHub 2021 9 我们想要把代码上传到github上面用git管理 但是怎么操作呢 首先在本地电脑安装git 和在github上面注册账号 git下载地址 git官网链接 然后我们要知道有二种方式可以配置操作 一种是
  • 机器学习有监督学习之--回归

    一 引言 本材料参考Andrew Ng大神的机器学习课程 http cs229 stanford edu 以及斯坦福无监督学习UFLDL tutorial http ufldl stanford edu wiki index php UFL
  • Linux 多线程调试(内存占用、死循环、CPU占用率高……)

    你的软件在某个时刻停止服务 CPU占用达到100 这种问题一个可能的原因是产生了死循环 假设程序某处存在潜在的死循环 并在某种条件下会引发 本文以一个示例来定位出现死循环的位置 当程序某处存在死循环 通常定位问题及缩小范围的方法是 在可疑的
  • 数据库Sharding集群:扩容问题解决方案

    数据库Sharding集群扩容问题方案 MySQLSharding集群一般按照用户id进行哈希分区 这里面存在两个问题 1 集群的容量不够怎么办 2 单个用户的数据量太大怎么办 一 问题一 对于第1个问题 MySQLSharding集群往往