最牛网站建设是谁,建设网站账号密码不区分大小写,网站建设网址网站制作,wordpress博客怎么写ID 是数据的唯一、不变且不重复的标识#xff0c;在查询数据库的数据时必须通过 ID 查询#xff0c;在分布式环境下生成全局唯一的 ID 是一个重要问题。 雪花算法#xff08;snowflake#xff09;是一种生成分布式环境下全局唯一 ID 的算法#xff0c;该算法由 Twitter 发… ID 是数据的唯一、不变且不重复的标识在查询数据库的数据时必须通过 ID 查询在分布式环境下生成全局唯一的 ID 是一个重要问题。 雪花算法snowflake是一种生成分布式环境下全局唯一 ID 的算法该算法由 Twitter 发明用于推文 ID 的生成。国内百度的 UidGenerator美团的 Leaf 对雪花算法进行了优化也都在 GitHub 上开源了。
一、为什么需要分布式 ID
在单机场景下我们对 ID 的要求通过 MySQL 的主键自增就可以满足。 但随着系统数据量、并发压力的增加原本的单机环境无法满足需要对 MySQL 进行分库分表对服务器进行分布式部署。此时仅仅依靠 MySQL 的主键自增就有问题了。假设现在扩至两台数据库服务器每台服务器的表 table1 上的 ID 都从 1 开始自增此时就存在 ID 冲突了。当查询表 table1 中 ID 234 的数据时无法确定是哪一台服务器上的 ID。 在分布式环境下数据遍布在不同服务器上的数据库中此时我们如何为不同的数据生成全局唯一的主键呢 答案就是使用分布式 ID
二、雪花算法的实现
雪花算法生成的 分布式 ID 由四部分组成
第一个 bit恒为 0。第 2 42 个bit表示时间戳单位是毫秒。第 43 52 个bit表示机器 ID最多 1024 个机器节点这部分可以根据业务不同做修改。第 53 64 个bit表示序号即某台机器在这一毫秒内生成的 ID 的序号。可以用这 12 位 bit 区分一毫秒内生成的 ID最多区分 4096 个不同 ID。
那么在 1ms 时间内最多可以生成 1024 x 4096 4194304 个 ID。 雪花算法的优点自不必多说生成速度快可灵活修改生成 ID 有序递增等。
同时它的显著缺点就是需要解决重复 ID 问题因为它依赖时间当机器时间不准时就可能出现 ID 冲突。