java - 在 PostgreSQL 中存储未使用的数据块的最有效方法
问题描述
一个表中的列很少,大约有 100 多列基于数据,只需要存储这些数据以供以后导出到另一个源。
这些数据(除了提到的前几列)不需要被索引/过滤或以某种方式进行操作。没有可以以任何方式检查此数据的查询。
唯一的事情是,该应用程序层可以检索具有额外未使用工作负载的整行并将其反序列化以进一步转换为外部格式。
有一个想法是将整个类序列化到这个字段中,但后来我们意识到,这对于数据大小来说是一个巨大的开销(因为额外的 java 类元数据)。 所以这是一个简单的键值数据(键集是静态的,正如关系模型所暗示的那样)。
就数据库性能(50+ TB 存储)而言,在 PostgreSQL 中存储这些额外未使用数据的正确方法和数据类型是什么?也许值得省略键数据并仅将值存储为数组(因为键是静态的)并在应用层通过索引反序列化后获取值(因为首先是数据库性能)?
解决方案
a_horse_with_no_name,非常感谢,但jsonb
它确实是一种棘手的数据类型。
就包含 的单个元组所需的字节数而言jsonb
,必须始终牢记 -格式中key
名称的大小。json
这样,如果有人想重新发明轮子并将大key
名称存储为单个byte
索引 - 它会减少整体元组大小,但并不比将所有数据存储为典型的关系表字段更好,因为TOAST
算法适用于这两种情况。
另一种方法是对单个字段使用EXTERNAL
存储方法。jsonb
在这种情况下,PostgreSQL
将在缓存中保留更多元组,因为不需要将整个jsonb
数据保留在内存中。
无论如何,我最终在字段类型中使用了protobuf
+组合(因为不需要在我们的系统中查询字段中的数据):zlib
bytea
bytea
推荐阅读
- postgresql - 无法计算日期范围内的工作时间 Postgresql
- python - 如何从 pandas Dataframe 中找到类似的数据?
- docker - Docker 无法在服务器上运行映像
- package - 设置集中式 Julia 库存储库
- javascript - Hashtag 字符使下载时文件不完整
- python - 在 django 中找不到 slug 404
- indexing - 并非所有记录都在 Solr 6.6.0 中建立索引
- javascript - 如何替换从 react-native 中的数组获得的字符串
- python - 如何合并两帧?openai 健身房复古中闪烁的观察问题
- xml - 如何确定 xml 在代号中的格式是否正确?