内容简介:而我的用户表的 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
因为它太长了,而我的用户数又太少,它的优点我不但吸取不到,还经常会面对一串字符的茫然...
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高可用架构(第1卷)
高可用架构社区 / 电子工业出版社 / 2017-11-1 / 108.00元
《高可用架构(第1卷)》由数十位一线架构师的实践与经验凝结而成,选材兼顾技术性、前瞻性与专业深度。各技术焦点,均由极具代表性的领域专家或实践先行者撰文深度剖析,共同组成“高可用”的全局视野与领先高度,内容包括精华案例、分布式原理、电商架构等热门专题,及云计算、容器、运维、大数据、安全等重点方向。不仅架构师可以从中受益,其他IT、互联网技术从业者同样可以得到提升。一起来看看 《高可用架构(第1卷)》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
URL 编码/解码
URL 编码/解码