标签: Snowflake
SpringBoot MyBatis 雪花算法
02/28/2021MybatisSnowflakeMysqlSpringSpringBoot
Mybatis使用Snowflake生成主键


- 在某些业务中为了安全已经扩展性需要弃用mysql自增id。采用Snowflake生成方式。
- 全局唯一性,不能出现重复的id。
- 趋势递增,MysqlInnoDB引擎使用的是是聚集索引,使用B-tree的数据结构来存储索引数据。尽量使用有序的主键保证写入性能。
- 单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、排序等特殊需求。
- id是无序的,连续的id容易被社会工程。
Java 雪花算法
12/27/2020JavaSnowflakeProgrammatic
Snowflake,雪花算法是由Twitter开源的分布式ID生成算法,以划分命名空间的方式将 64-bit位分割成多个部分,每个部分代表不同的含义。这种就是将64位划分为不同的段,每段代表不同的涵义,基本就是时间戳、机器ID和序列数,当然这种方案就是需要考虑时钟回拨的问题以及做一些 buffer的缓冲设计提高性能。
背景
Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,开发团队就开始用 Cassandra 和 sharded MySQL 替代原有的系统。然而和 MySQL 不同的是,Cassandra 没有内置为每一条数据生成唯一 ID 的功能,因为在一个分布式环境下,很难有完美的 ID 生成方案。