返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >雪花算法(PHP)
  • 484
分享到

雪花算法(PHP)

数据库开发语言 2023-09-14 16:09:05 484人浏览 泡泡鱼
摘要

简介 现在的服务基本是分布式、微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。 对于 Mysql 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多个表中会生成重复的

简介
现在的服务基本是分布式微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。

对于 Mysql 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多个表中会生成重复的 id 值。那么如何保证水平分表后的多张表中的 id 是全局唯一性的呢?

如果还是借助数据库主键自增的形式,那么可以让不同表初始化一个不同的初始值,然后按指定的步长进行自增。例如有3张拆分表,初始主键值为1,2,3,自增步长为3。

当然也有人使用 UUID 来作为主键,但是 UUID 生成的是一个无序的字符串,对于 mysql 推荐使用增长的数值类型值作为主键来说不适合。

也可以使用 Redis 的自增原子性来生成唯一 id,但是这种方式业内比较少用。

当然还有其他解决方案,不同互联网公司也有自己内部的实现方案。雪花算法是其中一个用于解决分布式 id 的高效方案,也是许多互联网公司在推荐使用的。

SnowFlake 雪花算法

SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 Scala 语言版本。

雪花算法的原理就是生成一个的 64 位比特位的 long 类型的唯一 id。

  1. 最高 1 位固定值 0,因为生成的 id 是正整数,如果是 1 就是负数了。
  2. 接下来 41 位存储毫秒级时间戳,2^41/(1000*60*60*24*365)=69,大概可以使用 69 年。
  3. 再接下 10 位存储机器码,包括 5 位 datacenterId 和 5 位 workerId。最多可以部署 2^10=1024 台机器。
  4. 最后 12 位存储序列号。同一毫秒时间戳时,通过这个递增的序列号来区分。即对于同一台机器而言,同一毫秒时间戳下,可以生成 2^12=4096 个不重复 id。

可以将雪花算法作为一个单独的服务进行部署,然后需要全局唯一 id 的系统,请求雪花算法服务获取 id 即可。

对于每一个雪花算法服务,需要先指定 10 位的机器码,这个根据自身业务进行设定即可。例如机房号+机器号,机器号+服务号,或者是其他可区别标识的 10 位比特位的整数值都行。
 

 public function snowflake()    {        IdCreate::MachineId(1);        echo IdCreate::createOnlyId();    }

来源地址:https://blog.csdn.net/code_nutter/article/details/125942022

--结束END--

本文标题: 雪花算法(PHP)

本文链接: https://lsjlt.com/news/407500.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 雪花算法(PHP)
    简介 现在的服务基本是分布式、微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。 对于 MySQL 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多个表中会生成重复的...
    99+
    2023-09-14
    数据库 开发语言
  • php雪花算法怎么使用
    PHP雪花算法是一个生成唯一ID的算法,可以用于分布式系统中,避免ID冲突。下面是一个示例代码,演示如何在PHP中使用雪花算法:``...
    99+
    2023-08-25
    php
  • springboot中使用雪花算法生成雪花ID
    目录1、什么是雪花算法2、雪花算法的优缺点3、spring boot项目中使用雪花算法使用1、引入雪花算法依赖2、在配置文件中配置雪花算法参数3、注入雪花算法对象1、什么是雪花算法 ...
    99+
    2023-03-19
    springboot生成雪花ID springboot 雪花ID
  • 怎么用PHP实现雪花算法
    本篇内容主要讲解“怎么用PHP实现雪花算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用PHP实现雪花算法”吧!<phpclass SnowFlake{ &nbs...
    99+
    2023-06-21
  • spring boot中使用雪花算法生成雪花ID
    目录 1、什么是雪花算法 2、雪花算法的优缺点 3、spring boot项目中使用雪花算法使用 1、什么是雪花算法 雪花算法(Snowflake)是一种生成全局唯一ID的算法,由Twitter公司开发。它可以在分布式系统中生成全局唯...
    99+
    2023-09-05
    spring boot java spring 算法
  • php雪花算法有哪些优缺点
    PHP雪花算法是一种用于生成唯一ID的算法,具有以下优点和缺点:优点:1. 全局唯一性:雪花算法生成的ID是全局唯一的,可以在分布式...
    99+
    2023-08-25
    php
  • springboot中如何使用雪花算法生成雪花ID
    这篇文章主要介绍“springboot中如何使用雪花算法生成雪花ID”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot中如何使用雪花算法生成雪花ID”文章能帮助大家解决问题。1、什么...
    99+
    2023-07-05
  • PHP利用雪花(SnowFlake)算法生成唯一ID
    目录一、雪花算法原理解析1. 分布式ID常见生成策略2. 雪花算法的结构二、PHP源码实现案例1.demo12.demo2这个算法的好处很简单可以在每秒产生约400W个不同的16位数...
    99+
    2024-04-02
  • PHP怎么利用雪花算法生成唯一ID
    这篇文章主要讲解了“PHP怎么利用雪花算法生成唯一ID”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP怎么利用雪花算法生成唯一ID”吧!一、雪花算法原理解析1. 分布式ID常见生成策略分...
    99+
    2023-06-30
  • 基于php雪花算法工具类Snowflake -来自chatGPT
    在上述代码中,我们创建了一个名为Snowflake的类,该类用于生成Snowflake算法的唯一ID。它具有以下主要属性和方法: __construct($workerId, $datacenterId):初始化Snowflake算法的参...
    99+
    2023-10-27
    php 算法 开发语言
  • Java实现雪花算法的原理
    SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分...
    99+
    2024-04-02
  • Go语言实现Snowflake雪花算法
    目录介绍 雪花算法 UUID 数据库自增主键Redis Snowflake 实现原理 代码实现 实现步骤 代码实现 每次放长假的在家里的时候,总想找点简单的例子来看看实现原理,这次我...
    99+
    2024-04-02
  • mysql中雪花算法是什么意思
    mysql中雪花算法是什么意思?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!一、为何要用雪花算法1、问题产生的背景现如今越...
    99+
    2024-04-02
  • 带你入门java雪花算法原理
    雪花算法(SnowFlake) 雪花算法是Twitter开源的分布式ID生成算法. 主要是由64bit的long型生成的全局ID,引入了时间戳和ID保持自增的属性. 64bit分为四...
    99+
    2024-04-02
  • 开源一个c# 新的雪花算法
    目录介绍需求来源传统算法问题新算法特点性能数据效果“我”是什么适用范围能用多久★★集成建议★★常规集成大型分布式集成配置变更代码示例运行环境文件说明雪花漂移算法传统雪花算法optio...
    99+
    2024-04-02
  • GoLang分布式锁与snowflake雪花算法
    目录分布式id生成器分布式锁负载均衡go语言在网络服务模块有着得天独厚的优势;传送门详细介绍了涉及到的分布式相关技术。 分布式id生成器 Snowflake(雪花算法),由Twitt...
    99+
    2022-12-22
    GoLang分布式锁 GoLang snowflake雪花算法
  • java算法之静态内部类实现雪花算法
    目录概述一、概念1、原理二、静态类部类单例模式生产雪花ID代码1、代码2、测试结果3、为什么说41位时间戳最长只能有69年概述 在生成表主键ID时,我们可以考虑主键自增 或者 UUI...
    99+
    2024-04-02
  • 利用mysql实现的雪花算法案例
    一、为何要用雪花算法 问题产生的背景 现如今越来越多的公司都在用分布式、微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题。 例如之前单体项目...
    99+
    2022-05-18
    mysql 雪花算法
  • JavaScript如何让雪花算法成为空气
    这篇文章给大家介绍JavaScript如何让雪花算法成为空气,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我也只能在这里,发表这样无耻的言论。因为xjjdog的修为主要体现在后端上,所...
    99+
    2024-04-02
  • Java收集的雪花算法代码详解
    package com.java265.other; public class Test { // 因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作