V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
flikecn
V2EX  ›  分享创造

idgo - 一个基于 MySQL 的轻量级 ID 生成器( Golang)

  •  
  •   flikecn ·
    flike · 2015-12-25 09:04:33 +08:00 · 4176 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    idgo 是一个利用 MySQL 批量生成 ID 的 ID 生成器, 主要有以下特点:

    每次通过事务批量取 ID,性能较高,且不会对 MySQL 造成压力.
    当 ID 生成器服务崩溃后,可以继续生成有效 ID,避免了 ID 回绕的风险.
    业界已经有利于 MySQL 生成 ID 的方案,都是通过:

    REPLACE INTO Tickets64 (stub) VALUES ('a');
    SELECT LAST_INSERT_ID();
    这种方式生成 ID 的弊端就是每生成一个 ID 都需要查询一下 MySQL,当 ID 生成过快时会对 MySQL 造成很大的压力. 这正是我写这个 lib 库的原因.

    感兴趣的可以看看:

    https://github.com/flike/idgo
    4 条回复    2015-12-25 13:19:29 +08:00
    nasta
        1
    nasta  
       2015-12-25 10:23:51 +08:00
    采用事务的话会加锁,另外一个方案只是增加一步 select ,直觉感觉后者更好啊。
    flikecn
        2
    flikecn  
    OP
       2015-12-25 10:39:41 +08:00
    @nasta 主要是不能批量,每次生成一个 id ,都会请求 MySQL 。批量的话可以大大减轻 MySQL 压力。
    nasta
        3
    nasta  
       2015-12-25 12:28:48 +08:00
    @flikecn 到没有考虑这种情况,学习了
    wy315700
        4
    wy315700  
       2015-12-25 13:19:29 +08:00
    uuid_short
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:40 · PVG 04:40 · LAX 12:40 · JFK 15:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.