以前来了公司来了一个cto,说主键ID一定要用数据库的自增id,原因主要有两个:
1. 数据库自增id能保证id自增不重复,还减少维护的成本;而其他id例如雪花id并不能完全保证不重复和自增,还要额外的维护他(区域id、机器id、时间回拨等)。
2. 数据库主键应该不具备业务意义,dba无需感知其中的意义,而且有时候做数据压缩、数据迁移等处理时业务无需考虑主键ID。
这点包括我直属leaeder也很认同,后面有很长一段时间都很确信这一点,听着挺有道理的,并且到处宣扬。
但是后来,经过我的理解,其实这也不是绝对的,如果系统的写入量很大的时候,例如一些日志系统(雪花id的由来),这时数据库自增的id生成效率就会成为瓶颈,这时候我们就需要使用其他算法来生成主键id了,例如雪花id。
因此,我理解是大部分场景都可以使用数据库自增id来充当主键,而对于写入频率很高的表可以使用类似雪花id之类的算法。但是,从另一个角度看,写入频率高的也可以做分库分表,在降低每个表的写入频率,具体情况就要业务之间做取舍了。
1. 数据库自增id能保证id自增不重复,还减少维护的成本;而其他id例如雪花id并不能完全保证不重复和自增,还要额外的维护他(区域id、机器id、时间回拨等)。
2. 数据库主键应该不具备业务意义,dba无需感知其中的意义,而且有时候做数据压缩、数据迁移等处理时业务无需考虑主键ID。
这点包括我直属leaeder也很认同,后面有很长一段时间都很确信这一点,听着挺有道理的,并且到处宣扬。
但是后来,经过我的理解,其实这也不是绝对的,如果系统的写入量很大的时候,例如一些日志系统(雪花id的由来),这时数据库自增的id生成效率就会成为瓶颈,这时候我们就需要使用其他算法来生成主键id了,例如雪花id。
因此,我理解是大部分场景都可以使用数据库自增id来充当主键,而对于写入频率很高的表可以使用类似雪花id之类的算法。但是,从另一个角度看,写入频率高的也可以做分库分表,在降低每个表的写入频率,具体情况就要业务之间做取舍了。
展开
20
8