短网址都会有一串随机的短码,如果直接使用保存原始 url 的数据库主键 id 会有什么问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iCD
V2EX    问与答

短网址都会有一串随机的短码,如果直接使用保存原始 url 的数据库主键 id 会有什么问题

  iCD 2021-01-22 18:39:35 +08:00 1772 次点击
这是一个创建于 1722 天前的主题,其中的信息可能已经有所发展或是发生改变。

假设短链服务时 dl.c

db 设计为

id rawurl
1 www.baidu.com

我创建 www.baidu.com 的短链就直接写一条单纯的 url 记录,然后以主键 id 作为 dl.c 的短码,

请求 dl.c/1 直接查 id 为 1 的 rawurl 进行重定向,这样有啥问题吗?

目前能想到的就是会被别人遍历,但是好像也没啥问题?

id 用 bigint 也足够用

9 条回复    2021-01-25 10:28:39 +08:00
Jooooooooo
    1
Jooooooooo  
   2021-01-22 18:40:33 +08:00
公开 id 不应具备可遍历属性
FS1P7dJz
    2
FS1P7dJz  
   2021-01-22 19:01:31 +08:00   1
提问
那么当别人在此使用你的服务生成一个一样的 www.baidu.com,你是变成 dl.c/2 还是继续 dl.c/1 呢?

再提问
如果你稍微需要做一些统计服务,那么 dl.c/1 和 dl.c/2 都是统一个网址,你又如何进行合并呢?

继续提问
如果是 baidu.com/1.htmlbaidu.com/2.html,你又如何进行统计呢?

以上都是基于亿级数据考虑

不过如果你只是造个自己用的轮子...倒也无妨考虑这么多
imdong
    3
imdong  
   2021-01-22 19:08:48 +08:00 via iPhone
自己用,完全没问题。

短网址核心代码无非就这么几行。
保存对照表,以及取出数据并跳转。

其余的一切都是基于安全性,速度等角度进行的优化罢了。

考虑到数据越来越多,会将 10 进制进行 62 进制转换以缩短链接。

数据量越来越多,会使用缓存等方式优化查询速度等。
shakaraka
    4
shakaraka  
PRO
   2021-01-22 19:14:38 +08:00   2
opengps
    5
opengps  
   2021-01-22 19:25:22 +08:00
我就是这么用的,不过我不是用的 int,而是自己指定
6IbA2bj5ip3tK49j
    6
6IbA2bj5ip3tK49j  
   2021-01-22 20:45:30 +08:00
int 不够短,本身就和短链接相违背了。
iCD
    7
iCD  
OP
   2021-01-23 01:52:01 +08:00
@FS1P7dJz 学习了。

请问这里讲的统计一般是个什么样的需求呢?
如果不需要对短链进行分析的话 长链和短链应该是一一对应就可以?
iCD
    8
iCD  
OP
   2021-01-23 01:54:50 +08:00
@xgfan @imdong 是的 我刚也想到这个原因了,数据量大了之后这个主键 id 长度会变的越来越长,而且长度不固定。
通过转成 62 进制就能变短且固定
felinx
    9
felinx  
   2021-01-25 10:28:39 +08:00
用 hashid 啊,够短且不能被遍历的 https://hashids.org/
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5925 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 30ms UTC 03:35 PVG 11:35 LAX 20:35 JFK 23:35
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86