王興元,徐 楠
(中電科申泰信息科技有限公司,江蘇 無錫 214000)
隨著智能終端的普及和其在各行業中的應用,智能終端定位數據的采集和上傳成為智能應用的基本需要。實際應用中,多需要對智能終端的定位進行高頻度的采集和上傳,并且能夠通過平臺對一個或多個智能終端歷史軌跡進行查詢。在項目開發時,對該定位功能的數據量沒有很好地進行評估,導致在開發完成后,該功能運行緩慢,結果展示雜亂,不能滿足實際使用需要。出現問題的主要原因在于當終端數量和采集上傳頻度到達一定量級時,數據量指數級增加。在查詢軌跡時,短時間內要處理太多數據,導致運行性能下降。文章主要研究如何從采集、傳輸、存儲和展示等多方面優化通信和展示的數據量,提高相關業務性能并提供更好的展示效果。
根據定位應用實際需要,智能終端最高的采集頻率要求為1 s/次,正常工作時間為8 h,每個終端每天采集和上傳的數據量為3 600×8=28 800 條。整個系統含1 萬個終端,則每天需要增加288 000 000條數據。當需要對某終端某月軌跡進行查看時,需要拉取并展示的數據為28 800×30=864 000條。即使一次只查看一天的歷史軌跡,也是28 800 條記錄。當上萬個坐標點在電子地圖上繪制時,不光需要花費大量的時間和資源,而且展示效果很差,無法讓使用者直觀地了解真實軌跡情況。
針對這種情況,結合實際工作場景,將整體數據量減少到原來的1/10 ~1/100,將查詢反饋時間縮短到3 s 以下,并優化軌跡展示方法,使展示的軌跡更加直觀和有效。
對于智能終端的定位信息采集功能,采集到的信息包括時間戳、經緯度、定位方式等。智能終端定位方式主要由GPS、LBS、WiFi 定位等組成。在采集和上傳時,需要保留這些信息,在分析和展示時需要用到。
智能終端在實際工作中由工作人員持有,記錄工作人員在工作中的實時位置。工作人員行動方式有步行、騎行、汽車、地鐵、火車等。當采用不同的交通工具時,移動速度存在很大差異。同時工作人員的工作模式也有很多種,有可能在一個位置長時間停留,也可能快速轉移到其他位置。
當長時間在同一個位置時,智能終端采集到的坐標點由于本身誤差和精度的原因,可能會在較小范圍內不停變化,然而此時可能實際上工作人員一直沒有移動,在這種情況下,從采集角度可以利用智能終端自身的傳感器和設計優化算法,過濾無意義的坐標點。智能終端通過自帶的陀螺儀傳感器,判斷當前的移動方向和速度。如果移動速度過小,例如小于1 m/s,則可以認為當前位置沒有發生變化,此時沿用上一次的坐標位置即可,不需要重新采集坐標。這樣可以避免重新采集造成的坐標晃動情況。由于智能終端攜帶的民用級GPS 誤差最小也有5 ~10 m,因此這種過濾不會影響實際定位顯示的精度。在上傳時,這種情況也可以適當放大上傳間隔,例如10 s 上傳一次,一次包含10 個時間戳和一個坐標點信息,以減少上傳數據量。
當工作人員快速移動時,智能終端高頻采集的坐標都是有效的。此時高頻采集的優勢在繪制軌跡時能夠發揮作用。但由于高速移動時,移動網絡會不斷切換基站,則需要對采集的數據進行緩存,當網絡情況不佳時,對發送失敗的數據進行保留,當恢復網絡時,進行補發。為了減少網絡通信次數,需要優化通信協議,在一個通信包中包含多個坐標位置,同時標注坐標點的性質,是歷史坐標還是實時坐標。
考慮到系統內需要大量數據查詢的需要,數據庫采用MySQL 關系型數據庫,而不是時序數據庫。但是由于坐標數據龐大,所以對定位數據采用分表保存的方式,每個終端根據ID 單獨生成一張數據庫表,軌跡數據表的名稱由“GPS_”+終端ID 自動組成,在創建終端信息時自動生成該數據表。即使按照最大理論數據量,單終端3 年的坐標信息條目為28 800×365×3 = 31 536 000,也在單表的容納范圍內。數據保存內容包括坐標時間戳(double)、經度(double)、緯度(double)、定位方式(GPS、LBS、WiFi)、接收時間戳(double)等。
通過這種方式存儲的數據,實際數據量還是較為龐大,當系統使用一定時間后,單表存儲的數據擴大到幾百萬甚至上千萬條數據之后,單次查詢就可能需要幾秒甚至十幾秒,影響系統的查詢性能。針對這種情況,有2 種優化方案:第一種是通過坐標的時間戳建立索引,雖然在保存時會降低速度,但是可以提高查詢速度;第二種是優化存儲方法,通過精簡相同坐標點的條目,實際上減少存儲的數據量。
第一種方法不需要細說,這里著重考慮第二種優化方法。配合采集采用的優化方案,當一段時間內,坐標點沒有變化時,上傳時不再多次上報相同的坐標點,而是將多個采集結果通過一條信令發送。此時作為接收服務端,收到一個時間段內的多個時間戳和同一個定位信息。考慮到展示軌跡時,短時間內同一個坐標點也不需要反復繪制,因此可以增加數據表的列,單條記錄保存更多信息,減少總的行數。對于坐標時間戳,將其分解成2 個,分別是坐標開始時間戳和坐標結束時間戳,用于記錄該條相同坐標信息的首次采集時間和末次采集時間,增加一個采樣次數(int),記錄該時段內,總共進行了多少次相同坐標的采樣。通過這種方法與智能終端的采集優化聯動,可以用一條記錄保存多個采樣記錄。通過實際調整,甚至可以在一條記錄中保存10 ~100 條采樣結果,而不會影響查詢和展示的效果。
查詢由展示端發起,申請某終端在某時間段內的定位點列表。經過采集和存儲的優化之后,在查詢服務接口需要對查詢出來的數據進行處理,才可以發送到展示端。按照之前的計算,單終端每天的歷史軌跡點最大可能有28 800 個,按1/10 計算,還可能存在將近3 000 條記錄,如果3 000 條記錄不作處理進行傳輸,實際上還是較大的一個數據量,并且不利于展示端展示。因此從數據庫中取出數據后,在傳輸給展示端前,仍然有優化的必要和空間。
之前說到,采集端和接收存儲服務對相同坐標點的采樣進行了整合過濾,然而由于實效性的需要,這個整合不能等待太多采樣,否則會影響系統的追蹤、定位等功能,但是在軌跡展示時,可以對查詢出的歷史數據進行再次整合。當按照時間排列的坐標記錄從數據庫中取出并存放到內存隊列后,按照先后順序,對隊列中的記錄進行比對。比對判斷的因素包括時間戳和坐標值。當先后兩條連續坐標記錄的結束時間和開始時間的時間戳相差超過一定值,比如5 min 時,不考慮整合。當時間戳相差不大時,判斷兩個坐標的差異值,如果這兩個坐標之間的直線距離小于10 m(假設區域內地圖為平面,將經緯度折算到米,然后再使用三角函數計算得出),即在GPS 精度范圍內,則可以整合到一起,保留前一條記錄,將后一條記錄的結束時間作為新的結束時間,將兩條記錄的采樣數相加作為新的采樣數,然后去掉后一條信息,并使用修改后的新記錄繼續與后續的記錄進行比對和整合,直到最后一條。通過整合,預計還能減少一半的記錄,在保障展示內容的前提下,可有效減少傳輸和展示的數據量。
展示優化主要考慮的是查詢出的軌跡點,在地圖上繪制時的策略,包括繪制坐標點時的動畫效果和坐標點包含的展示內容。經過查詢優化后,需要繪制的坐標點已經大大減少,然而坐標點需要展示的內容增加了。
展示端獲取到的定位隊列數據包括開始時間戳、結束時間戳、經度、緯度、定位方式、采樣數量等。為了直觀顯示當時的運動路線,需要在繪制時根據時間先后,預留等待(sleep)時間,形成動畫效果。比如預計用10 s 動畫顯示8 h 的歷史軌跡,則要計算每0.1 s 需要展示出的時間段為8 h×3 600/100 = 288 s。那么從第一個坐標點開始,連續繪制288 s 內的坐標點數據,然后等待0.1 s,再繪制下一個288 s,繼續等待,如此循環直到繪制完最后一個坐標點信息,這樣可以呈現出人員行動時的動態效果。
對于每個顯示的坐標點,需顯示該點的第一個和最后一個時間戳、坐標的采樣方式及在該坐標的采樣點數量,通過這些數據可以讓管理人員直觀地了解人員在該坐標停留時間。
對于連續的坐標點之間,需要對間隔時間進行判斷。如果連續的2 個點的時間小于一定值,則用實線連接;如果超過該值,則不需要連接。如此,實際上整天的軌跡會由多個軌跡線的集合組成,中間可能因為網絡信號或者GPS 信號不佳,或者其他原因,導致軌跡線沒有全部連接。
由于不同采樣方式的精度不同,例如:GPS 精度在5 ~10 m;LBS 則根據基站分布,在千米級;WiFi 定位則不確定具體精度。因此,為了區別對待,對連續的GPS 定位點之間采用實線連接,對于前后2 個點不全是GPS 的,則采用虛線連接,以表示該坐標精度有限,僅供參考。
通過上述多個模塊對定位信息的優化方案設計了相應的算法,并通過實際測試,對優化結果進行了模擬。模擬結果表明,智能終端的續航比原設計提升了約30%,上傳通信數據包減少了28%~74%(運動模式不同,差異較大);存儲數據條數比原設計減少了約80%;對單個終端單獨一天的歷史軌跡查詢反饋速度降低到2 s 以內;展示效果清晰流暢,不影響頁面其他功能使用。整個功能設計能夠滿足實際工程需要。
整套優化方案全盤考慮了終端采集上傳、數據庫存儲、查詢接口處理以及頁面展示等多個功能模組的實際需要,通過整合,過濾掉近似點,減少通信和存儲的數據量,減少展示的資源,有效地實現了高頻定位點大量數據的優化處理,從工程應用角度解決了簡單架構下大數據量的應用問題,簡化了部署架構,節約了工程造價。希望本文設計能夠給類似規模的數據應用帶來啟發。