Database-Recommendation

數據庫中的高程數據(數百億資訊)

  • October 2, 2016

我需要一項服務,它可以為我提供座標(緯度、經度)的高程。有一個名為 SRTM3 的數據集,您可以在其中的文件列表中找到此資訊。每個文件都包含一個 1201*1201 正方形中的高程值表示,並且每個高程值都儲存為一個大端整數。該數據集中大約有 20 000 個文件。

例如,對於緯度 50.4161 和經度 14.12345,您會在文件的這些 1201*1201 值之一中找到數據N50E014.hgt

我的問題是:如果我要在一個表中導入所有這些數據,我將有大約 20 000 * 1201 * 1201 = 28 848 020 000 條記錄。

  • 將其儲存在數據庫中是否正確?如果是,您會推薦什麼系統?我必須提出的唯一要求是:
SELECT elevation 
FROM elevation e 
WHERE e.min_latitude < latitude 
AND e.max_latitude > latitude 
AND e.min_longitude < longitude 
AND e.max_longitude > longitude`
  • 還是我應該直接根據請求從原始文件中載入數據?但這意味著在每個請求上傳入一個文件(我可以在記憶體中保留一些最常用的文件,但它似乎效率不高)。

**編輯:**我在考慮更多關於任務隊列的事情,而不是在每個請求上打開文件,但讓我們忘記這一點,繼續關注數據庫系統。@Paparrazi 說傳統數據庫可以處理這麼多數據,並建議使用集群索引。我之前想到過,但在這種情況下,一旦載入數據,唯一的操作將是讀取(從不或幾乎從不寫入)。使用這些具有許多功能(如事務)的傳統數據庫似乎沒用,……當你不需要它時。還有其他選擇嗎?在面向大數據的數據庫(cassandra、mongo、…)中?

**EDIT2:**我正在調查@MickyT 的答案postgis。它似乎符合我的需要。我將嘗試將數據導入索引聚群表或 postgis 柵格表,對 2 個解決方案進行基準測試並在此處發布我的結果。

帶有PostGIS擴展的 PostgreSQL似乎擁有管理這些數據所需的一切。

PostGIS 有一組相當豐富的函式來處理像您描述的文件這樣的柵格。有關啟用和使用柵格的更多文件在此處

一旦您載入了柵格,如下所示的查詢應該會執行得相當好

SELECT p.Identifier, ST_Value(r.rast, p.geog) AS elevation
FROM query_point p
   INNER JOIN elevation_raster r ON ST_Intersects(r.rast, p.geog);

在每個請求上傳入文件不是一種選擇。

這大約是 TB 的數據。許多傳統的數據庫(例如 MSSQL 將處理它)。

min_latitude、max_latitude、min_longitude、max_longitude 上的聚集索引可能是要走的路。

由於您沒有任何關係,因此文件數據庫可能是要走的路。

考慮一個可以快速擴展的雲解決方案。

對大數據了解不多。希望你能得到更多的答案。

引用自:https://dba.stackexchange.com/questions/151128