我有7个8位整数值,我想要存储在Postgres中. Pg不提供单字节整数类型SMALLINT或2个字节,它是最小的整型数据类型.有没有办法我可以存储我的7 8位数字并节省空间?
具有7元素数组的数组类型是否更紧凑?或者,我应该使用我的7个数字的二进制表示法(例如,在Perl中使用pack)并将其存储在一个bytea字段中?
任何其他建议?
假设Postgresql中任何行的开销为
23 bytes(HeapTupleHeaderData),如果您真的关心少量的空间,那么您可能选择了错误的方式来存储数据.
无论如何,由于所有更复杂的类型都有自己的开销(bytea增加了四个字节的开销,例如位串5到8),完成所需内容的唯一方法是使用bigint(8字节)以数值方式移动每个值并将结果进行OR运算.您可以使用bit string operations使代码更容易 – 以位字符串计算,然后在存储之前转换为bigint – 或者如果要使速度更好,则只需手动乘法/加法.例如,以下是将两个字节一起存储为两个字节的结构,然后再重新得到它们:
int2 = 256 * byte1 + byte2 byte1 = int2 / 256 byte2 = int2 % 256
您可以将相同的想法扩展到存储其中的7个方法.检索开销仍然是可怕的,但您实际上会在此过程中节省一些空间.但是相对于行标题来说不是很多.