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