gpt4 book ai didi

Mysql:自增主键出现重复键错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:22 24 4
gpt4 key购买 nike

我有一个表'logging',其中我们记录访问者历史记录。我们一天有1400万的浏览量,所以我们一天在表中插入1400万条记录,下午的流量最高。从某天开始,我们将面临重复键输入 'id' 的问题,根据我的说法,这不应该是这种情况,因为 id 是自动递增的字段,而我们是 没有在插入查询中显式传递 id。详情如下

logging (MyISAM)
----------------------------------------
| id | int(20) |
| virtual_user_id | varchar(1000) |
| visited_page | varchar(255) |
| /* More such columns are there */ |
----------------------------------------

请告诉我这里有什么问题。在 MyISAM 中保持表在这里是一个问题。

最佳答案

问题 1:主键的大小

http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

不管你给它的大小是多少,一个 INT 的最大大小是 2147483647,如果是无符号的,是它的两倍。这意味着您每 153 天就会遇到一个问题。

为防止这种情况发生,您可能希望将数据类型更改为无符号双整数。或者对于更荒谬的大容量,甚至将 unix 时间戳 + 微时间作为复合键。或者完全不同的数据库解决方案。

问题2:实际错误

它可能是并发,尽管我认为这不太合理。您必须为此提供插入 ID/错误。你使用交易吗?

另一种可能性是损坏的表。不知道你的 mysql 版本,但这可能有效:

CHECK TABLE tablename

查看是否有任何投诉。

REPAIR TABLE tablename

一般建议:

插入数据库的数据量是否合理,无论如何它不会降低一切速度吗?我想知道您的数据库如何执行锁定以及在删除期间的所有操作,例如在更改表期间。

正确的方法完全取决于你的系统的目标和要求,我不知道,但这里有一个想法:

将行记录到日志中。在我们自己的时间导入日志文件。当您的数据库出现问题或需要执行一些锁定所有内容的大操作时,不要用错误或延迟来打扰您的访问者。

关于Mysql:自增主键出现重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com