假设短链服务时 dl.c
db 设计为
id | rawurl |
---|---|
1 | www.baidu.com |
我创建 www.baidu.com 的短链就直接写一条单纯的 url 记录,然后以主键 id 作为 dl.c 的短码,
请求 dl.c/1 直接查 id 为 1 的 rawurl 进行重定向,这样有啥问题吗?
目前能想到的就是会被别人遍历,但是好像也没啥问题?
id 用 bigint 也足够用
1 Jooooooooo 2021-01-22 18:40:33 +08:00 公开 id 不应具备可遍历属性 |
![]() | 2 FS1P7dJz 2021-01-22 19:01:31 +08:00 ![]() 提问 那么当别人在此使用你的服务生成一个一样的 www.baidu.com,你是变成 dl.c/2 还是继续 dl.c/1 呢? 再提问 如果你稍微需要做一些统计服务,那么 dl.c/1 和 dl.c/2 都是统一个网址,你又如何进行合并呢? 继续提问 如果是 baidu.com/1.html 和 baidu.com/2.html,你又如何进行统计呢? 以上都是基于亿级数据考虑 不过如果你只是造个自己用的轮子...倒也无妨考虑这么多 |
![]() | 3 imdong 2021-01-22 19:08:48 +08:00 via iPhone 自己用,完全没问题。 短网址核心代码无非就这么几行。 保存对照表,以及取出数据并跳转。 其余的一切都是基于安全性,速度等角度进行的优化罢了。 考虑到数据越来越多,会将 10 进制进行 62 进制转换以缩短链接。 数据量越来越多,会使用缓存等方式优化查询速度等。 |
![]() | 4 shakaraka PRO ![]() |
![]() | 5 opengps 2021-01-22 19:25:22 +08:00 我就是这么用的,不过我不是用的 int,而是自己指定 |
![]() | 6 6IbA2bj5ip3tK49j 2021-01-22 20:45:30 +08:00 int 不够短,本身就和短链接相违背了。 |
![]() | 7 iCD OP |
![]() | 8 iCD OP |
![]() | 9 felinx 2021-01-25 10:28:39 +08:00 用 hashid 啊,够短且不能被遍历的 https://hashids.org/ |