高并发写入实践 最佳实践 从上述数据映射规则可知,存在着以下这些写热点场景: 系统为表分配的隐式 RowID 存在写热点问题。 当表没有主键,或表有非聚簇索引作为主键(含联合主键、非整型单列主键)时,系统会为表数据自动分配 RowID。由于隐式 RowID 是递增的,在表 insert 的过程中插入的行只会追加到表数据最后一个分片,导致该分片成为热点。 表采用递增型单列整型主键可能存在写热点问题。 对于单列整型主键,系统直接使用该值作为 RowID。如果主键值是递增的,也会引发跟系统分配的隐式 RowID 一样的写热点问题。单列整型主键常见的热点场景包括自增 ID 作为主键、采用基于时间戳生成的 ID(如雪花算法)作为主键等。 当表其他索引的值出现递增趋势时,也存在写入热点问题。 业务在插入、修改、删除数据时,如果生成的联合主键、单列非整型主键或其他索引的值出现递增、频繁重复或相邻的情况,也会导致表数据或索引数据的某个数据分片成为写入热点。 以下是针对写热点问题的最佳实践,旨在帮助用户更有效地使用数据库,避免在设计中引入写热点问题,并通过一定的优化措施缓解已出现的写热点问题。 设计规避 创建数据表时一定要创建主键,且优先使用聚簇索引主键,这样可以规避表数据的系统隐式 RowID 热点问题。 对于单列整型主键,避免使用自增ID,建议使用随机值,或在建表时添加 AUTORANDOM 属性指定由系统自动生成随机值,如下所示: sql 建表时主键指定 AUTORANDOM 属性 CREATE TABLE t (a BIGINT PRIMARY KEY AUTORANDOM, b varchar(255)); 插入新记录 INSERT INTO t (b) VALUES ("test"); 获取上次分配的主键值 SELECT LASTINSERTID(); 除了单列整型主键,对于其他主键或索引,应避免频繁插入相邻值或大量重复值。