在时间序列工作负载中,应用程序(例如一些实时应用程序查询最近的信息,同时归档旧信息。
为了处理这种工作负载,单节点 PostgreSQL
数据库通常会使用表分区将一个按时间排序的大数据表分解为多个继承表,每个表包含不同的时间范围。
将数据存储在多个物理表中会加速数据过期。 在单个大表中,删除行会产生扫描以查找要删除的行,然后清理清空空间的成本。 另一方面,删除分区是一种与数据大小无关的快速操作。 这相当于简单地删除磁盘上包含数据的文件。
将数据存储在多个物理表中会加快数据过期的速度。在一个大表中,删除行需要扫描以找到要删除的行,然后清空空的空间。另一方面,删除分区是一种与数据大小无关的快速操作。这相当于简单地删除磁盘上包含数据的文件。
对表进行分区还可以使每个日期范围内的索引更小更快。 对最近数据进行的查询很可能对适合内存的 hot
索引进行操作。这加快了读取速度。
插入也有更小的索引要更新,所以它们也更快。
在以下情况下,基于时间的分区最有意义:
- 大多数查询只访问最近数据的一个非常小的子集
- 旧数据定期过期(删除/丢弃)
请记住,在错误的情况下,读取所有这些分区对开销的伤害大于帮助。 但是,