V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
TheZihanGu
V2EX  ›  Node.js

想基于 Node 撸一个短链接,各位大佬有什么建议么

  •  
  •   TheZihanGu · Dec 6, 2020 · 6098 views
    This topic created in 1968 days ago, the information mentioned may be changed or developed.

    基础构思基于 Node + MongoDB 或 Redis,Nginx 反代 Express 。
    项目主要是自用,可能会加 Token 鉴权,因此可能不用关心 URL 审核的问题。
    目前生成短链部分没有问题...主要是关于跳转的逻辑。有两种思路,一是伪静态到页面然后请求后端接口返回长链接在进行跳转,另外一种是直接 Node 从数据库取到长链接然后 Express 重定向跳转。
    各位大佬能否给一些建议🤔

    29 replies    2021-12-29 16:04:07 +08:00
    learningman
        1
    learningman  
       Dec 6, 2020
    说白了就是一个 js 跳转一个 302 呗,我个人觉得 302 好一点
    qiayue
        2
    qiayue  
    PRO
       Dec 6, 2020
    短链需求是打开短链跳转到长链,最重要的指标就是跳转速度,所以如果为了追求最快速度,最好不要用数据库
    qiayue
        3
    qiayue  
    PRO
       Dec 6, 2020
    上条没打完
    不仅不要用数据库,更不要用前端 js 跳转,直接后端返回 302 给浏览器即可
    yazoox
        4
    yazoox  
       Dec 6, 2020
    @qiayue #3 不用数据库的话呢,那用什么来存储短链接和实际长链接之间的关系呢?
    zhengxiaowai
        5
    zhengxiaowai  
       Dec 6, 2020   ❤️ 1
    先注册一个短的域名。。
    qiayue
        6
    qiayue  
    PRO
       Dec 6, 2020
    @yazoox 用程序能够最快读取的方式
    Junzhou
        7
    Junzhou  
       Dec 6, 2020 via iPhone
    既然生成和解析短链接没问题,那直接 302 就可以了。
    opengps
        8
    opengps  
       Dec 6, 2020
    我已经自用好几年了,挺稳的,不过自己域名有一点不太好的就是,总有那么些地域的局部 dns 不能正常解析
    opengps
        9
    opengps  
       Dec 6, 2020
    看到有人提醒不要用数据库,补充下,数据库当然得用,不然咋存,只是作为很少变更的用途,用缓存多挡一层为佳。试试证明短链接压力再大,也比一个页面处理上百 k 轻松,单服务器可以轻松承载很大的并发访问量
    xcstream
        10
    xcstream  
       Dec 6, 2020
    直接 302
    jiangzm
        11
    jiangzm  
       Dec 6, 2020
    需求太简单了,而且要求跳转速度,所以最好不要用 node 层,直接 nginx+redis 模块干就完事,如果一定要用 node 也不要 Express 原生的 node 就好了。
    jiangzm
        12
    jiangzm  
       Dec 6, 2020
    写入肯定要用数据库,读取可以不用数据库,同步也不要放在读取端。
    huayumo
        13
    huayumo  
       Dec 6, 2020
    如果是我的话,也没有特殊需求的话,我就数据库直接搞了
    imdong
        14
    imdong  
       Dec 6, 2020
    短网址,特别是自己用的,太容易了,怎么简单怎么快就怎么来。

    这个随便搞一搞都不会太差,核心代码无非取出 ID,连接数据库,查出结果,header 302 搞定。

    想速度快,就加一层 Redis 缓存就好了,如果是 node,都不用存 redis,取出来直接放数组就好了,没有就去查数据库。

    连 Redis 都没必要,直接存内存不香么。
    forgottencoast
        15
    forgottencoast  
       Dec 6, 2020
    速度快、速度快,是不是 1 秒钟上百亿的资金流动?
    能到这里来问问题的,数据库就够了,简单好用,先解决业务问题。
    node 进程内加个内存缓存针对高命中的短链就可以了。
    kingfalse
        16
    kingfalse  
       Dec 6, 2020   ❤️ 1
    直接 nginx lua redis 比较好吧
    TheZihanGu
        17
    TheZihanGu  
    OP
       Dec 6, 2020
    @zhengxiaowai 已经整了一个四位已备域名了,就是备案翻了就不好了🤦‍♂️

    @Junzhou @xcstream 感谢提供思路

    @imdong @kingfalse Lua 没撸过,太菜了...不会整🤔
    datou
        18
    datou  
       Dec 6, 2020

    现成的手把手全套教学
    liKeYunKeji
        19
    liKeYunKeji  
       Dec 6, 2020 via Android
    我这个,没有存数据库,直接就是存本地数组。http://o1o.run
    lihongming
        20
    lihongming  
       Dec 7, 2020 via iPhone
    哈哈,这是老外最喜欢考的面试题——假设你是 Twitter 的短网址开发者,你要怎么设计你的系统?

    主要考点是数据库的选型、分区、分片、缓存、扩展、容量估算等。考得确实是数据库,楼主不要灰心。

    YouTube 上有很多这种题的面试经,基本也是围绕数据库问题在讨论。
    netnr
        21
    netnr  
       Dec 7, 2020 via Android
    一个 id 生成一个文件,内容写入链接,不知道相比数据库咋么样
    securityCoding
        22
    securityCoding  
       Dec 7, 2020
    @netnr 肯定慢很多啊
    chogath
        23
    chogath  
       Dec 7, 2020
    关键词: 数据库、唯一索引(通常是自增主机 ID )、缓存层( Redis )
    qwerthhusn
        24
    qwerthhusn  
       Dec 7, 2020
    如果会 LUA 的话最好,直接 Nginx 撸一个
    libook
        25
    libook  
       Dec 7, 2020
    直接返回 302 最简单。

    先做个 MVP 方案出来,根据实际使用中遇到的问题再做优化就好。
    simon3000
        26
    simon3000  
       Dec 7, 2020
    数据库方面推荐一个 kv 的:LevelDB
    TheZihanGu
        27
    TheZihanGu  
    OP
       Dec 7, 2020
    @qwerthhusn 问题是太菜了,不会撸😂
    @libook 感谢建议,已经写出来 302 跳转了。
    @netnr 你别说,最近我还真看到一个类似的。每生成一个短链接都生成目录+ HTML 文件然后 JavaScript 跳转...🤔
    atian25
        28
    atian25  
       Dec 18, 2020
    我们这边支撑了蚂蚁的短链服务,具体的方案里面,mongodb 、redis 这些都没用,直接用 oss 就可以了。
    xmsz
        29
    xmsz  
       Dec 29, 2021
    @atian25 怎么实现的

    是自动创建跳转的 index.html 页面吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5521 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 155ms · UTC 01:23 · PVG 09:23 · LAX 18:23 · JFK 21:23
    ♥ Do have faith in what you're doing.