我正在开发Cakephp 2.0和mysql(InnoDB)中基于GPS设备的应用程序。每个设备每分钟向Db发送数据,我需要使其可以同时扩展到服务器的大量设备。
我没有使用BIGINT auto increment
作为主键,因为有一个限制和最大值,超过该值就会达到BIGINT的限制,即使很远,系统也会崩溃。
我将主键创建为char(36)
并从php生成UUID
并开始存储数据。主要是因为主键的限制和唯一性永远不会停止,设计永远不会失败。
唯一性是我唯一的理由而不是别的。
问题:
我的想法是用varchar(50)列替换主键UUID列,并将设备ID / IMEI号+时间戳存储为主键,它们将始终是唯一的。但在不利方面,从长远来看,它又是一个varchar领域和性能问题。
从长远来看,对我来说最好的选择是什么?
答案 0 :(得分:4)
只需使用BIGINT UNSIGNED
。
无符号INT64类似于4.000.000.000倍4.000.000.000。因此,假设您为每个不到80亿人每秒记录一次的设备配备了一台设备,那么您将获得20亿秒或超过63年的时间。我认为,在63年中,INT128是正常的(或小)。
我也很确定,在一张表中达到2 ^ 64行之前,你会遇到很多不同的麻烦。