微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

将从已处理的卫星雷达数据中不断产生数据,这些数据将具有全球覆盖范围.根据全球的卫星分辨率和土地覆盖率,我估计完整的数据集可以产生全球750亿个不同位置的数值.在单个卫星的寿命期间,输出在这些位置中的每一个处产生多达300个值(因此总数据集> 22万亿个值).这是针对一颗卫星,并且已经有第二颗卫星,在新的几年内计划另外两颗.所以会有很多数据!单个数据项非常简单,仅包含(经度,纬度,值),但由于项目数量的原因,我估计单个卫星可以产生高达100TB的数据.

书面数据永远不需要更新,因为只有在处理新的卫星采集时才会增加.写入性能并不重要,但读取性能至关重要.该项目的目标是能够通过简单的界面(例如谷歌地图上的图层)可视化数据,其中每个点都具有基于其平均值,渐变或某些功能彩色值. (在帖子结尾演示).

根据这些要求,数据库需要具有可扩展性,我们可能会关注云解决方案.系统需要能够处理地理空间查询,例如“靠近(lat,lon)的点”和“(Box)内的点”,并且具有< 1s用于定位单个点,多边形包含多达50,000个点(尽管最多可达200​​,000个点). 到目前为止,我在1.11亿个位置拥有大约7.5亿个数据项的测试数据集.我已经试过了一个postgres / postGIS实例,它运行正常,但没有分片的可能性,我不这样做,这将能够应对数据增长.我还试用了一个mongoDB实例,这似乎也好了所以远,并且通过分片,可能足以与数据量一起扩展.我最近学到了一些关于elasticsearch的知识,所以对此有任何意见都会对我有所帮助. 这是我们想要使用完整数据集实现的快速动画:

这个gif(来自我的postgres试用版)提供(6×3)预先计算的光栅图块,每个图块包含~200,000个点,每个点生成约17秒.点击一个点,通过拉出<中最近的位置的所有历史值来制作图表. 1秒. 对于长篇大论道歉,欢迎提出所有意见/建议.

解决方法

你可以按位置分片.将地球划分为网格,并将该网格中的每个正方形放在一台服务器上.既然你提到了云,那就非常适合云.当然,您需要手动合并来自多个服务器的结果.

这样你可以使用任何类似的数据库解决方案.它不需要自行扩展.

各个方块将具有不同数量的数据.您可以为它们使用不同大小的计算机(因为这是云),或者在同一台计算机上放置多个小碎片.

这种分片方案非常适合您执行的查询,因为每个查询只需要触摸很少的分片.时间分片更糟糕,因为每次查询都必须触及所有时间分片.随机分片具有相同的问题.

总而言之,这是一个简单的分片情况,因为查询模式非常适合分片方案.

实际上,我想知道你是否需要一个数据库.也许你可以将地球划分为1000×1000或更小的地块,并在每个地块的blob存储中有一个平面文件. Blob存储根本不介意1M blob.

使用此存储方案,在概念上执行查询非常容易.您也可以将数据冗余存储在多个网格分辨率中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_no=&#39;LJCG001H&#39; THEN dbo.ELTPNAME(a.fw_nu) ELSE d.fm_name END),e.fw_state_nm,f.fw_rmk_nm
if not exists(select name from syscolumns where name=&#39;tod_no&#39; and id=object_id(&#39;iebo09d12&#39;)) alter table iebo09d12 add tod_no varchar(
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_nm,g.fa_name from LJSS007H a (nolock) Left join LJPA002H b (nolock) On a.pa_no =b.pa_no Left jo
要在 SQL Server 2019 中设置定时自动重启,可以使用 Windows 任务计划程序。下面是详细的步骤: 步骤一:创建批处理文件 打开记事本。 输入以下内容: net stop &quot;SQL Server (MSSQLSERVER)&quot; net start &quot;SQ
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的事务日志已满,导致数据库操作失败。要解决这个问题,可以按照以下步骤操作: 1. 备份事务日志首先,备份事务日志以释放空间: BACKUP LOG [EastRiver] TO DISK = N&#39;C:\Backup\East
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标识ID,若不知道怎么查询数据库的标识ID, 打开SQL Server management studio,点击工具。选择SQL Server Profiler。 登录,登录成功后,如果有个默认弹窗,先取消 新建追踪 命名
--最新的解决方法 --先创建用户帐户,不进行授权,然后通过下面的SQL语句将该用户帐户关联至对应的数据库用户。优点是避免了重新授权的操作。 USE tempdbEXEC sp_change_users_login &#39;Update_One&#39;, &#39;iemis&#39;, &#3
命令: ALTER TABLE 表名 add 列名 数据类型 default 默认值 not null 例如: ALTER TABLE LJEL005H add el_req int default 15 not null
declare @i int set @i=340 while @i&lt;415 begin set @i=@iʱ insert into LJWK007H select &#39;2024&#39;,&#39;28&#39;,&#39;9110&#39;,&#39;3PTSD621000000