簡體   English   中英

MySQL Postgresql / PostGIS

[英]MySQL Postgresql / PostGIS

我有4億行分區的mysql表中的lat / lon坐標。 該表每分鍾增長2000條記錄,舊數據每隔幾周刷新一次。 我正在探索如何對這些數據進行空間分析。

大多數分析需要查找某個點是否在特定的緯度/經度多邊形中,或者哪個多邊形包含該點。

我看到了以下解決多邊形點(PIP)問題的方法:

  1. 創建一個mysql函數,它接受一個點和一個Geometry並返回一個布爾值。 簡單但不確定如何使用幾何來執行lat / lon坐標上的操作,因為Geometry假設平面而不是球體。

  2. 創建一個mysql函數,它接受自定義數據結構的一個點和標識符並返回一個布爾值。 多邊形頂點可以存儲在表格中,函數可以使用球形數學計算PIP。 大量的多邊形點可能會導致龐大的表和慢查詢。

  3. 將點數據保留在mysql中並在PostGIS中存儲多邊形數據,並使用app服務器通過將點作為參數在PostGIS中運行PIP查詢。

  4. 將應用程序從MySQL移植到Postgresql / PostGIS。 這將需要花費大量精力來重寫查詢和過程。 我仍然可以做到這一點,但Postgresql處理4億行有多好。 在Google上快速搜索“mysql 10十億行”會返回許多結果。 Postgres的相同查詢不返回相關結果。

想聽聽一些想法和建議。

一些想法。

首先,PostgreSQL和MySQL在性能調優方面完全不同。 因此,如果你去移植路線准備重新考慮你的索引策略。 PostgreSQL不僅具有比MySQL更靈活的索引,而且表格方法也非常不同,這意味着適當的索引策略與策略不同。 不幸的是,這意味着你可能會有點掙扎。 如果我可以給出建議,我會建議首先丟棄所有非關鍵索引,然后根據需要謹慎地添加它們。

第二點是,此時沒有人可能會給你大量的實用建議,因為我們不知道你的程序的內部。 在PostgreSQL中,你最好只索引你需要的東西,但你可以索引函數的輸出(這在這種情況下非常有用 ),你只能索引表的一部分。

我更像是一個PostgreSQL人而不是MySQL人,所以我認為你應該選擇PostgreSQL。 然而,不是告訴你為什么等等,並且讓你在這個規模上掙扎,我會告訴你一些我想看的東西,如果我試圖這樣做的話。

  • 功能指標
  • 為相關分析編寫索引的自己的函數
  • PostGIS非常棒,非常靈活

最后,在這個卷上切換db將是一個學習曲線,你需要做好准備。 但是,PostgreSQL可以很好地處理音量。

行數在這里是無關緊要的。 問題是索引可以完成多邊形工作的重點。

答案取決於多邊形的大小。

PostGIS可以非常快速地找到多邊形邊界框中的所有點。 然后,需要花費更多精力來確定該點是否實際位於多邊形內。

如果您的多邊形很小(小邊界框),查詢將是有效的。 如果您的多邊形很大或者形狀使得邊界框大,那么它的效率就會降低。

如果您的多邊形或多或少是靜態的,那么就有解決方法。 您可以將多邊形划分為較小的多邊形並重新創建idnex。 那么索引會更有效率。

如果您的多邊形實際上是多邊形,則第一步是使用ST_Dump將多邊形分割為多邊形,然后重新創建並在結果上構建索引。

HTH

尼克拉斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM