文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/前端
該方案須要知足如下幾點:數據庫
支持人員當天軌跡快速獲取(查詢)。安全
支持軌跡高併發讀、寫(實際項目中軌跡高併發讀狀況不多)。微信
保證全部(歷史)軌跡數據的完整性、不丟失。併發
海量數據高效存儲、查詢,這個場景自己是比較適合NoSQL數據庫運用的,可是考慮到該方案實施的難度(對工程實施、維護、研發成本),僅僅爲了解決軌跡而採用該方案不是一個最好的選擇。高併發
這裏,咱們引用日誌的概念。設想將天天產生的軌跡以日誌文本形式來存儲,定義好日誌的存儲規則,那麼咱們的軌跡查詢將變化成軌跡日誌文件的檢索和解析,磁盤檢索的效率將大大提升。性能
該方案涉及到的核心問題即是,軌跡日誌的存儲規則。spa
針對天天生成的軌跡創建一個以日期命名的文件夾,應該是能夠確定的。日誌
可是,在日期文件夾中,是針對每一個時段創建一個軌跡文件,仍是針對每一個人創建一個日誌文件則是須要咱們進一步討論的。blog
優勢:
a.文件數量少,最多24個,若是保持住每一個時段的日誌文件鏈接,寫入操做高併發支持會很好。
b.針對以時間段查詢、而且不分人員獲取全部軌跡的場景,十分合適,適合GPS廠家的需求。
缺點:
a.咱們的運用場景更多的是查詢單我的員當天的全部軌跡,若是按照這個規則,那麼軌跡查詢得遍歷24個文件,還得解析各文件獲取對應人員的軌跡。
優勢:
a.很符合咱們的業務場景,每次單人單天軌跡查詢時,只須要按照軌跡存儲規則就能夠獲取到該人員的對應軌跡文件。
b.針對前端軌跡展現業務,能夠將軌跡文件視作靜態資源而進行靜態伺服,前端直接訪問解析。
c.針對後臺進行軌跡分析,因爲該文件大小很小,加載進入後臺進行分析也沒有IO瓶頸。
缺點:
a.因爲人員通常會比較多,若是分人存儲,假設有1000我的,那麼等於有1000個日誌文件。高頻率對1000個文件分別進行寫入操做,可能出現IO瓶頸。
通過認真分析,依然選擇分天分人規則,緣由有如下幾點:
a.符合咱們的業務場景運用。
b.針對高併發讀有很大優點。
c.雖然理論上其有日誌文件多、高併發寫的劣勢。可是這兩點均可以進行避免。
日誌文件多的問題:因爲日誌自己只是作記錄使用,能夠再製定一個定時清理的任務,好比一個月清理一次,那麼即便1000我的,一個月3W個日誌分佈在30個日誌文件夾,不是不能接受的。
高併發寫的問題:即便咱們規定手機上報時間是5S,手機也並非一個實時寫入的過程,而是還有一個批量上傳的參數。因此其更多是兩分鐘或者更久批量上傳一次數據,那麼咱們後臺讀取文件、寫入批量內容、關閉該文件,對IO的衝擊會大大減少。而且,因爲是不一樣文件的操做,排隊等待一個文件操做的問題也會大大減少。
針對咱們以前的歷史軌跡表,應該繼續保留。日誌文件自己的安全性是不夠的,若是出現誤刪除等問題,軌跡數據將很容易丟失。
因此歷史軌跡表依然保存,按期作數據備份遷移。
目前的實時軌跡存儲邏輯爲,手機端批量上傳GPS時,將該人員離上傳時間最近的GPS點保存(saveorupdate)至tc_patrol_state表中。
該業務邏輯在多個已有項目中沒有發現性能瓶頸,能夠保留。
a.手機端上報軌跡,增長對軌跡日誌文件的操做。
b.GIS端的前段軌跡展現、後臺軌跡信息挖掘,作相應修改。
c.MIS端若是有跟軌跡表相關聯的業務,須要作對應修改。
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^