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

简介: 本文将介绍HASH函数使用方式。

描述

  • 若分库和分表使用不同拆分键进行HASH时,则根据分库键的键值直接按分库数取余。如果键值是字符串,则字符串会先被换算成哈希值再进行路由计算。例如HASH(8)等价于8%D(D是分库数目), 而HASH("ABC")等价于hashcode("ABC").abs()%D(D是分库数目)。
  • 若分库和分表都使用同一个拆分键进行HASH时,则根据拆分键的键值按总的分表数取余。例如有2个分库,每个分库4张分表,那么0库上保存分表0~3,1库上保存分表4~7。某个键值为15,那么根据该路由方式,则该键值15将被分到1库的表7上((15 % (2 * 4) =7))。

注意事项

HASH函数要求拆分列的值的自身分布均衡才能保证哈希均衡。

使用限制

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

使用场景

HASH函数主要适用于如下场景:

  • 需要按用户ID或订单ID进行分库的场景;
  • 拆分键是字符串类型的场景。

示例

假设需要对ID列按HASH函数进行分库不分表,则您可以使用如下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 HASH(ID);
相关文章
|
存储 Shell 开发工具
git init 执行后发生了什么?
首先在磁盘中创建一个新目录 Git,进入该目录后执行 `git init` 初始化。这个时候目录下会创建一个隐藏目录 ./git,这个./git 目录叫做 Git 版本库或者仓库
143 0
git init 执行后发生了什么?
|
Java 调度
从零开始学习 Java:简单易懂的入门指南之多线程(三十四)
从零开始学习 Java:简单易懂的入门指南之多线程(三十四)
|
设计模式 JavaScript 前端开发
构造函数和原型的结合应用:轻松搞定JS的面向对象编程(一)
构造函数和原型的结合应用:轻松搞定JS的面向对象编程
|
SQL 供应链 安全
Hospital Management Startup 1.0 SQL 注入(CVE-2022-23366)
Hospital Management Startup 1.0 SQL 注入(CVE-2022-23366)
|
算法 数据库连接 数据库
使用通义灵码插件提高开发效率
【7月更文挑战第1天】通义灵码插件是一款提升开发效率的利器,提供智能代码补全,在你输入时预测函数及参数,减少错误。它还实时检测并修正语法和逻辑错误,提出优化建议以提升代码性能。此外,能自动生成代码模板,简化常见任务,如创建类或数据库操作。还能辅助编写文档注释,增强代码可读性。通过这些功能,开发者能更专注业务创新。
455 0
|
Java Spring 容器
循环依赖问题之实例化Bean是通过如何实现的
循环依赖问题之实例化Bean是通过如何实现的
|
自然语言处理 数据挖掘
Baichuan 3 通用能力评测国内第一,知识百科能力超越GPT-4-Turbo
SuperCLUE发布的《中文大模型基准测评2024年4月报告》显示,Baichuan 3在国内大模型中排名第一,总分73.32,超越文心一言、通义千问等。SuperCLUE是一个综合测评基准,评估大模型在多维度的性能。Baichuan 3在知识百科和逻辑推理上表现出色,分别排名第一和国内领先。此外,它在计算、代码和工具使用方面也名列前茅,适合应用于数学推理、数据分析、智能客服等领域,且能在教育、医疗、金融等行业场景中落地。
302 0
Baichuan 3 通用能力评测国内第一,知识百科能力超越GPT-4-Turbo
|
存储 NoSQL 关系型数据库
Flask-APScheduler 定时运行api接口
Flask-APScheduler 定时运行api接口
785 0
|
人工智能 自然语言处理 安全
老胡的周刊(第090期)
老胡的周刊(第090期)
老胡的周刊(第090期)
|
C# 索引
【全栈计划 —— 编程语言之C#】总结深入面向对象三大特性之二 —— 继承性
【全栈计划 —— 编程语言之C#】总结深入面向对象三大特性之二 —— 继承性
279 0
【全栈计划 —— 编程语言之C#】总结深入面向对象三大特性之二 —— 继承性