如何存下40亿个不重复数字?作为一名数据工作者,你会如何设计表模型呢,带着这个问题我们一起来探索最佳方案。
常见数据类型
在深入理解这个问题之前,我们需要先回忆一下几个基础知识。
1 bit(比特) = 1个2进制数
1 byte(字节) = 8个2进制数 = 8 bit
基于上述知识,我们就可以理解数据库中数据类型的存储大小和取值范围了。
名称 | 存储大小 | 取值范围 |
---|---|---|
SMALLINT | 2字节 | -32768 ~ +32767 |
INTEGER(别名INT或INT4) | 4字节 | -2147483648~+2147483647 |
BIGINT(别名INT8) | 8字节 | -9223372036854775808~+9223372036854775807 |
从上表我们可以看出,40亿这个数字已经超出了INTEGER
类型的最大范围,所以只能选择BIGINT
类型。
采用数据表行存储
最简单粗暴的方式,创建一张数据表只有一个字段,生成40亿个不重复的数字并循环写入数据表,一个数字作为一条记录。
上表给出了10的各个数量级下数据表的大小趋势图,当测试数字量达到100万时,数据