压缩 postgres 中很少查询的历史数据

压缩 postgres 中很少查询的历史数据

简而言之:将多个历史数据库记录压缩为更大的压缩记录,并暂时将其解压缩为原始记录以便于查询,并在查询完成后清理它。想知道为此实现一个 SW 层。我倾向于坚持使用 postgres 而不引入另一个系统。但是,我知道这需要实现一个软件层来管理它,而且我也觉得我可能会重新发明一些现有的轮子,并且这样做可能会导致我们的团队付出巨大的实施努力。

详细来说:
在我们的应用程序中有一个 postres DB 表,它存储了一些“小工具”的历史测量信息,因此一些时间戳、小工具的 ID 和测量数据。假设它具有很好的可压缩性。
根据我的测量,1 条记录平均占用大约 500 字节的磁盘空间,其中大约 2/3 的空间用于索引。
这是大约 8000 万条记录的结果。因此,目前它使用了大约 40 GiB,但我们需要为更大的部署做准备,为此,该表的估计大小可能约为 1700 GiB。
服务器是裸机,因此简单/强力的解决方案是添加 2 TB SSD,这样就可以了。
但是,我们可能需要使用较小的 SSD 并提高空间效率。此外,我认为,当很少查询这些历史数据时,以未压缩的形式存储所有这些历史数据效率不高/浪费空间。在没有尝试访问其他数据库等的情况下,我想为什么不直接按天和按“小工具”压缩这些历史测量数据呢?(我读到 postgres 中对此有一些支持,或者只是使用一些现成的标准压缩算法。)
当用户想要查看从日期 1 到日期 2 的小工具 x、y、z 的测量数据时,软件层将从数据库中获取压缩数据并将其放入某个(临时)表中以便于查询(SQL)——它可以利用查询表的现有 DAO 代码。
当用户查看完数据后,可以删除未压缩的记录以释放空间。

我想知道实现这样的“缓存层”是否合理?
或者是否有一些现成的免费组件更适合此用例?

答案1

这个问题也许更适合问这里,但让我尝试建议不同的方法:

为什么不添加普通(磁性)磁盘、创建文件系统并挂载它,而是执行压缩(这会消耗 CPU 能力进行压缩/解压)呢?然后在这个挂载点创建新表并移动该表中的旧数据。速度不会与 SSD 相同,但据我所知,您不经常访问这些数据。

或者按照建议这里使用特定参数创建新的表空间并对数据进行分区,以便旧数据位于这个新的表中。

相关内容