後でユーザー検索に使用したい大量のデータがあります。現在、2 億のリソース (~50GB) があります。それぞれについて、緯度+経度があります。目標は、空間インデックスを作成して、空間クエリを実行できるようにすることです。そのため、PostgreSQL + PostGIS を使用する計画です。
私のデータはCSVファイルにあります。重複を挿入しないようにカスタム関数を使用しようとしましたが、何日も処理した後、あきらめました。データベースにすばやくロードする方法を見つけました.COPYを使用すると、2時間もかかりません.
次に、Geometry 形式で緯度 + 経度を変換する必要があります。そのためには、次のことを行う必要があります。
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;
しかし、やはり数日かかり、クエリがどこまで進んでいるかを確認する方法はありません...
また、重要なことは、リソースの数が増え続けることです。現在、1 日あたり 100K ほど追加されているはずです。そのため、データへの高速アクセスを維持するためにストレージを最適化する必要があります。
そのため、ストレージのロードまたは最適化についてアイデアがあれば、大歓迎です。