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库的原因.
压测环境
类别 | 名称 |
---|---|
OS | CentOS release 6.4 |
CPU | Common KVM CPU @ 2.13GHz |
RAM | 2GB |
DISK | 50GB |
Mysql | 5.1.73 |
本地mac连接远程该MySQL实例压测ID生成服务。 每秒中可以生成20多万个ID。性能方面完全不会有瓶颈。
模拟4个进程(cmd/example.go)以每秒生成100个ID的频率并发向MySQL IDGEN服务申请ID,并将生成的ID写入MySQL。 测试16小时后,生成330万个ID,未发现有重复ID。
当idgo服务意外宕机后,可以切从库,然后将idgo对应的key加上适当的偏移量。
参考cmd/example.go文件使用, 用起来很简单. :)
编译并运行example.go
. ./dev.sh make ./bin/cmd
idgo 简介 idgo是一个利用MySQL批量生成ID的ID生成器, 主要有以下特点: 每次通过事务批量取ID,性能较高,且不会对MySQL造成压力. 当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险. 业界已经有利于MySQL生成ID的方案,都是通过: REPLACE INTO Tickets64 (stub) VALUES ('a'); SELECT LAST_INSERT
idgo 简介 idgo是一个利用MySQL批量生成ID的ID生成器, 主要有以下特点: 每次通过事务批量取ID,性能较高,且不会对MySQL造成压力. 当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险. 业界已经有利于MySQL生成ID的方案,都是通过: REPLACE INTO Tickets64 (stub) VALUES ('a'); SELECT LAST_INSERT
我有表,当我添加新行时,我想计算一个id号。 条件: 如果我有缺失的数字,请给出最小的一个(3),如果我没有缺失的数字,请给出一行中的下一个数字(5) 如何将此条件构建到查询中? 我的查询: 桌子 如果我缺少id,则解决方案 如果我没有丢失的id,则解决方案
两种打字方式我都不知道。等待的集合。abc。Awaitable涵盖一个基于生成器的协同路由,它是中定义的Awaitable之一 https://www.python.org/dev/peps/pep-0492/#await-expression 从Python 3.6开始,几个API,如和实际上返回基于生成器的协程。我通常对它们的返回值应用关键字没有问题,但是我要处理正常值和可等待值的混合,我需要
我是JavaFx的新手,我正在使用Intellij和SceneBuilder。我创建了一个MVC模型: PersonOverview和RootLayout由SceneBuilder生成。 个人概述:
问题内容: 我正在使用PHP和MySQL编写脚本,并且想要获得一个唯一的ID(由字符串组成:大写字母和带数字的小写字母),例如:。我在PHP中发现了许多可以生成此类数字的函数,但我担心如何确保id唯一! 更新 :uuid很长,我的意思是这样的ID:(P5Dc)一个11个字母数字的字符。 问题答案: 一个 编程的方式 可以是: 在字段中添加一个唯一索引 在PHP中生成随机字符串 在PHP中循环(wh
当我使用Spring framework时,我经常看到2个术语基于Java和基于注释的配置/自动生成。 如果它们不一样,你能告诉我它们之间有什么不同吗?
如何生成版本1(基于时间的)UUID?是否有一个单独的库,或者它是如何在Java7 API中提供的,我错过了它。