PostgreSQL vs. MySQL:空間特徵比較
我們正在建構具有空間數據組件的 Web 應用程序。一開始,我們的空間數據比較將採用給定點並返回匹配的重疊空間多邊形。
話雖如此,我們的數據庫還有許多其他組件,其中包括您在一般關係數據庫中可以找到的所有典型內容。
在我們的項目中,我們必須選擇要使用的數據庫解決方案。
所有項目成員都更熟悉 MySQL 的實施和管理,但所有研究都表明 PostgreSQL 是更好的解決方案——尤其是在使用 postGIS 的空間數據方面。
我們期望(希望)我們的應用程序將體驗到大量並髮使用者的大量操作。
有使用 MySQL 作為具有空間數據組件的 RDBMS 經驗的人有任何長期建議/經驗嗎?
除了熟悉之外,使用 PostGIS 有什麼缺點嗎?
我無法談論與 MySQL 相比的優勢/劣勢,但 PostGIS 程式碼被廣泛認為是最好的(就速度/功能而言)和最成熟的(就測試/現實世界的曝光而言)之一) 可用的。
例如,FAA 的一些人在 PGEast 2010 上發表了關於將他們的機場數據庫(由 AeroNav 和其他人用於編譯圖表)轉換為 Oracle 的 Postgres/PostGIS 的演講。
avationDB站點也建立在 Postgres (8.0) 之上。
如果與 GIS 相關的查詢是您所做工作的核心,我的建議是使用 Postgres。它當然也可以處理您通常在關係數據庫中執行的所有其他操作。
在從 MySQL 切換方面,Postgres 背後的文件是一流的,Oostgres Wiki 中也有一個關於從 MySQL 切換到 Postgres的部分。
最初的學習曲線可能有點陡峭,您可能需要調整您的數據庫和任何儲存過程(如果您已經為 MySQL 編寫了它們),但這不是一項不可克服的任務。
您應該能夠在幾週內完成轉換,如果您建立了一個開發數據庫,您可能會在一個月內精通日常任務,並且確信您知道在哪裡查看手冊對於不那麼正常的人。
說到一些非常重要的事情。以下是 MySQL 和 MariaDB 中完全不存在的 PostGIS 支持的列表。
- SRID 在計算中,給你的點一個不同的 SRID,你會得到不同的值。這是 prop 聚合函式:據我所知 MySQL 不提供空間聚合函式
K 最近鄰:只有 PostGIS 支持 KNN。僅使用索引即可找到距任何點最近的點:無需計算與所有點的距離!er。MySQL 打破了規範,只檢查兩個值是否具有相同的 SRID。PostGIS 帶有一個pro4j 定義數據庫,以實現無縫的 SRID 感知。設置 SRID 並呼叫
ST_Transform
(MySQL 缺少的一個函式)將重新投影您的座標。在 MySQL 中,所有計算都假設 SRID 為 0,而不管實際的 SRID 值如何。SRID 0 表示一個無限平坦的笛卡爾平面,其軸沒有分配單位。將來,計算可能會使用指定的 SRID 值。要確保 SRID 0 的行為,請使用 SRID 0 創建幾何值。如果未指定 SRID,則 SRID 0 是新幾何值的預設值。
- 柵格:從柵格生成到提取,這裡有很多特徵。您可以生成熱圖等。
- Geography,PostGIS 支持一種完全不使用笛卡爾數學的非投影地理類型。它有一系列在扁球體上執行的相關函式。相反,MySQL 甚至無法在地理 SRS 中從兩點創建邊界框。
- 拓撲,不同於矢量幾何,拓撲幾何儲存節點和關係。移動一個節點,邊緣也會移動,你會得到一張新面孔。這也迫使邊緣被定向,這使得它們成為路由的理想選擇。作為一個子點,PgRouting所做的 100% 對 MySQL 來說是不可用的——所以你不能在它上面創建一個Google地圖或類似的東西。
- 地理編碼:contrib 目錄中有地理編碼器擴展,用於處理人口普查數據,以及用於安裝該數據的載入器。
- 地址標準化:有一個擴展可以處理標準化地址,以便於解析、儲存和比較。
- SQL-MM 特性,你根本不會在 MySQL 中找到
CIRCULARSTRING
COMPOUNDCURVE
CURVEPOLYGON
MULTICURVE
或。MULTISURFACE
- nd 線:PostGIS 可以支持 3dm、3dz 和 4d 形狀和點 MySQL根本不能
- MySQL 僅支持 r-tree 索引。PostGIS 支持 r-tree (gist/gin) 和 BRIN(用於大型幾何表)
- 聚合函式:據我所知 MySQL 不提供空間聚合函式
- K 最近鄰:只有PostGIS 支持 KNN。僅使用索引即可找到距任何點最近的點:無需計算與所有點的距離!
- 索引。PostgreSQL 允許您在空間索引(這是一個 gist/gin 索引)上儲存任何數據。例如,您可以將
year
(或其他非空間數據)和儲存geom
在同一個索引上。有關如何執行此操作的更多資訊,請參閱btree_gin
和。btree_gist
此外, PostGIS可能支持200 多個功能。
簡而言之,MySQL 不屬於 PostGIS,它知道這一點。PostGIS 是一頭野獸。只是想解釋一些這些東西。