如何索引基于时间序列的地理空间数据



我有以下用例:50亿以上的地理空间数据点,需要根据3个谓词范围进行查询:纬度、经度和日期。边界框地理空间查询通常返回500K-1M行,一旦按日期范围过滤,其中只有约0.4%是有效的。

理想的结构是3D索引:k-d树/八叉树等,但PostGreSQL(和大多数其他数据库(的地理空间索引是2D结构。有没有人有在3D索引中表示这种类型的查询的经验,也许是作为点云,使用按时间顺序排列的值作为"Z"分量?(注意:尽管目前的环境是PostgreSQL,但基于其他引擎的建议非常受欢迎(

编辑:我正在考虑的另一种可能性是将日期分辨率降低到离散值,而不是范围。然后(理论上(我可以使用一个DB产品,将地理空间数据扁平化为一个标准的B树(使用平铺方法(,并创建一个简单的复合索引,即:

其中日期年份=2015,位置文件=xxxxxxxxx

我假设您并没有真正查询纬度和经度,而是使用几何查询,比如"与该边界框重叠";或";与某一点的距离不超过这个距离";。

对此,最好的方法可能是使用按日期范围进行分区。然后,日期条件将导致分区修剪,因此您只需要对那些符合日期条件的分区执行GiST索引扫描。此外,分区可以很容易地去除旧数据。

您可以构建多列GiST索引。在btree_gist扩展和postgis扩展的帮助下,您可以对日期和地理位置创建一个gist索引,这或多或少相当于八叉树。但很难弄清楚你到底有什么,日期,日期范围,或者时间维度的其他方面。

最新更新