最近遇到项目需要使用自增id分发数据,分库分表。一个字典表里保存着表名和当前的id,每次插入都要更新这个表,由于并发导致锁严重,不到30行的表,查询竟然平均1.5s。
总结两种常用的方法:
1、使用字典表,每次更新的时候步长加大,不是1,而是5,或者10,20等,根据并发决定,然后缓存到内存中,从内存中取。上面遇到问题的项目就是使用这种方法,但是步长太小了,设置的5,导致锁严重,后来改成了20,缓解了不少。
2、使用数据库的自增字段。数据库的自增也存在锁,但是比我们实现的都好的多。创建一个表,只有一个自增字段,每次像其中插入一个null值,自增,然后查出最后一个。这种方式没有没有锁,比上面的块一些。
不知道大家有没有更好的方法,求指教。
阅读(2147) | 评论(0) | 转发(0) |