千万级别以上的地图兴趣点(POI)的快速查找测试
近期,終于有點時間,將之前的地圖興趣點爬蟲程序(http://blog.csdn.net/sparkexpert/article/details/51554813)完善了下,并用了七天的時間爬取了覆蓋全國的任一地區的所有類別的興趣點數據。
數據下載還是一個艱難的過程,不過幸運的是,采用了新方法之后,基本上很少需要人工去干預,當然也會有網絡的限制,但是基本上同時開辟5個下載通道,速度一直是嗖嗖的。
下載完成后,由于沒有直接處理,只是下載了JSON格式的文本數據,約占磁盤空間60G以上。而匯總的POI個數則有好幾千萬。(目前有些超出范圍還下載得不全,主要原因是網站服務端的限制,只允許下載前幾頁。當然這個也有辦法處理,只是目前沒有太計較于這些。)
那么下載數據之后,就在琢磨如何能夠快速查找數據,像百度谷歌等各種地圖網站加載數據是非??斓?#xff0c;那么如何去實現這個步驟呢。本文主要就是解決這個問題。
于是采用redis的HASH來進行每個興趣點的存儲。處理過程中會過濾掉一些重復的鍵值,但這個過濾是有條件的,如報刊亭,可能有很多同樣的鍵值,但是它們都是獨立的,就需要在這些后綴添加個0,1,2,.....
下附一張在redis客戶端查找的個數。這張圖只是在導入過程中隨便截的圖。實際上已經是好幾千萬了。
為了驗證查詢效率,進行了查找,一種是直接查找某個城市的某種類別的數據,如圖所示:
可以說,用redis來做地圖POI緩存,速度還是特別快的。在下面的狀態欄實時顯示的了查詢所占用的時間,非常少的時間就返回結果了。
為了更好地測試對全部信息的查找,如在不限制城市,不限制類別進行查找,其結果如下:
發現總的測試時間也就5秒多一些,這還是在一臺非常普通的PC上的測試。而真正要做地圖服務器,則可以采用大內存高性能服務器,完全可以做得毫秒級響應。
不過采用這種列式數據庫有個不好的地方,就是沒有辦法在上面直接做附近POI查詢。(這在鍵值上也沒有辦法做到。)這估計還得依靠以前近格網索引的辦法才能實現吧。(不過要是限制在某個城市,某種類別的,用redis肯定也能夠做到,畢竟在小數據上做查詢效率還是很高的)
總結
以上是生活随笔為你收集整理的千万级别以上的地图兴趣点(POI)的快速查找测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue框架---Vue入门
- 下一篇: 显示和隐藏div(注册页面用layui+