我有一個很大的數據集合,我想稍後用於用戶搜索。 目前我有200萬資源(〜50GB)。對於每一個,我有緯度+經度。目標是創建空間索引以便能夠對其執行空間查詢。 因此,計劃是使用PostgreSQL + PostGIS。在PostgreSQL + PostGIS上插入數百萬行,轉換數據並處理它的高效方法
我的數據在CSV文件。我試圖使用自定義函數不插入重複,但經過幾天的處理,我放棄了。我找到了一種快速將數據加載到數據庫的方法:使用COPY只需不到2個小時。
然後,我需要在幾何格式上轉換緯度+經度。爲此,我只需要這樣做:
ST_SetSRID(ST_MakePoint(longi::double precision,lat::double precision),4326))
經過一番檢查後,我看到2億的點數,我有5000萬點。所以,我認爲最好的方法是創建一個將存儲所有點的表「TABLE_POINTS」和一個將使用point_key存儲資源的表「TABLE_RESOURCES」。
所以我需要從臨時表「TABLE_TEMP」填充「TABLE_POINTS」和「TABLE_RESOURCES」,而不是保留重複。
對於「點」我所做的:
INSERT INTO TABLE_POINTS (point)
SELECT DISTINCT ST_SetSRID(ST_MakePoint(longi::double precision,lat::double precision),4326))
FROM TABLE_RESOURCES
我不記得多少時間了,但我認爲這是幾個小時的事。
然後,填寫「資源」,我想:
INSERT INTO TABLE_RESOURCES (...,point_key)
SELECT DISTINCT ...,point_key
FROM TABLE_TEMP, TABLE_POINTS
WHERE ST_SetSRID(ST_MakePoint(longi::double precision,lat::double precision),4326) = point;
但同樣需要數天時間,有沒有辦法看到查詢多遠......
而且一些重要的東西,資源數量將繼續增長,目前應該像白天增加100K,因此應優化存儲以保持對數據的快速訪問。
所以,如果你有任何想法的加載或優化的存儲,歡迎您。