Mysql 学习笔记:分库分表 (sharding)

本文介绍了数据库扩展性的解决方案——分库分表(sharding)。内容包括逻辑拆分的分区与分表,以及物理拆分的读写分离、垂直拆分和水平拆分,详细讲解了各种拆分策略的优缺点和实际应用,同时探讨了拆分带来的跨库事务、跨库Join等问题及其解决方案。
摘要由CSDN通过智能技术生成

当数据库性能出现瓶颈时就需要通过扩展来提升性能,对于扩展性来说要么加强机器本身的性能,要么把任务分发到不同的机器上。对于数据库来说通过强悍的机器解决成本是很大的,如Oracle。通过多个廉价的机器实现水平扩展是现代的主流解决方案,如Mysql。

数据库水平扩展的核心是把数据拆分成不同的单元并放在不同的独立的实例上,这样就做到了负载均衡。拆分分为逻辑和物理拆分,逻辑拆分是对物理上不可分割的实例进行逻辑上的分割,物理拆分是拆分成多个独立的实例:

  • 逻辑拆分

    • 分区(Partition)

    • 分表

  • 物理拆分

    • 读写分离

    • 垂直拆分(分库)

    • 水平拆分(分表)

1.逻辑拆分



1.1 分区



我理解的逻辑分区:举个例子,操作系统中的分区,是将硬盘根据大小进行逻辑分区,就是我们看到的C、D、E、F盘,逻辑分区还是在同一个操作系统中。数据库产品的Partition分区也是一样的道理,将数据进行逻辑分区,对数据划分界限。

MySql 支持Range,List,Hash,Key。最常用的是Range。注意不同的版本对分区类型的支持有些不同!

Range:范围

CREATE TABLE employees (
  id INT NOT NULL,
  fname VARCHAR(30),
  lname VARCHAR(30),
  hired DATE NOT NULL DEFAULT '1970-01-01',
  separated DATE NOT NULL DEFAULT '9999-12-31',
  job_code INT NOT NULL,
  store_id INT NOT NULL
)

PARTITION BY RANGE (store_id) (
  PARTITION p0 VALUES LESS THAN (6),
  PARTITION p1 VALUES LESS THAN (11),
  PARTITION p2 VALUES LESS THAN (16),
  PARTITION p3 VALUES LESS THAN (21)
);

LIST:列表

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
)
PARTITION BY LIST(store_id)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值