数据库分库分表介绍

分库分表是解决数据库性能瓶颈的常用技术手段,主要用于应对数据量过大、读写压力过高的问题。通过将数据分散到多个数据库或表中,可以提高系统的扩展性和性能。


1. 分库分表的核心概念

(1)分库

  • 定义:将数据分散到多个数据库中,每个数据库存储一部分数据。
  • 优点
    • 分散读写压力,提高并发能力。
    • 提高系统的可用性和容错能力。
  • 缺点
    • 跨库查询复杂,需要额外的逻辑处理。
    • 数据一致性维护难度增加。

(2)分表

  • 定义:将数据分散到多个表中,每个表存储一部分数据。
  • 优点
    • 减少单表数据量,提高查询性能。
    • 降低索引大小,提高写入性能。
  • 缺点
    • 跨表查询复杂,需要额外的逻辑处理。
    • 数据一致性维护难度增加。

2. 分库分表的策略

(1)水平分库分表

  • 定义:将数据按行分散到多个库或表中。
  • 常用策略
    • 按范围分片:如按用户 ID 范围、时间范围、区域范围等。
    • 按哈希分片:如对用户 ID 取模,分散到不同的库或表中。

(2)垂直分库分表

  • 定义:将数据按列分散到多个库或表中。
  • 常用策略
    • 按业务分库:如将用户数据、订单数据存储在不同的数据库中。
    • 按字段分表:如将大表中的常用字段和不常用字段拆分到不同的表中。

3. 分库分表的实现方式

(1)应用层实现

  • 在应用层通过代码实现分库分表逻辑。
  • 优点:灵活可控。
  • 缺点:开发复杂度高,维护成本高。
  • 示例

(2)中间件实现(推荐

  • 使用数据库中间件(如 MyCat、ShardingSphere)实现分库分表。
  • 优点:简化开发,支持动态扩展。
  • 缺点:依赖中间件,可能存在性能瓶颈。

4. 分库分表的挑战

(1)跨库/跨表查询

  • 问题:分库分表后,跨库或跨表查询变得复杂。
  • 解决方案
    • 使用全局表或冗余数据。
    • 通过中间件支持跨库查询。

(2)数据一致性

  • 问题:分库分表后,数据一致性维护难度增加。
  • 解决方案
    • 使用分布式事务(如 2PC、TCC)。
    • 通过消息队列实现最终一致性。

(3)主键生成

  • 问题:分库分表后,主键可能重复。
  • 解决方案
    • 使用分布式 ID 生成器(如 Snowflake、UUID)。
    • 使用数据库自增 ID 结合分片规则。

5. 分库分表的实际应用场景

(1)电商系统

  • 场景:订单表数据量巨大,读写压力高。
  • 方案
    • 按用户 ID 分库分表,分散订单数据。
    • 使用 ShardingSphere 实现分库分表,支持跨库查询。

(2)社交网络

  • 场景:用户动态数据量大,读写压力高。
  • 方案
    • 按用户 ID 分表,分散动态数据。
    • 使用 MySQL 分区表,简化数据管理。

(3)日志系统

  • 场景:日志数据量巨大,写入压力高。
  • 方案
    • 按时间分表,每天或每月创建一个新表。
    • 使用 Elasticsearch 存储日志,支持分布式查询。

6. 示例

(1)水平分表示例

-- 用户表按用户 ID 取模分表
CREATE TABLE user_0 (id BIGINT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE user_1 (id BIGINT PRIMARY KEY,name VARCHAR(100)
);-- 插入数据时根据用户 ID 取模选择表
INSERT INTO user_0 (id, name) VALUES (1, 'Alice');
INSERT INTO user_1 (id, name) VALUES (2, 'Bob');

(2)垂直分库示例

-- 用户库
CREATE DATABASE user_db;
USE user_db;
CREATE TABLE user (id BIGINT PRIMARY KEY,name VARCHAR(100)
);-- 订单库
CREATE DATABASE order_db;
USE order_db;
CREATE TABLE order (id BIGINT PRIMARY KEY,user_id BIGINT,amount DECIMAL(10, 2)
);

(3)使用 ShardingSphere 实现分库分表

# sharding.yml 配置文件
dataSources:ds0:url: jdbc:mysql://localhost:3306/db0username: rootpassword: rootds1:url: jdbc:mysql://localhost:3306/db1username: rootpassword: rootshardingRule:tables:user:actualDataNodes: ds$->{0..1}.user$->{0..1}tableStrategy:standard:shardingColumn: idpreciseAlgorithmClassName: com.example.HashModShardingAlgorithm

(4)应用层分库分表示例

// 根据用户 ID 取模分表
public String getTableName(long userId) {int tableIndex = (int) (userId % 4); // 分为 4 张表return "user_" + tableIndex;
}// 插入数据时选择表
public void insertUser(User user) {String tableName = getTableName(user.getId());String sql = "INSERT INTO " + tableName + " (id, name) VALUES (?, ?)";jdbcTemplate.update(sql, user.getId(), user.getName());
}

7. 总结

  • 分库分表是解决数据库性能瓶颈的有效手段,适用于数据量大、读写压力高的场景。
  • 分库分表策略:水平分库分表、垂直分库分表。
  • 实现方式:应用层实现、中间件实现。
  • 挑战:跨库/跨表查询、数据一致性、主键生成。

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

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

相关文章

#mapreduce打包#maven:could not resolve dependencies for project

打包报错: #报错信息: [ERROR] Failed to execute goal on project mapreduce_teacher1: Could not resolve dependencies for project org.example:mapreduce_teacher1:jar:1.0-SNAPSHOT: Failed to collect dependencies at org.apache.hive:hive-exe…

Rabit

之前发过rabit了,所以这里不再赘述,讲讲原理 在线Rabbit加密 | Rabbit解密- 在线工具 (sojson.com) rabbit加密原理 Rabbit加密算法是一种流密码算法,由Daniel J. Bernstein设计,并被广泛用于多种加密和安全通信应用中。它的设…

【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求

目录 一、模式支持要求 1.1 发现模式 1.2 连接模式 1.3 绑定模式 1.4 模式间依赖关系总结 1.5 注意事项 1.6 协议设计深层逻辑 二、安全机制(Security Aspects) 三、空闲模式操作(Idle Mode Procedures) 3.1 支持要求 …

模型蒸馏系列——开源项目

推荐项目:MiniMind(低成本全流程训练框架) GitHub:https://github.com/jingyaogong/minimind 核心特性:完整实现从数据清洗到模型部署的全流程,支持单卡低成本训练,代码全透明,适合…

【软考-架构】13.1、软件架构概述-构件技术

✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 ✨【重点】系统架构设计软件架构概述软件架构设计与生命周期构件🌟软件架构风格数据流风格调用/返回风格独立构件风格虚拟机风格仓库风格闭环控制风格C2体系结…

《Android启动侦探团:追踪Launcher启动的“最后一公里”》

1. 开机仪式的“黑屏悬案” 当Android设备完成开机动画后,某些产品会陷入诡异的“黑屏时刻”——仿佛系统在玩捉迷藏。此时,**Launcher(桌面)**就是躲猫猫的主角。我们的任务:揪出Launcher何时完成启动,终…

Redis事务与管道

Redis事务 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行执行而不会被其他命令插入,不许加塞。 一个队列中,一次性、顺序性、排他性的执行一系列命令。 Redis事务VS数据库事务 常用…

掌握这些 UI 交互设计原则,提升产品易用性

在当今数字化时代,用户对于产品的体验要求越来越高,UI 交互设计成为决定产品成败的关键因素之一。一个易用的产品能够让用户轻松、高效地完成各种操作,而实现这一目标的核心在于遵循一系列科学合理的 UI 交互设计原则。本文将详细阐述简洁性、…

Alembic 实战指南:快速入门到FastAPI 集成

一、快速开始 1.1 简介 Alembic 是一个基于 SQLAlchemy 的数据库迁移工具,主要用于管理数据库模式(Schema)的变更,例如新增表、修改字段、删除索引等,确保数据库结构与应用程序的 ORM 模型保持一致。 Alembic 通过版…

LRU(最近最少使用)算法实现

核心思想与基本思路 LRU(Least Recently Used)算法是一种缓存淘汰策略,其核心思想是淘汰最近最少使用的数据。 最近使用原则:最近被访问的数据在未来被访问的概率更高,因此应保留在缓存中。淘汰机制:当缓…

现在有分段、句子数量可能不一致的中英文文本,如何用python实现中英文对照翻译(即每行英文对应相应的中文)

以下是处理分段且中英文句子数量可能不一致的文本的Python实现方案,包含分句、翻译和对齐功能: from googletrans import Translator import redef split_paragraphs(text):"""按空行分割段落并清洗"""return [p.strip()…

C语言每日一练——day_8

引言 针对初学者,每日练习几个题,快速上手C语言。第八天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…

基础知识《Redis解析》

Redis 详细解析与介绍 Redis(Remote Dictionary Server)是一个开源的高性能键值对(Key-Value)数据库,支持多种数据结构(如字符串、哈希、列表、集合等),广泛应用于缓存、消息队列、…

区跨链知识和概念

1、以太坊 Geth 源码解析 Geth(Go Ethereum)是以太坊官方提供的 Go 语言实现的客户端,广泛用于以太坊全节点运行、挖矿、DApp 开发等。理解 Geth 的源码有助于掌握以太坊区块链底层逻辑,如区块同步、EVM 执行、P2P 交互等。 2、…

Vue 计算属性与 Data 属性同名问题深度解析

文章目录 1. 问题背景与核心概念1.1 Vue 响应式系统架构1.2 核心概念定义 2. 同名问题的技术分析2.1 同名场景示例2.2 问题发生机制 3. 底层原理剖析3.1 Vue 初始化流程3.2 响应式系统关键代码 4. 问题解决方案4.1 最佳实践建议4.2 错误处理机制 5. 性能影响分析5.1 递归调用性…

Mybatis——基础操作、动态SQL

目录 一.基础操作 1.删除 2.新增 3.更新 4.查询 5.XML映射文件 二、动态SQL 1.<if> 2.<where> 3.<set> 4.<foreach> 5.<sql> 6.<include> 一.基础操作 1.删除 参数占位符&#xff1a; 注意&#xff1a; #{...}相比于${...}…

[设计模式]1_设计模式概览

摘要&#xff1a;设计模式原则、设计模式的划分与简要概括&#xff0c;怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用&#xff0c;后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则&#xff08;语言无关&#xff09; 本质原理图 原…

C语言数据类型取值范围及格式化符号

一、数据类型取值范围与格式化输出符号表格 数据类型大小&#xff08;字节&#xff09;取值范围格式化输出符号char1-128到127<br>或0到255&#xff08;如果声明为unsigned char&#xff09;%c (字符)<br>%hhu (无符号)signed char1-1.2810到1.2710%hhd (有符号)u…

2024华东师范大学计算机复试上机真题

2024华东师范大学计算机复试机试真题 2023华东师范大学计算机复试机试真题 2022华东师范大学计算机复试机试真题 2024华东师范大学计算机复试上机真题 2023华东师范大学计算机复试上机真题 2022华东师范大学计算机复试上机真题 在线评测&#xff1a;传动门&#xff1a;pgcode…

星越L_内后视镜使用讲解

目录 1内后视镜角度调节 2,防炫目功能