数据库分片和分区

1.分片Database Sharding

是一种 水平拆分(Horizontal Partitioning,按行拆分) 的方案,用来解决单机数据库在数据量、并发量上的瓶颈问题。(垂直拆分是指按列的字段拆分。)

一句话定义:

把同一张逻辑表的数据,按某种规则拆分,分布存储在多台数据库机器(或多个库/表)上。

  • 对业务来说, 还是"一张表"

  • 对物理存储来说: 实际是"多台机器上的多张表"

    // 逻辑上一张表
    user(id, name, age, ...)

    // 分片后,物理结构可能是:
    db1.user_0 (存 user_id % 2 == 0 的数据)
    db2.user_1 (存 user_id % 2 == 1 的数据)

    //从业务视角查询:
    SELECT * FROM user WHERE id = 123;

    // 底层处理时
    SELECT * FROM db2.user_1 WHERE id = 123;

1.1 缺点

  1. 跨分片查询。
  2. 自增主键不再可用。

2.分区

表分区 是数据库(如 MySQL、PostgreSQL)提供的一种单库内的物理拆分机制

核心点:

  • 对业务是 1 张表

  • 对数据库也是 1 个库

  • 对存储引擎来说是多份数据文件

👉 所有分区都在同一台数据库实例里。按时间分区的例子:

sql 复制代码
CREATE TABLE orders (
    id BIGINT NOT NULL,
    create_time DATE NOT NULL,
    amount INT,
    PRIMARY KEY (id, create_time)
)
PARTITION BY RANGE (TO_DAYS(create_time)) (
    PARTITION p202401 VALUES LESS THAN (TO_DAYS('2024-02-01')),
    PARTITION p202402 VALUES LESS THAN (TO_DAYS('2024-03-01'))
);

已有数据的表新增分区,必须创建时已有分区才行:

sql 复制代码
ALTER TABLE orders
ADD PARTITION (
    PARTITION p202403 VALUES LESS THAN (TO_DAYS('2024-04-01'))
);

3.月表怎么创建

相关推荐
科技小花1 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56612 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全3 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717214 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
小江的记录本4 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi4 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai5 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw05 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209255 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256735 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑