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

2020-12-06 12:50:44 +08:00
 TheZihanGu

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

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

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

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

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

@Junzhou @xcstream 感谢提供思路

@imdong @kingfalse Lua 没撸过,太菜了...不会整🤔
datou
2020-12-06 20:45:36 +08:00
<amp-youtube data-videoid="gq5yubc1u18" layout="responsive" width="480" height="270"></amp-youtube>
现成的手把手全套教学
pytth
2020-12-06 23:03:47 +08:00
我这个,没有存数据库,直接就是存本地数组。http://o1o.run
lihongming
2020-12-07 02:11:08 +08:00
哈哈,这是老外最喜欢考的面试题——假设你是 Twitter 的短网址开发者,你要怎么设计你的系统?

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

YouTube 上有很多这种题的面试经,基本也是围绕数据库问题在讨论。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/732613

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX