表中只有几列,大约有 100 多个基于列的数据,只需存储这些数据,以便以后导出到其他源。此数据(除了提到的前几列之外)不需要索引/过滤或以某种方式操作。没有查询,可以以任何方式检查此数据。唯一的问题是,该应用层可以检索具有其他未使用工作负载的整行,并将其反序列化以进一步转换为外部格式。有一个想法是将整个类序列化到这个字段中,但后来我们意识到,这对数据大小来说是一个巨大的开销(因为额外的java类元数据)。因此,它是一个简单的键值数据(如关系模型所示,键集是静态的)。在数据库性能(50+ TB存储)方面,在PostgreSQL中存储这些额外的未使用数据的正确方法和数据类型是什么?也许值得省略密钥数据并仅将值存储为数组(因为键是静态的),并在应用程序层按索引反序列化后获取值(因为首先是数据库性能)?
1 回答
慕田峪7331174
TA贡献1828条经验 获得超13个赞
a_horse_with_no_name,非常感谢,但数据类型真的很棘手。jsonb
就包含 的单个元组所需的字节量而言,必须始终牢记 - 格式名称的大小。因此,如果有人想要重新发明轮子并将大名称存储为单个索引 - 它将减小整体元组大小,但它并不比将所有数据存储为典型的关系表字段更好,因为算法适用于这两种情况。jsonb
key
json
key
byte
TOAST
另一种方法是对单个字段使用存储方法。在这种情况下,将在缓存中保留更多元组,因为无需将整个数据保存在内存中。EXTERNAL
jsonb
PostgreSQL
jsonb
无论如何,我最终在字段类型中组合了+(因为在我们的系统中不需要查询字段中的数据):protobuf
zlib
bytea
bytea
添加回答
举报
0/150
提交
取消