分布式数据库主键生成

我们用的不在列内,但有相似之处,求推广。

利用内部线程维护一个Map<表名,队列>,队列中存储若干个连续的id,这些id来源于数据库主键表(记录每个表当前主键最大值,比如user表在主键表中记录为user,1200,本地map缓存200个id,本地线程每10秒维护一次数据,当检查到id数小于100时补齐200个,id值以数据库表中的值为基础在本地递增放入队列,并将表中的值增加获取的数量。程序获取id直接从本地队列获取,如果没有则调用补齐方法然后获得id(补偿机制,缓存量合适的话不会走到这里)。由于从本地队列获取,效率非常高。注意事项是:调用补齐方法需要使用集群锁,避免两个节点并发调用获取到相同的id集合。多个服务使用相同的机制。在趋势上实现了递增,重启节点会有id区间中断。

你可能感兴趣的:(分布式数据库主键生成)