首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mysql中存储URL的最有效方法是什么?

问在Mysql中存储URL的最有效方法是什么?
EN

Stack Overflow用户
提问于 2009-06-17 17:46:15
回答 3查看 9.5K关注 0票数 13

我想在MySql中存储大量URL,并在列上创建唯一索引。如果我将列设置为utf8,那么我将被限制为varchar(333),这不足以容纳我的一些URL。如果我将列声明为latin1,那么我将获得完整的1000个字符(不要认为我需要那么多字符)。但是,我必须对URL进行编码,并且始终与编码后的URL保持一致。有没有更好的方法来管理大量的URL?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-17 17:56:08

您可能会考虑将URL的主机名和协议部分存储在单独的表中,并通过键引用它。这对于获取特定主机的所有URLS以及解决字符串长度问题也很有用。

例如:

代码语言:javascript
复制
PROTOCOLS
-----------------------
PROTOCOL_ID   INTEGER
PROTOCOL      VARCHAR(10)    (i.e., http, https, ftp, etc.)

HOSTS
-----------------------
id       BIGINT
hostname varchar(256)   

URL
-----------------------
PROTOCOL      INTEGER  FK to PROTOCOLS
HOSTNAME      BIGINT   FK to HOSTS
QUERY_STRING  VARCHAR(333)
票数 5
EN

Stack Overflow用户

发布于 2009-06-17 21:08:14

有三种很好的方法可以做到这一点:

1)使用文本而不是VARCHAR。为了确保唯一性,您还必须创建一个单独的VARCHAR列来存储MD5()或SHA1()散列,并添加一个惟一索引或主索引。这会产生一个不幸的后果,即需要额外的磁盘寻道来检索URL,但根据您的用例,这可能是可以的。

2)使用VARCHAR和二进制排序规则,并使用COMPRESS()压缩URL。

3)我在输入前两个单词时忘记了第三个单词。嗯..。

票数 9
EN

Stack Overflow用户

发布于 2009-06-17 17:52:18

据我所知,最常见的做法是使用带有冲突控制的散列算法,只需使用某种快速的单向编码,就可以在URL上产生非常低的冲突。

试着去掉你知道在所有urls中都是相同的部分(如HTTP://、www等)如果这些urls都是你的域的一部分,那就把它也砍掉。

否则,我会重新思考这个问题,并尝试找到一种不同的方法来完成你想要完成的任何事情。我假设拥有一组唯一的URL确实解决了一些其他问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1008563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档