Php Mysql存储大量数据:UUID作为主键与任何其他逻辑

Php Mysql存储大量数据:UUID作为主键与任何其他逻辑,php,mysql,database,performance,uuid,Php,Mysql,Database,Performance,Uuid,我正在CakePHP2.0和mysql(InnoDB)中开发一个基于GPS设备的应用程序。每台设备每分钟都向数据库发送数据,我需要使其能够同时扩展到大量设备和服务器 我没有使用BIGINT auto increment作为主键,因为存在一个限制和最大值,超过该限制将达到BIGINT的限制,系统将崩溃,即使距离很远 我将主键创建为char(36),并从php生成UUID,并开始存储数据。主要是因为主键的限制和唯一性永远不会停止,设计也永远不会失败 独特性是我唯一的原因,而不是别的原因 问题: 系统

我正在CakePHP2.0和mysql(InnoDB)中开发一个基于GPS设备的应用程序。每台设备每分钟都向数据库发送数据,我需要使其能够同时扩展到大量设备和服务器

我没有使用
BIGINT auto increment
作为主键,因为存在一个限制和最大值,超过该限制将达到BIGINT的限制,系统将崩溃,即使距离很远

我将主键创建为
char(36)
,并从php生成
UUID
,并开始存储数据。主要是因为主键的限制和唯一性永远不会停止,设计也永远不会失败

独特性是我唯一的原因,而不是别的原因

问题:

  • 系统处于初步测试模式,插入数据的时间大大增加。在我的案例中,这种情况正在发生,随着时间的推移,插入数据的时间正在增加,我预计随着数据数量的不断增加,未来几天情况可能会变得更糟。现在表中大约有200000个数据\
  • 主键是char(36),我假设性能在insert、select语句和join中受到影响 我的想法是用varchar(50)列替换主键UUID列,并将设备ID/IMEI编号+时间戳存储为主键,它们将始终是唯一的。但从长远来看,这又是一个varchar字段和性能问题


    从长远来看,我的最佳选择是什么?

    只要使用
    biginunsigned

    未签名的INT64大约是4.000.000.000乘以4.000.000.000。假设地球上不到80亿人每人有一台设备每秒记录一次日志,那么剩下20亿秒或63年以上的时间。我假设在63年内,INT128是正常的(或小的)


    我也很肯定,,在一个表中达到2^64行之前,您将遇到非常不同的问题。

    如果您有1000000台设备,则需要3500多年才能全部使用这些设备……这个问题似乎离题了,因为它是关于mysql数据类型的错误假设,因此无法令人满意地回答。我的建议:让我们把这个问题关闭两天。由于您处于试验阶段,如果您的期望得到满足或未得到满足,则可以轻松验证。在此之前,我建议依赖网站上现有的相关资料,对Mysql列类型及其可能的行为进行更有根据的猜测。“插入数据的时间在很大程度上增加了”是以什么方式进行的?我们可以看到从零行开始,然后从200K行开始的每秒插入的一些计时吗?这个表上有什么索引?你在用什么硬件?你真的需要多快?