Mysq之——分库分表

2024-01-06 20:28
文章标签 分库 分表 mysq

本文主要是介绍Mysq之——分库分表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mysq之——分库分表

  • 简介
  • 分库分表的方式
      • 垂直分表
      • 垂直分库
        • 水平分库
        • 水平分表
      • 图解:垂直分表与水平分表(分库类似)
      • 分库分表带来的问题

简介

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

分库分表的方式

分库分表包括分库和分表两个部分,在生产中通常包括垂直分库、水平分库、垂直分表、水平分表四种方

垂直分表

将一个表按照字段分成多表,每个表存储其中一部分字段(根据业务场景按照字段的使用频率区分)

垂直分库

垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用。

水平分库

水平分库是把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上。

水平分表

水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。

优点 :
1.避免IO争抢并减少锁表的几率,
2.解决了单库大数据,高并发的性能瓶颈。提高了系统的稳定性及可用性。

图解:垂直分表与水平分表(分库类似)

垂直分表:
在这里插入图片描述

水平分表:
在这里插入图片描述

分库分表带来的问题

1、事务一致性问题
由于分库分表把数据分布在不同库甚至不同服务器,不可避免会带来分布式事务问题

2、跨节点关联查询
本来可以进行关联查询的两个表分库之后就不在一个数据库,甚至不在一台服务器,无法进行关联查询。
可将原关联查询分为两次查询,第一次查询的结果集中找出关联数据id,然后根据id发起第二次请求,最后将获得到的数据进行拼装。

3、跨节点分页、排序
跨节点多库进行查询时,limit分页、order by排序等问题,就变得比较复杂了。需要先在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序。
如,进行水平分库后的商品库,按ID倒序排序分页,取第一页

4、主键避重
在分库分表环境中,由于表中数据同时存在不同数据库中,主键值平时使用的自增长将无用武之地,某个分区数据库生成的ID无法保证全局唯一。因此需要单独设计全局主键,以避免跨库主键重复问题。

5、公共表
实际的应用场景中,参数表、数据字典表等都是数据量较小,变动少,而且属于高频联合查询的依赖表。例子中地理区域表也属于此类型。
可以将这类表在每个数据库都保存一份,所有对公共表的更新操作都同时发送到所有分库执行

这篇关于Mysq之——分库分表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577511

相关文章

分库分表核心理念

文章目录 分库,分表,分库分表什么时候分库?什么时候分表?什么时候既分库又分表?横向拆分 & 纵向拆分 分表算法Range 范围Hash 取模一致性 Hash斐波那契散列 严格雪崩标准(SAC)订单分库分表实战全局 ID 的生成UUID基于某个单表做自增主键雪花算法时间回拨问题 分库分表迁移停机迁移方案双写迁移方案 分库分表带来的问题参考 & 推荐文章 分库,分表,分库分表

基于shard-jdbc中间件,实现数据分库分表

一、水平分割 1、水平分库 1)、概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。 2)、结果 每个库的结构都一样;数据都不一样; 所有库的并集是全量数据; 2、水平分表 1)、概念 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中。 2)、结果 每个表的结构都一样;数据都不一样; 所有表的并集是全量数据; 二、Shard-jdbc 中间件 1、架构图 2、特点

基于Shard-Jdbc分库分表,数据库扩容方案

一、数据库扩容 1、业务场景 互联网项目中有很多“数据量大,业务复杂度高,需要分库分表”的业务场景。 这样分层的架构 (1)上层是业务层biz,实现业务逻辑封装; (2)中间是服务层service,封装数据访问; (3)下层是数据层db,存储业务数据; 2、扩容场景和问题 当数据量持续新增,面临着这样一些需求,两台数据库无法容纳,需要数据库扩容,这里选择2台—扩容到3台的模式,如下图

分库分表:应对大数据量挑战的数据库扩展策略

随着互联网技术的发展,数据量的爆炸性增长给数据库系统带来了前所未有的挑战。为了有效管理大规模数据并保持高性能,分库分表成为了一种常见的数据库扩展策略。本文将探讨分库分表的概念、动机、实施策略以及潜在的挑战和解决方案。 什么是分库分表? 分库分表是一种数据库架构设计策略,它将数据分散存储在多个数据库(分库)和多个表(分表)中。这种方法可以提高数据库的可伸缩性、可用性和性能。 为什么需要分库分表

mysq如何保证数据的可靠性

目录 1. redo log 2. binlog 3. 两阶段提交 MySQL这种关系型数据库中,讲究日志先行策略,只要日志持久化到磁盘,就能保证MySQL异常重启后,数据不丢失。在MySQL中,提到日志不得不提的就是redo log和binlog。 1. redo log 事物在执行过程中,生成的redo log是要先写到redo log buffer的。redo log buf

一文读懂数据库分库分表

阅读此文你将了解: 什么是分库分表以及为什么分库分表如何分库分表分库分表常见几种方式以及优缺点如何选择分库分表的方式 数据库常见优化方案 对于后端程序员来说,绕不开数据库的使用与方案选型,那么随着业务规模的逐渐扩大,其对于存储的使用上也需要随之进行升级和优化。 随着规模的扩大,数据库面临如下问题: 读压力:并发QPS、索引不合理、SQL语句不合理、锁粒度写压力:并发QPS、事务、锁粒

强!分库分表与分布式数据库技术选项分析

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"1024"领取公众号专属资料 来源:rrd.me/gEhKy 最近经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允。 本文通过对两种模式关键特性实现原理对比,希望可以尽可能客观、中立的阐明各自真实

阿里面试题:分库分表无限扩容后的瓶颈以及解决方案

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 后台回复“k8s”,可领取k8s资料 前言 像我这样的菜鸟,总会有各种疑问,刚开始是对 JDK API 的疑问,对 NIO 的疑问,对 JVM 的疑问,当工作几年后,对服务的可用性,可扩展性也有了新的疑问,什么疑问呢?其实是老生常谈的话题:服务的扩容问题。 正常情况下的服务演化之路 让我们从最初开始。 单体应用 每个创业公司基本都

分表实战二

关于如何生成表?查询如何确定表?考虑后期容错,先用hook来实现自动创建表和自动获取查询表 利用behavior在必要的模块进行hook监听 更改文件 app/tags.php…/behavior/HouseBehavior.phpapp/houserent/controller/TestController.php 代码如下 app/tags.php …/behavior/Hou

分表实战一

现在单表超过一千万记录,虽然索引完全使用,依旧会出现慢查询。日增平均40万。 数据库要重新设计,目的提高查询速度,只查询热数据。 设计思路 根据热数据时效性,保持在近三个月内,计划一年生成6张表。利用union来查询,当前月在内的近三个月或四个月的数据。牵扯查询尽量使用索引。 如何生成表? 比如2020年,生成20200102,20200304,20200506,20200708,