小编Azw*_*wok的帖子

具有快速(<1 秒)读取查询性能的大型(> 22 万亿项)地理空间数据集

我正在为需要快速读取查询性能的大型地理空间数据集设计一个新系统。因此,我想看看是否有人认为在以下情况下有可能或有关于合适的 DBMS、数据结构或替代方法来实现所需性能的经验/建议:

数据将从处理过的卫星雷达数据中不断产生,这些数据将覆盖全球。根据卫星分辨率和地球的陆地覆盖范围,我估计完整数据集可在全球 750 亿个离散位置产生值。在单颗卫星的整个生命周期内,输出将在每个位置产生多达 300 个值(因此总数据集超过 22 万亿个值)。这是针对一颗卫星,并且已经有第二颗在轨,未来几年计划再有两颗。所以会有很多数据!单个数据项非常简单,仅包含(经度、纬度、值),但由于项目的数量,我估计单个卫星最多可产生 100TB。

写入的数据永远不需要更新,因为它只会随着新卫星采集的处理而增长。写入性能并不重要,但读取性能至关重要。该项目的目标是能够通过一个简单的界面(例如谷歌地图上的图层)将数据可视化,其中每个点都有一个基于其平均值、梯度或某个时间随时间变化的函数的颜色值。(帖子末尾的演示)。

从这些需求来看,数据库需要具有可扩展性,我们很可能会转向云解决方案。系统需要能够处理地理空间查询,例如“附近的点(纬度,经度)”和“范围内的点(框)”,并且具有 < 1 秒的读取性能以定位单个点,以及包含多达50,000 点(尽管最好达到 200,000 点)。

到目前为止,我在 1.11 亿个位置拥有约 7.5 亿个数据项的测试数据集。我已经试用了一个 postgres/postGIS 实例,它工作正常,但没有分片的可能性,我不这样做,这将能够随着数据的增长而应付。我还试用了一个 mongoDB 实例,这似乎再次正常到目前为止,使用分片可能足以随数据量扩展。我最近了解了一些有关 elasticsearch 的知识,因此对此的任何评论都会有所帮助,因为它对我来说是新的。

这是我们想要用完整数据集实现的快速动画: Tileserver 为 7.5 亿个数据项提供可视化服务。

这个 gif(来自我的 postgres 试验)提供 (6x3) 预先计算的光栅图块,每个包含约 200,000 个点,生成每个点需要约 17 秒。通过单击一个点,通过在 < 1 秒内拉取最近位置的所有历史值来制作图表。

为长篇道歉,欢迎所有评论/建议。

performance database-design spatial performance-tuning

20
推荐指数
2
解决办法
880
查看次数