Guid全局唯一性算法

下面以Lua为例实现guid的生成,再对比nginx服务器的MD5算法进行比对效率

function guid()
    local seed = {
            ‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,
            ‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,
            ‘k‘,‘l‘,‘m‘,‘n‘,‘o‘,‘p‘,‘q‘,‘r‘,‘s‘,‘t‘,
            ‘u‘,‘v‘,‘w‘,‘x‘,‘y‘,‘z‘
    }

    local sid = ""
    for i=1, 32 do
        sid = sid .. seed[math.random(1,36)]
    end

    return string.format(‘%s-%s-%s-%s-%s‘,
        string.sub(sid, 1, 8),
        string.sub(sid, 9, 12),
        string.sub(sid, 13, 16),
        string.sub(sid, 17, 20),
        string.sub(sid, 21, 32)
    )
end
local s = 0
local start = socket.gettime()

while s < 100000 do
    s=s+1
    --ngx.print(ngx.md5(math.random(1,36)) .. ‘\r\n‘)    ngx.print(guid() .. ‘\r\n‘)
end

ngx.print("execute time:" .. socket.gettime()-start .. ‘\r\n‘)
ngx.exit(200)

上面guid方法中seed读者可以自己自行扩展,比如再加入‘A-Z‘大写字符,guid我以32位的字符进行输出,

在实际测试过程中, 10万级的数据生成速度不考虑写文件的IO时间,远远低于0.4秒,而同等数量使用ngx.md5()时则足足多了一倍的时间;

再从唯一性上进行分析,10万级的生成串中,测试了10次,没有发现任何一次有重复的字符串,说明自配的guid算法足以满足实际生产使用;

时间: 2024-08-29 11:29:43

Guid全局唯一性算法的相关文章

全局照明算法基础(一)——从辐射亮度到渲染方程

全局照明(Global Illumination)问题上已经有很多著名的算法,如路径追踪(Path Tracing),辐照度(Radiosity)等.绝大部分书籍/教材都直接介绍了做法,在理论方面有所欠缺(比如算法的正确性).这段时间在看<Advanced Global Illumination>,大呼爽快,所以做了这些笔记. 一.方向和立体角 立体角(Solid Angle)是平面角的推广.如上图,考虑一块不规则的曲面,其在单位球体(球心在原点,半径)上的投影为曲面,则的面积为该曲面对应的立

全局照明算法基础(二)——表面模型概览

严格地说各类BRDF和全局照明算法本身并不相关(算法把所有的BRDF抽象成一个函数),但也不能对其一无所知.本文仅对各类表面模型的公式做个总结,以后依次进行详细的讨论. Diffuse Surfaces 向所有方向均匀地反射,即,如果引入一个反射系数表示反射光的多少,那么其形式为 注意到这个BRDF是没有归一化的.为它添加一个归一化常数,即,根据能量守恒,取(最大).时应有 解得一个值,于是最后的BRDF为 Specular Surfaces 理想的光滑镜面,其反射和折射分布都是奇异的.反射方向

unity 不销毁物体,全局唯一性

下面插入代码 本脚本挂在你不想销毁的物体上面 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ExitApp : MonoBehaviour { public static ExitApp instance; //全局唯一性 private void Awake() { if (instance != null) { Debug.Log("严重 : 对象已经存在

GUID 全局唯一标识符

全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID.GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0.GUID一词有时也专指微软对UUID标准的实现. 在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID.随机生成两个相

GUID全局唯一标识符

全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID.GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0.GUID一词有时也专指微软对UUID标准的实现. 在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID.随机生成两个相

JS生成GUID(全局唯一标识符)

2015-12-10 11:49:49 function getGuid() { var guid = ""; for (var i = 1; i <= 32; i++){ var flag = Math.floor(Math.random() * 10); //如果是偶数就设置成为 if(flag%2 == 0) { //全大写 var n = Math.floor(flag*2.4) + 65; //全小写 // var n = Math.floor(flag*2.4) +

全局唯一标识符(GUID)

全局唯一标识符,简称GUID(发音为/?ɡu??d/或/?ɡw?d/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-1069-A2DD-08002B30309D},它实质上是一个128位长的二进制整数.GUID一词有时也专指微软对UUID标准的实现. GUID的主要目的是产生完全唯一的数字.在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID.GUID的总数也足够大,达到了2128(3.4×1038)个,所

雪花算法中机器id保证全局唯一

关于分布式id的生成系统, 美团技术团队之前已经有写过一篇相关的文章, 详见 Leaf——美团点评分布式ID生成系统 通常在生产中会用Twitter开源的雪花算法来生成分布式主键 雪花算法中的核心就是机器id和数据中心id, 通常来说数据中心id可以在配置文件中配置, 通常一个服务集群可以共用一个配置文件, 而机器id如果也放在配置文件中维护的话, 每个应用就需要一个独立的配置, 难免也会出现机器id重复的问题 解决方案: 1. 通过启动参数去指定机器id, 但是这种方式也会有出错的可能性 2.

分布式数据库中全局唯一主键

[相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现><activiti5.10解决分布式集群部署的主键问题><分布式环境下数据库主键方案><如何在高并发分布式系统中生成全局唯一Id><分布式环境下ID生成方法总结> <分布式环境下数据库主键方案> [ http://www.2cto.com/database/201309/243195.html ] 在只使用单数据库时,使用自增主键ID无疑是最适合的.但在集群.主从架构上时