Php Mysql存储大量数据:UUID作为主键与任何其他逻辑
我正在CakePHP2.0和mysql(InnoDB)中开发一个基于GPS设备的应用程序。每台设备每分钟都向数据库发送数据,我需要使其能够同时扩展到大量设备和服务器 我没有使用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,并开始存储数据。主要是因为主键的限制和唯一性永远不会停止,设计也永远不会失败 独特性是我唯一的原因,而不是别的原因 问题: 系统
BIGINT auto increment
作为主键,因为存在一个限制和最大值,超过该限制将达到BIGINT的限制,系统将崩溃,即使距离很远
我将主键创建为char(36)
,并从php生成UUID
,并开始存储数据。主要是因为主键的限制和唯一性永远不会停止,设计也永远不会失败
独特性是我唯一的原因,而不是别的原因
问题:
从长远来看,我的最佳选择是什么?只要使用
biginunsigned
未签名的INT64大约是4.000.000.000乘以4.000.000.000。假设地球上不到80亿人每人有一台设备每秒记录一次日志,那么剩下20亿秒或63年以上的时间。我假设在63年内,INT128是正常的(或小的)
我也很肯定,,在一个表中达到2^64行之前,您将遇到非常不同的问题。如果您有1000000台设备,则需要3500多年才能全部使用这些设备……这个问题似乎离题了,因为它是关于mysql数据类型的错误假设,因此无法令人满意地回答。我的建议:让我们把这个问题关闭两天。由于您处于试验阶段,如果您的期望得到满足或未得到满足,则可以轻松验证。在此之前,我建议依赖网站上现有的相关资料,对Mysql列类型及其可能的行为进行更有根据的猜测。“插入数据的时间在很大程度上增加了”是以什么方式进行的?我们可以看到从零行开始,然后从200K行开始的每秒插入的一些计时吗?这个表上有什么索引?你在用什么硬件?你真的需要多快?