在PostgreSQL中存储和查询滚动数据


12

我将大量的天气模型数据放入PostgreSQL数据库中。该计算机具有8个内核和16 GB的RAM。我正在使用PostGIS 2.1运行PostgreSQL 9.3。每个表都有不同的天气数据(温度,露点,风等)。每个表将有6-7列:纬度,经度,点几何,高程,与模型相关的日期时间,以及1-2个感兴趣的数据值。将首先根据时间和海拔高度查询边界框的数据。每个表大约有145,757,360行(比现在不再重要的数据将被删除)。我粗略估计,每个表的大小(不含索引)约为10 GB。(这是52字节的数据加上每行23字节的开销)。当新模型数据可用时,数据将定期更新/插入。注意:

因此,我正在研究以下两个计划:

  1. 只需按(日期时间,海拔高度)进行索引和聚类,并为点几何图形添加附加索引。运行常规的cron作业,该作业将删除旧行,运行真空/分析并重新进行集群。
  2. 按日期时间进行分区,然后对每个表按高度进行聚类,并按索引对几何进行索引。运行常规的cron作业以添加新表,然后删除旧表。

进一步,

  • 因此,我知道删除表的效率更高,而删除和清理则更为有效。但是我会否看到性能提升?
  • 当所有表将被均匀更新和选择直到不相关而被删除之前,分区是否合适(文档指出,当只选择其中的几个分区时,分区效果最佳)?

交付数据时,选择的速度会比聚集索引快吗?如果一次发出多个请求,答案是否会改变?

谢谢。我希望我收集所有需要的数据。如果没有,请告诉我,我将其添加。


1
哦,这些狭窄的行正是PostgreSQL的大行标头开始真正受到伤害的地方。可惜没有太多可以消除的东西。并不是说我们会输掉xminxmax,等等。有一个功能可能使它成为9.4,这可能会激发您的兴趣,称为minmax索引,这将使这种事情变得更加方便。
Craig Ringer 2014年

1
以下组合是重复的:“纬度,经度,点几何,高程”。如果是,则将其标准化到另一个表中可以节省一些空间。
AK

只是勉强。PostGIS几何图形是二进制数组,并且不可读。我可以在输出中导出这些值,但是之后就无法对其进行聚类。我可以使用GeoHash进行聚类,但是可读性比latlon更高。但是无论哪种方式,空间都不是问题。他们提供了尽可能多的terrabytes。问题是我无法快速查询terrabytes。数据库本身将很大程度上是非事务性的。完全只有两个脚本具有写访问权限。其他所有内容均为只读。
bshender 2014年

克雷格:它们​​看起来确实很吸引人,我期待着它们出来时进行试验。对9.3中的设置有任何想法吗?
bshender 2014年

1
您能否提供两条信息:1)对您来说最重要的是插入速度或查询速度?2)最常见的查询是什么?
Thomas Kejser 2014年

Answers:


1

考虑到所有问题,我将选择选项2。日期将被均匀选择,但是我猜测对于给定的查询,仅涉及一个或两个日期分区。很遗憾您无法按日期对地理位置和分区进行聚类,这是理想的选择。如果边界框足够小,则高程始终倾向于与地理位置相关。

有了可用的选择,更干净的数据操作和避免每天抽真空是一件好事。

使用选项1 交付选择可能更快,尽管我怀疑这可能会洗手。对于选项1,具有相同日期和海拔高度的记录在一个大型聚簇索引中彼此靠近放置。使用选项2,具有相同日期和海拔的记录在许多较小的聚集索引中彼此靠近放置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.