JAVA全系列 教程
3762个小节阅读:7089.7k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
分片算法 | 描述 | 分库 | 分表 | 数值类型 |
---|---|---|---|---|
MOD_HASH | 取模哈希 | 是 | 是 | 数值,字符串 |
UNI_HASH | 取模哈希 | 是 | 是 | 数值,字符串 |
RIGHT_SHIFT | 右移哈希 | 是 | 是 | 数值 |
RANGE_HASH | 两字段其一取模 | 是 | 是 | 数值,字符串 |
YYYYMM | 按年月哈希 | 是 | 是 | DATE,DATETIME |
YYYYDD | 按年日哈希 | 是 | 是 | DATE,DATETIME |
YYYYWEEK | 按年周哈希 | 是 | 是 | DATE,DATETIME |
HASH | 取模哈希 | 是 | 是 | 数值,字符串,如果不是,则转换成字符串 |
MM | 按月哈希 | 否 | 是 | DATE,DATETIME |
DD | 按日期哈希 | 否 | 是 | DATE,DATETIME |
MMDD | 按月日哈希 | 是 | 是 | DATE,DATETIME |
WEEK | 按周哈希 | 否 | 是 | DATE,DATETIME |
STR_HASH | 字符串哈希 | 是 | 是 | 字符串 |
[数据分片]hash形式的分片算法。如果分片键是字符串,会将字符串hash转换为数值类型。
分库键和分表键相同:
分库键和分表键相同:
示例
xxxxxxxxxx
CREATE TABLE orders (
id BIGINT NOT NULL AUTO_INCREMENT,
order_id INT,
amount DECIMAL(10,2),
PRIMARY KEY(id),
KEY `id` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
---------------------------------------------------
-- 使用 mod_hash 分片算法,以 order_id 为分片键进行分片
DBPARTITION BY UNI_HASH(order_id)
TBPARTITION BY UNI_HASH(order_id)
-- 每个库中分配 1 个表
TBPARTITIONS 1
-- 分 3 个库 即 mydb_0、mydb_1、mydb_2
DBPARTITIONS 3;
详解:
当分片值为 101 时,
- DBPARTITIONS 3 会创建 3 个库,即 mydb_0 、mydb_1 、mydb_2 。
- TBPARTITIONS 1 每个库中会有一个分片表,即 mydb_0.orders_0、mydb_1.orders_1、mydb_2.orders_2。
- 分表下标 = 101 % (3 * 1)= 2 会被分配到 orders_2 中。
- 分库下标 = 2 / 1 = 2 -> 会被分配到 mydb_2 中。
[数值分片]hash形式的分片算法。仅用于分库。(YYYY*12+MM)%分库数量,MM为1–12。
示例
xxxxxxxxxx
/*建表语句*/
create table orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100),
order_date DATE,
total_amount DECIMAL(10, 2)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
------------------------------------------
dbpartition by YYYYMM(order_date) dbpartitions 1
tbpartition by YYYYMM(order_date) tbpartitions 3;
/*添加数据*/
INSERT into orders (id , customer_name,order_date , total_amount) value(1,"小米","2033-09-21 12:12:12",12.5)
INSERT into orders (id , customer_name,order_date , total_amount) value(2,"大米","2033-09-26 12:12:12",12.5)
INSERT into orders (id , customer_name,order_date , total_amount) value(3,"红豆","2033-07-21 12:12:12",12.5)
INSERT into orders (id , customer_name,order_date , total_amount) value(4,"黑豆","2033-07-26 12:12:12",12.5)
仅用于分表。仅DATE、DATETIME类型。 一年之中第几天%分表数。tbpartitions不能超过366。
xxxxxxxxxx
create table orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100),
order_date DATE,
total_amount DECIMAL(10, 2)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by MMDD(order_date) dbpartitions 8
tbpartition by MMDD(order_date) tbpartitions 12;
1.Mycat技术中按年月哈希进行分片的是___。
A YYYYMM
B YYYYDD
C YYYYHH
D MM
1=>A