关于自增主键的问题

来源:7-3 商品类别批量添加后端开发

慕用4013838

2020-06-12

项目中可以进行增删的几个Entity, 如Shop, Product, ProductCategory 使用的都是自增主键。根据目前的代码数据库中的主键无论是否有删除操作都只能增大不能减小,那主键就会一直增大下去,这样随着数据不断的增加,根据innoDB引擎储存的结构,是不是会让数据库操作的效能持续下降?这种情况下有没有办法可以让数据库本身的自增主键在删除的时候回调?还有就是如果可以回调的话,在多线程操作数据库并实现读写分离的情况下是不是会出现数据丢失consistency的情况?

问题有点多,如果老师不方便一下讲清楚,能否推荐一些靠谱的解读性文章?谢谢老师

写回答

2回答

翔仔

2020-06-13

同学好,主键一直增大下去对性能没什么影响吧,

这里顺便说一下,表定义的自增值达到上限后的逻辑是:再申请下一个 id 时,得到的值保持不变。即如果达到最大之后,就会产生主键冲突。

上面问题虽然和主键递增没关系,但是数据增多确实会影响查询性能,不过不明白同学说的回调是啥意思?是指主键回收重复使用吗?如果是的话,这个不需要调整,可以了解一下b+树的结构,存储是为查询服务的。

一般如果数据量达到一定程度(需要依据业务和压测情况定),就需要对数据进行水平切分了,也就是分表了。

在多线程操作数据库并实现读写分离的情况下是不是会出现数据丢失consistency的情况?这个肯定会,因为你读的是不同的库,由于网络原因导致的主从数据不及时同步会存在的,所以如果数据需要实时并且经常变更的话,最好走主库或者缓存。如果指的是插入失败的话不会,因为插入走的都是主库,会有锁来控制

1
3
慕用4013838
回复
翔仔
谢谢老师
2020-06-15
共3条回复

慕沐8221787

2020-06-12

这个问题我回答不了,抱歉,而且同问。

0
0

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程