当对短网址使用唯一的字母数字字符串时,将创建的字符串存储在数据库中还是即时编码/解码更好?

Posted

技术标签:

【中文标题】当对短网址使用唯一的字母数字字符串时,将创建的字符串存储在数据库中还是即时编码/解码更好?【英文标题】:When using a unique alphanumeric string for a short url, is it better to store the created string in the database or encode/decode on the fly? 【发布时间】:2010-02-22 03:10:35 【问题描述】:

我想为我网站上的特定内容创建缩短链接。现在要查看这些页面,我通过 GET 传递的内容 ID(即 mysite.com/content/?id=332)提取相关内容。为了混淆 ID,我想使用 base64 将其编码和解码为一个短的字母数字字符串(如 34sa6),我已经知道该怎么做。

我的问题是:在创建每条内容时将此字符串存储为数据库字段,还是在用户访问 mysite.com/content/34sa6(其中意味着访问 mysite.com/content/?id=332 也会加载正确的页面)。如果我存储它,它将成为我的目的的事实上的主键,因为所有相关内容都将基于它进行查询,所以只是想找出最明智的方法。

【问题讨论】:

对提出 URI 方案的任何人的批判性阅读:w3.org/Provider/Style/URI 【参考方案1】:

如果您在请求期间对其进行解码和编码,则以后无法切换到其他编码方法。

将其存储在数据库中允许您随时更改编码,因为当需要检索完整的 URL 时,脚本只会查找匹配的数据库条目。

【讨论】:

第一次决定更改编码方法时,您总是可以一次性通过并将所有内容存储在数据库中。在此期间不会对每个 404 进行数据库查询,这是有话要说的。

以上是关于当对短网址使用唯一的字母数字字符串时,将创建的字符串存储在数据库中还是即时编码/解码更好?的主要内容,如果未能解决你的问题,请参考以下文章

在django中生成唯一的字母数字标识符[重复]

用java实现字母与数字混合的唯一序号,且要递增

django中字母数字(slug)字符串的网址模式

生成带有小写字母和数字的唯一随机字符串

在 Access 中生成随机字母数字字符串后检查重复项

JavaScript中的随机字母数字字符串?