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