V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iCD
V2EX  ›  问与答

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

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

    假设短链服务时 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 进制转换以缩短链接。

    数据量越来越多,会使用缓存等方式优化查询速度等。
    wunonglin
        4
    wunonglin  
       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   ·   实用小工具   ·   1112 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:52 · PVG 02:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.