如何在高并发分布式系统中生成全局唯一ID
最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案。我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: GUID生成Int64值后是否还具有唯一性测试 Random生成高唯一性随机码 今天分享的主题是:如何在高并发分布式系统中生成全局唯一Id。 但这篇博文实际上是“半分享半讨论”的博文: 1) 半分享是我将说下我所了解到的关于今天主题所涉及的几种方案。 2) 半讨论是我希望大家对各个方案都说说自己的见解,更加希望大家能提出更好的方案。(我还另外提问在此: http://q.cnblogs.com/q/53552/ ) 我了解的方案如下…………………………………………………………………… 1、 使用数据库自增Id 优势:编码简单,无需考虑记录唯一标识的问题。 缺陷: 1) 在大表做水平分表时,就不能使用自增Id,因为Insert的记录插入到哪个分表依分表规则判定决定,若是自增Id,各个分表中Id各自增长就会重复 2) 在业务上操作父、子表(即关联表)插入时,需要在插入数据库 之前 获取max(id)用于标识父表和子表关系,若存在并发获取max(id)的情况,max(id)会同时被别的线程获取到。 3) DB数据记录都是可以根据ID号进行推测出来,对于一些数据敏感的场景,不建议采用 结论:适合小应用,无需分表,低并发。 2、 单独开一个数据库