Tidb分布式ID

Tidb分布式ID

1.解释

  • 使用 AUTO_RANDOM 处理自增主键热点表,适用于代替自增主键,解决自增主键带来的写入热点。
  • 使用该功能后,将由 TiDB生成随机分布且空间耗尽前不重复的主键,达到离散写入、打散写入热点的目的。
  • 注意 TiDB 生成的主键不再是自增的主键,可使用 LAST_INSERT_ID() 获取上次分配的主键值。

2.项目集成

将建表语句中的 AUTO_INCREMENT(自增) 改为 AUTO_RANDOM(随机) 即可使用该功能,适用于主键只需要保证唯一,不包含业务意义的场景。示例如下:

CREATE TABLE t_table(id BIGINT PRIMARY KEY AUTO_RANDOM, name varchar(255)); //建表语句
INSERT INTO t_table(name) VALUES ("name"); //插入数据

Mybatis-Plus集成获取id

<insert id="insert" parameterType="com.xx.entity.xxx"  useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into t_table(name) values(#{name})
</insert>

3.性能对比

(1)雪花算法

在这里插入图片描述

(2)Tidb分布式随机ID

在这里插入图片描述
3)结论

性能:tidb分布式随机ID性能略优于雪花算法。
配置:tidb分布式随机ID配置简单,只需要在建表语句增加随机索引标记就行;雪花算法配置较为复杂,需配置中心id和机器id,生成过程中上锁
ID特性:雪花算法id有规律(同一wokerID和centerID下,id自增),tidb随机id无规律

4. Tidb分片

背景:对于主键非整数或没有主键的表或者是联合主键,TiDB 会使用一个隐式的自增 RowID,大量 INSERT 时会把数据集中写入单个 Region,造成写入热点。

操作:通过设置 SHARD_ROW_ID_BITS,可以把 RowID 打散写入多个不同的 Region,缓解写入热点问题。但是设置的过大会造成 RPC 请求数放大,增加 CPU 和网络开销。

SHARD_ROW_ID_BITS = 4 表示 16 个分片\
SHARD_ROW_ID_BITS = 6 表示 64 个分片\
SHARD_ROW_ID_BITS = 0 表示默认值 1 个分片
 
CREATE TABLE:CREATE TABLE t (c int) SHARD_ROW_ID_BITS = 4;
ALTER TABLE:ALTER TABLE t SHARD_ROW_ID_BITS = 4;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值