天天看點

PostgreSQL 電子圍欄的應用場景和性能(大疆、共享裝置、菜鳥。。。)

PostgreSQL , 電子圍欄 , 共享自行車 , 共享充電寶 , 共享xxx , 菜鳥 , 航空管制 , 無人飛行器 , pipelinedb , 流式計算

電子圍欄,這個在GIS應用中非常常見的詞。在很多業務場景中都可以使用:

電子圍欄的常見手段是圈出一塊,或者一些多邊形。當被監控對象在多邊形内或者多邊形外時(根據業務模型),作為一個判斷條件,觸發一些業務規則。

1、禁飛區

玩大疆無人機的話,你一定要知道哪裡是禁飛區,否則可能違法被抓,但是你可能并不知道哪裡是禁飛區,還有飛行高度的限制。

有了電子圍欄,可以在飛行器内置這樣的功能,你就可以放心的飛了。比如到達了禁飛區後,飛行器可以發出告警,禁止飛行。

<a href="https://github.com/digoal/blog/blob/master/201710/20171031_01_pic_001.jpg" target="_blank"></a>

2、共享單車還車點

共享單車亂擺放是個問題,原因是什麼地方都能還車。使用電子圍欄,可以限制使用者的還車點,隻允許使用者将自行車停在某個空間内,或不在某個空間内才能還車。

<a href="https://github.com/digoal/blog/blob/master/201710/20171031_01_pic_002.jpeg" target="_blank"></a>

3、汽車禁行區

例如,某些汽車,在某個時間段不允許出現在某個區域内。

例如限行車輛,例如危化品車輛、黃沙車、貨車等的行駛範圍。以往,我們隻能靠攝像頭、或者靠警力來管理。加入電子圍欄,一切都變得更簡單。

<a href="https://github.com/digoal/blog/blob/master/201710/20171031_01_pic_003.jpg" target="_blank"></a>

4、國界線

這個是有非常鮮明的地理屬性的,電子圍欄,結合流式計算,可以非常實時的發現異常。

<a href="https://github.com/digoal/blog/blob/master/201710/20171031_01_pic_004.jpg" target="_blank"></a>

5、山頭線

我記得小時候,我們那裡的班車線路都是承包的,誰要是敢亂拉客,車子可能是會被砸掉的。實際上這個也是一些商業邊界的問題,如果商業邊界涉及到地理資訊,通過電子圍欄,可以更加友善的實作邊界控制和管理。

6、遠端打卡,當你進入了辦公區域附近(電子圍欄)時,才允許打卡。

7、遠端辦公管理,公司可以劃定一些可以辦公的常用地的多邊形,當員工出了這個區域時,觸發事件。

8、公務用車、商用車輛的行駛區域管理,出了區域,可以觸發事件。

9、放牧管理,例如在大草原放養的動物,可以挂上GPS跟蹤器,劃定電子圍欄,出了區域,觸發事件。

10、假釋人員的管理,不在需要投入大量警力跟蹤假釋人員。當然人的管理更加複雜,因為跟蹤器可能更換。

11、... ...

試想一下,當每個對象都帶上空間屬性後,還有很多很多很多場景,可以設定電子圍欄。

空間資料的處理,将會是一片巨大的藍海。

圍欄除了空間屬性,還可以有其他屬性,PostgreSQL提供了btree_gist接口,可以對空間、标量字段建立聯合索引,提高性能。

<a href="https://www.postgresql.org/docs/10/static/btree-gist.html">https://www.postgresql.org/docs/10/static/btree-gist.html</a>

同時PostgreSQL還支援空間獨立排他限制,可以防止圍欄重疊。

<a href="https://www.postgresql.org/docs/10/static/ddl-constraints.html#ddl-constraints-exclusion">https://www.postgresql.org/docs/10/static/ddl-constraints.html#ddl-constraints-exclusion</a>

PostgreSQL 深耕空間資料管理數十年,一定能服務好這片業務,一起來為人類發展做出貢獻。

電子圍欄中,最常用的手段是點面判斷,對于共享單車業務,我們為了防止自行車亂停放,可以圈定可以換車、或者不能換車的點(視業務需求),建立很多的多邊形區域,當使用者還車時,上報車輛位置,同時判斷是不是落在可以換車的點,或者不能換車的點内。決定使用者是否可以在當地還車。

可能有千萬、甚至更多的多邊形面。

這個需求和菜鳥的配送排程類似,也有點面判斷的需求,下面是一個設計和性能測試

<a href="https://github.com/digoal/blog/blob/master/201708/20170803_01.md">《菜鳥末端軌迹 - 電子圍欄(解密支撐每天251億個包裹的資料庫) - 阿裡雲RDS PostgreSQL最佳實踐》</a>

1000萬個多邊形,根據位置查詢這個位置在哪個面裡面,或者有沒有面包含了這個點。

PostgreSQL單機可以達到<code>251億次/天</code>的點面判斷請求的性能。

繼續閱讀