我需要在数据库中存储数百万个URL.每个URL都应该是唯一的,因此我将使用ON DUPLICATE KEY UPDATE并计算重复的URL.
但是,我无法在URL字段上创建索引,因为我的varchar字段是400个字符.MySQL抱怨并说; "#1071 - 指定密钥太长;最大密钥长度为767字节".(Varchar 400将占用1200字节)
如果您需要在一台服务器中每天处理至少500000个URL,那么最好的方法是什么?
我们已经在考虑将MongoDB用于相同的应用程序,因此我们可以简单地查询MongoDB并找到重复的URL,并更新该行.但是,我并不赞成使用MongoDB来解决这个问题,我想在这个阶段只使用MySQL,因为我希望在开始时尽可能精简并更快地完成项目的这一部分.(我们还没有玩过MongoDB,也不想在这个阶段花时间)
使用更少的资源和时间是否还有其他可能性.我想要获取URL的MD5哈希并存储它.而且我可以将该字段改为UNIQUE.我知道,会有冲突,但如果这是唯一的问题,那么在1亿个网址中可以有5-10-20个重复项.
你有什么建议吗?我也不想花10秒钟只插入一个URL,因为它每天会处理500k个URL.
你会建议什么?
编辑:根据请求,这是表定义.(我现在不使用MD5,它用于测试)
mysql> DESC url;
+-------------+-----------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+-------------------+-----------------------------+
| url_id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| url_text | varchar(400) | NO | | | |
| md5 | varchar(32) | NO | UNI | | |
| insert_date | timestamp | NO | | CURRENT_TIMESTAMP | on update …Run Code Online (Sandbox Code Playgroud) mysql ×1