内容简介:而我的用户表的 ID 采用了整型自增的数据类型,为了使我的网站的用户数看起来不太寒碜,我绝对把我的用户 id 拉长一些!我的数据库采用 postgres
GET /users/:ID
是一个非常典型的 REST API。最近在浏览我的应用时,经常会有
> GET /users/3 HTTP/1.1 > Host: shanyue.tech > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 404 Not Found ... 复制代码
而我的用户表的 ID 采用了整型自增的数据类型,为了使我的网站的用户数看起来不太寒碜,我绝对把我的用户 id 拉长一些!
我的数据库采用 postgres
本文链接: shanyue.tech/post/refact…
设置外键,同步更新
对所有用户用户表 ID 的关联表设置外键,并且设置 on update cascade
,使之当用户表 ID 发生变化时,关联表的 user_id 可以同步更新
alter table todo add constraint todo_user_id_fkey foreign key (user_id) references users(id) on update cascade 复制代码
迁移旧数据
把所有用户的 ID 放大16倍,并且添加一个 10086 的基数。有一种拉面的既视感..
注意以下第一条 SQL 有问题
-- update users set id = id * 16 + (random() * 16)::integer + 10086 update users set id = id * 16 + ceil(random() * 15) + 10086 复制代码
如果以上语句没有报错,那就说明用户量实在是太少了,如果数据量较多会发生主键冲突。
采用负负得正的方法避免主键冲突
update users set id = id * -16 - ceil(random() * 15) + 10086 update users set id = -id 复制代码
设置 Sequence
当旧有数据清理完毕,新增数据也采用自增 16 的方式,这里需要熟悉 postgres 中 Sequence
的用户,见最后参考
> select currval('users_id_seq')
currval
16
> alter SEQUENCE users_id_seq INCREMENT by 16
> select max(id) from users
max
20000
> select setval('users_id_seq', 20000)
复制代码
why not uuid
因为它太长了,而我的用户数又太少,它的优点我不但吸取不到,还经常会面对一串字符的茫然...
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Git Extensions 3 发布,重构、UI 改造、用户体验提升
- 从零开始Gin Web+Vue商城的搭建(四)-- 重构用户模块和框架设计
- Airbnb 的前端重构
- 重构推送服务
- 资源模块的重构
- 如何重构数据模型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Masterminds of Programming
Federico Biancuzzi、Chromatic / O'Reilly Media / 2009-03-27 / USD 39.99
Description Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. Think along with Adin D. Falkoff (APL), Jame......一起来看看 《Masterminds of Programming》 这本书的介绍吧!