URL的数据库索引

时间:2010-11-11 13:50:44

标签: database indexing nosql

我必须在数据库中存储数百万个URL,并且能够快速通过URL查找行。

MySQL 的字符串索引不够快,因为它们只索引字符串的前4个字符,通常为www.,然后MySQL迭代每个字符串那些以www.开头的行,并将该值与我搜索的URL进行比较。

MongoDB 不允许您自定义字符串索引的字符数和the docs aren't very detailed,因此我认为MongoDB不合适。

Google App Engine 有一个特殊的网址类型,这很棒,但我不能使用GAE。

有什么建议吗?

2 个答案:

答案 0 :(得分:8)

  

MySQL的字符串索引不够快,因为它们只索引字符串的前4个字符,通常是www。然后MySQL迭代这些以www开头的行。并将该值与我搜索的URL进行比较。

事实并非如此。对于MySQL1000 MyISAM767字节可以为InnoDB个字节编制索引。

如果您只需要为URL字符串进行文字匹配,请为其哈希值编制索引。

如果您使用16之类的内容,这将使您的索引大小保持较低(每个键MD5个字节),并且键值将均匀分布。

答案 1 :(得分:0)

如果您使用MySQL,请阅读High Performance MySQL (2nd ed.)的第103-104页(链接允许您搜索内部书籍 - 查找“pseudohash”),其中包含用于索引URL的哈希方法。最重要的是,它建议使用MySQL的CRC32功能代替MD5以获得更好的性能,因为它可以产生更短的值,可以更快地进行比较。