世界上本没有程序员老鸟,菜鸟踩的坑多了也就成了老鸟。

  • 今天菜鸟在做项目的时候发现系统里面使用的主键UUID,于是我想着使用Long类型的自增主键他不香嘛。于是找我老鸟理论一番,于是有了以下的对话:

菜鸟:我看到项目里面使用的主键类型是UUID,使用Long类型的自增不好嘛?

老鸟:你先理出Long类型的自增ID的优点。

菜鸟:自增Long类型的主键可以主键自增,数字类型占用空间小,走索引速度更快,对于排序有更好的性能,不用担心重复的问题,在程序中使用起来更方便。

老鸟:那你说一说UUID的缺点。

菜鸟:UUID占用内存空间大,索引相对来讲慢一些,数据量大了可能会重复,不易排序,在程序中使用也不是很方便。内心一阵窃喜,这不明摆着就该使用Long类型的自增主键嘛,嘿嘿!!!

老鸟:小伙子可以呀,总结的还不错嘛,嗯。。。 but 。。。

菜鸟:心里一阵不好的预感。。。

老鸟:刚才你说的都对,但是你没有结合项目本身考虑。我们考虑以下情况:假如我们需要手动插入,或者从其他系统导入带有id的数据,这些数据的id和原来数据的id冲突了怎么办,并且这些数据也是数值型的?

菜鸟:这个。。。这个。。。(这就涉及到我的知识盲区了)。

老大鸟:还有啊,如果新系统上线运行,旧系统同时运行,数据库异构,并且数据双向同步,这个时候如果id有冲突怎么办?

菜鸟:。。。

老鸟:若是从外面导入数据,我们需要区别,需要将id前面加一个符号区分,这个时候又该怎么办?

菜鸟:卒!!!

老鸟:还有呢,在做系统集成的时候,如果新系统的主键不是数字类型的,那么就会考虑修改旧系统的主键类型,那么关联的外键如何处理呢?

菜鸟:弱小。。。无助。。。哭。。。

老鸟:小伙子,懂了吧,还是要多磨练呀,将书本知识与实际结合才是硬道理呀。

菜鸟:受教了,受教了!!!

其实UUID和自增型的数值ID各有个的有点与缺点,没有哪一种更好,只有哪一种更合适,一般来讲自增主键ID更适合用于单机系统,性能方面确实要优于UUID,但是在微服务架构,多系统集成的时候,一般建议使用UUID,不是说UUID在微服务架构的效率表现更高,而是说可以避免主键自增ID的一些缺陷。

使用场景:

  • 自增数值ID:单机,小型系统。
  • UUID:适合用在大型项目微服务架构中,保证全局ID唯一性。

个人感受:
在菜鸟们才开始步入工作岗位的时候,难免会遇到很多问题,这个时候就需要老鸟们的帮助了,毕竟他们踩过的坑比我们写过的代码还多,向他们寻求帮助是最好的提高自己的方式,当你踩过了所有的坑,你就是老鸟中的大神。

码字不易,请抬起你们的大拇指,点个赞,你们的给力就是我的动力,我是袁非非!!!