我将在NUMERIC
列中存储加密货币事务余额。由于与传统货币相比,加密货币的值在某种程度上变化很大,所以我使用NUMERIC(60,20)
类型来捕获所有用例。因为这感觉有点极端,我很好奇。
发布于 2016-11-19 12:18:47
NUMERIC
列声明的刻度和精度是对插入值的约束,但它们并不直接影响存储需求;1::NUMERIC(1,0)
、1::NUMERIC(99,98)
和1::NUMERIC
都有相同的底层表示形式。考虑到这一点,您的最佳选择可能是使用一个无约束的NUMERIC
列,并在按货币计算的基础上将您的值转换为合适的比例尺/精度。
NUMERIC
值存储为基-10,000位数字的可变长度数组,每个数组由16位整数表示,因此存储成本为每4位小数2字节,加上每个值的6字节头。小数部分和整数部分分别存储,因此11
消耗8个字节,而1.1
需要10个字节。您可以使用例如SELECT pg_column_size(1.1::NUMERIC)
来检查给定值的存储要求。
至于CPU开销,我预计大多数操作的成本与数字数成线性关系。然而,与获取值的I/O成本相比,这通常是相形见绌的,因此很可能不是一个问题。您必须在自己的硬件上尝试查询才能确定。
https://stackoverflow.com/questions/40686571
复制相似问题