开发指南—函数—拆分函数—UNI_HASH

简介: 本文将介绍UNI_HASH的使用方式。

描述

  • 使用UNI_HASH分库时,根据分库键的键值直接按分库数取余。如果键值是字符串,则字符串会被计算成哈希值再进行计算,完成路由计算,例如HASH('8')等价于8 % D(D 是分库数目)。
  • 分库和分表都使用同一个拆分键进行UNI_HASH时,先根据分库键键值按分库数取余,再均匀散布到该分库的各个分表上。

注意事项

UNI_HASH算法是简单取模,要求拆分列的值的自身分布均衡才能保证哈希均衡。

使用限制

拆分键的数据类型必须是整数类型或字符串类型。

使用场景

  • 适合于需要按用户ID或订单ID进行分库的场景。
  • 适合于拆分键是整数或字符串类型的场景。
  • 两张逻辑表需要根据同一个拆分键进行分库,两张表的分表数不同,又经常会按该拆分键进行JOIN的场景。

使用示例

假设需要对ID列按UNI_HASH函数进行分库分表,每库包含4张表,则您可以使用如下DDL语句进行建表 :


create table test_hash_tb (
    id int,
    name varchar(30) DEFAULT NULL,  
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by UNI_HASH(ID)
tbpartition by UNI_HASH(ID) tbpartitions 4;

与HASH的比较

对比场景 UNI_HASH HASH
分库不分表。 此时两个函数的路由方式一样,都是根据分库键的键值按分库数取余。
使用同一个拆分键进行分库分表。 同一个键值分到的分库的路由结果不会随着分表数的变化而改变。 同一个键值分到的分库会随着分表数的变化而改变。
两张逻辑表需要根据同一个拆分键进行分库分表,但分表数不同。 当两张表按该拆分键进行JOIN时,不会出现跨库JOIN的情况。 当两张表按该拆分键进行JOIN时,会出现跨库JOIN的情况。

假设有2个物理分库(DB_0和DB_1),2张逻辑表(a和b),其中a表每库1张分表,b表每库2张分表。下图展示了分别使用HASH和UNI_HASH进行拆分后,a表和b表进行JOIN的情景:111.png

相关文章
|
SQL 分布式计算 DataWorks
调度参数在MaxCompute的使用
本文主要讲解如何测试DataWorks调度参数在MaxCompute上使用
5093 0
调度参数在MaxCompute的使用
|
JavaScript API 微服务
探索现代后端开发:关键技术和最佳实践
【10月更文挑战第6天】探索现代后端开发:关键技术和最佳实践
|
SQL 算法 安全
『软件工程5』详解软件项目管理之软件的度量
该文章深入讲解了软件项目管理中软件度量的重要性,包括如何进行有效的度量、度量的目的以及如何利用度量结果来改进软件质量和开发过程。
『软件工程5』详解软件项目管理之软件的度量
|
SQL 关系型数据库 MySQL
SQL命令
【5月更文挑战第21天】SQL命令
176 3
|
Web App开发 消息中间件 机器学习/深度学习
Flink Unaligned Checkpoint 在 Shopee 的优化和实践
介绍 Shopee 对 Unaligned Checkpoint 的改进、对 Flink 社区的贡献以及内部的实践和落地。
Flink Unaligned Checkpoint 在 Shopee 的优化和实践
|
机器学习/深度学习 编解码 PyTorch
轻量级网络论文-MobileNet v1 详解
轻量级网络论文-MobileNet v1 详解
483 0
|
数据安全/隐私保护
Axure教程:一个通用的app注册/登录页
Axure教程:一个通用的app注册/登录页
Axure教程:一个通用的app注册/登录页
element中el-select下拉框位置错乱问题
element中el-select下拉框位置错乱问题
1601 0
|
前端开发
前端小知识点扫盲笔记记录8
前端小知识点扫盲笔记记录8
136 0
|
存储
手撕二叉搜索树
手撕二叉搜索树
168 0