爱意满满的作品展示区。
flikecn

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

  •  
  •   flikecn ·
    flike · Dec 25, 2015 · 4808 views
    This topic created in 3792 days ago, the information mentioned may be changed or developed.
    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 replies    2015-12-25 13:19:29 +08:00
    nasta
        1
    nasta  
       Dec 25, 2015
    采用事务的话会加锁,另外一个方案只是增加一步 select ,直觉感觉后者更好啊。
    flikecn
        2
    flikecn  
    OP
       Dec 25, 2015
    @nasta 主要是不能批量,每次生成一个 id ,都会请求 MySQL 。批量的话可以大大减轻 MySQL 压力。
    nasta
        3
    nasta  
       Dec 25, 2015
    @flikecn 到没有考虑这种情况,学习了
    wy315700
        4
    wy315700  
       Dec 25, 2015
    uuid_short
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3195 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 14:30 · PVG 22:30 · LAX 07:30 · JFK 10:30
    ♥ Do have faith in what you're doing.