怎么设计一个网站的永久链接 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sys64
4.88D
1.83D
V2EX    Python

怎么设计一个网站的永久链接

  •  
  •   sys64 2016-11-21 18:28:05 +08:00 4835 次点击
    这是一个创建于 3312 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如: 百度贴吧:
    http://tieba.baidu.com/p/4855169060/
    什么值得买:
    http://www.smzdm.com/p/6664641/
    v2ex:
    t/322033

    这个后面的数字是通过什么规则生成的,还是直接用数据库的自增 id

    25 条回复    2016-12-01 09:37:38 +08:00
    goofansu
        1
    goofansu  
       2016-11-21 19:19:15 +08:00
    v2 肯定是自增 id
    sys64
        2
    sys64  
    OP
       2016-11-21 20:15:40 +08:00
    @goofansu 嗯,应该是。我刚访问了一下
    /t/2
    /t/3
    /t/4
    应该是自增 ID ,如果是用数据库自增 id ,那这个 id 是保存到数据库的时候生成的,感觉这样设计不太好吧。不知道还有没有其他的方式生成,可以在保存到数据库之前就能生产一个唯一的链接 id ,但生成的数字 id 也不能太长。
    kslr
        3
    kslr  
       2016-11-21 20:30:52 +08:00 via Android
    自增是个非常简单实用的解决方案。当然考虑到隐私保护或者大规模部署也有其解决方案,你可以搜搜 ID 策略。
    lissome
        4
    lissome  
       2016-11-21 20:54:57 +08:00
    自增序列挺好的
    lhbc
        5
    lhbc  
       2016-11-21 21:11:37 +08:00 via iPhone
    short uuid
    sys64
        6
    sys64  
    OP
       2016-11-21 21:58:55 +08:00
    @kslr @lissome 哦,那这个自增序列,是由保存到数据库的时候,由数据库的自增字段提供的吗?感觉这样的设计有问题,这个永久链接应该是网站 url 逻辑的一部分,不应该由数据库来生成。

    @lhbc 看了一下能提供数字的短 id ,但不能保证唯一。应该需要自己写保证唯一的逻辑。
    phithon
        7
    phithon  
       2016-11-21 22:20:27 +08:00
    http://wiki.ioin.in/ 用的 hashids
    zhanglintc
        8
    zhanglintc  
       2016-11-21 22:35:29 +08:00
    @sys64 居然没有 /t/2 这不科学
    zhanglintc
        9
    zhanglintc  
       2016-11-21 22:36:01 +08:00
    @sys64 写错了 居然没有 /t/0 这不科学
    rogwan
        10
    rogwan  
       2016-11-21 22:48:40 +08:00 via Android
    稍微大一些的数据量,一般不建议用自增吧。不过一般的应用根本到不了自增 ID 是瓶颈的状态 LOL

    据说有理想的是 随机数+uuid+时间戳 组合生成 ID ,看着有点长,其它没什么问题
    windowsma
        11
    windowsma  
       2016-11-21 23:25:10 +08:00
    @sys64 您这个思维还是很独特的。。。只能说思维比较奇葩。
    不过可以自己写个发号器,根据时间、密钥等,生成唯一 uuid 。微博就是这么做的
    sys64
        12
    sys64  
    OP
       2016-11-21 23:29:31 +08:00
    @windowsma 哦,请看我贴出的网址的 url ,如 http://tieba.baidu.com/p/4855169060/ 希望是短数字的不重复的。
    lhbc
        13
    lhbc  
       2016-11-21 23:33:56 +08:00 via iPhone
    @sys64 自增 id+unix time 不就行了,不重复,无冲突,无法遍历。
    sys64
        14
    sys64  
    OP
       2016-11-21 23:44:49 +08:00
    @lhbc 谢谢的回复,不过这么说,那其实 unix timestamp 就是唯一的了,加不加自增 id 就无所谓了。自增 id 如果是数据库提供的话,那必须先查数据库(或由保存到数据库的时候返回的)才能得到。
    nfroot
        15
    nfroot  
       2016-11-22 01:16:35 +08:00
    @sys64 unix timestamp 还不至于唯一。精确到毫秒也不至于唯一,但是可以 time()+rnd(time())
    misaka19000
        16
    misaka19000  
       2016-11-22 01:54:18 +08:00 via Android
    如果用的是 MySQL ,那么自增是个非常好的解决方案,如果因为某些原因用不了自增,那用 UUID 也可以
    onlyhot
        17
    onlyhot  
       2016-11-22 04:11:47 +08:00 via iPhone
    id uid time
    Vicer
        18
    Vicer  
       2016-11-22 08:30:21 +08:00 via Android
    UUID+unix timestamp
    wwek
        19
    wwek  
       2016-11-22 08:50:55 +08:00
    规则上没有什么标准范式
    我觉得豆瓣的设计的就不错

    给你一个思路,把 URL 结构看成倒置树状结构
    什么地方用文件夹,什么地方用文件你就非常清楚了
    另外如果现在还考虑传统 SEO 的话,这个树应该是低而广阔的树,顾名思义就是目录不要深,摊开
    wwek
        20
    wwek  
       2016-11-22 08:51:50 +08:00
    ID
    1. 自增
    2. 放号器
    Tink
        21
    Tink  
    PRO
       2016-11-22 08:54:59 +08:00
    时间戳并不唯一
    qiayue
        22
    qiayue  
    PRO
       2016-11-22 09:31:53 +08:00
    @sys64
    你只看到了 http://tieba.baidu.com/p/4855169060/ ,你觉得 4855169060 这么大的数不可能是自增 ID ,但是你没有考虑到贴吧的流量有多大,发帖量有多大。
    最简单的, http://tieba.baidu.com/p/2 可以打开,而 http://tieba.baidu.com/p/1 提示“很抱歉,该贴已被删除。”,所以是帖子被删除了,而不是不曾存在过。
    windowsma
        23
    windowsma  
       2016-11-22 10:42:05 +08:00
    @sys64 贴吧其实也是自增的,自增键确实是最简单、靠谱的方案。不过题主的要求也是可以实现的,不外乎就是时间戳、内部计数器组合成的,如果有多个业务或服务器,也可以把业务、服务器编号揉进来。内部计数器是不可少的,可以用 memecache 或 redis 实现,毕竟时间戳+随机数的形式也不能保证唯一。
    如果嫌长度太长,可以转为 16 进制或自定义进制。
    anyforever
        24
    anyforever  
       2016-11-22 13:48:11 +08:00
    自增就很好理解了, UUID ,放号器上面也有朋友提到,以下供参考
    https://github.com/zheng-ji/goSnowFlake
    https://github.com/osgochina/donkeyid
    anyforever
        25
    anyforever  
       2016-12-01 09:37:38 +08:00
    恰巧又碰到一篇关于这个的 http://calvin1978.blogcn.com/articles/uuid.html
    帖上来
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2907 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 14:11 PVG 22:11 LAX 06:11 JFK 09:11
    Do have faith in what you're doing.
    ubao msn 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