一種位置服務(wù)的實(shí)現(xiàn)方法、裝置,及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例公開了一種位置服務(wù)的實(shí)現(xiàn)方法、裝置,及系統(tǒng),其中方法的實(shí)現(xiàn)包括:在接收到包含目標(biāo)位置信息的定位請(qǐng)求后,確定目標(biāo)網(wǎng)格;所述目標(biāo)網(wǎng)格包括所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格,以及與所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格距離在設(shè)定范圍內(nèi)的網(wǎng)格;所述網(wǎng)格是由地圖劃分正方形得到;確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;在位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2;從確定的位置服務(wù)存儲(chǔ)設(shè)備中,查詢與所述目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息,并向所述定位請(qǐng)求的發(fā)送方發(fā)送查詢到的終端信息。可以提高服務(wù)器的響應(yīng)速度,降低計(jì)算壓力。
【專利說明】—種位置服務(wù)的實(shí)現(xiàn)方法、裝置,及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信【技術(shù)領(lǐng)域】,特別涉及一種位置服務(wù)的實(shí)現(xiàn)方法、裝置,及系統(tǒng)。
【背景技術(shù)】
[0002]位置服務(wù)(LBS, Locat1n Based Services)又稱定位服務(wù),LBS是由移動(dòng)通信網(wǎng)絡(luò)和衛(wèi)星定位系統(tǒng)結(jié)合在一起提供的一種增值業(yè)務(wù),通過一組定位技術(shù)獲得移動(dòng)終端的位置信息(如經(jīng)緯度坐標(biāo)數(shù)據(jù)),提供給移動(dòng)用戶本人或他人以及通信系統(tǒng),實(shí)現(xiàn)各種與位置相關(guān)的業(yè)務(wù)。實(shí)質(zhì)上是一種概念較為寬泛的與空間位置有關(guān)的新型服務(wù)業(yè)務(wù)。
[0003]位置服務(wù)可以被應(yīng)用與不同的領(lǐng)域,例如:健康、工作、個(gè)人生活等。此服務(wù)可以用來辨認(rèn)一個(gè)人或物的位置,例如發(fā)現(xiàn)最近的取款機(jī)或朋友同事當(dāng)前的位置,也能透過客戶目前所在的位置提供直接的手機(jī)廣告,并包括個(gè)人化的天氣信息提供,甚至提供本地化的游戲。
[0004]當(dāng)前,基于個(gè)人消費(fèi)者需求的智能化,位置信息服務(wù)將伴隨定位技術(shù)和無線上網(wǎng)技術(shù)的發(fā)展,需求呈大幅度增長(zhǎng)趨勢(shì)。LBS不但可以提升企業(yè)運(yùn)營(yíng)與服務(wù)水平,也能為車載定位技術(shù)的用戶提供了更多樣化的便捷服務(wù)。定位技術(shù)用戶,從地址點(diǎn)導(dǎo)航到興趣點(diǎn)服務(wù),再到實(shí)時(shí)路況技術(shù)的應(yīng)用,不僅可引導(dǎo)用戶找到附近的產(chǎn)品和服務(wù),并可獲得更高的便捷性和安全性。
[0005]目前位置服務(wù)已經(jīng)應(yīng)用到車載定位技術(shù)產(chǎn)品上。通過對(duì)定位技術(shù)市場(chǎng)了解,車載導(dǎo)航在深化LBS應(yīng)用的過程中,已將“互動(dòng)”的理念融入其中,“照片導(dǎo)航”、“主題地圖”等獨(dú)有功能模塊的增加和延展,不僅讓用戶可以享受全新的個(gè)性導(dǎo)航服務(wù),直接通過導(dǎo)航儀查詢到全國(guó)各地的著名景點(diǎn)、酒店、飯店、加油站等豐富資訊,一鍵導(dǎo)航,同時(shí)用戶可以基于網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)下載、上傳,與其他用戶實(shí)現(xiàn)互動(dòng)交流,這將成為未來的發(fā)展方向之一。而通過定位技術(shù),也可以為個(gè)人用戶或集團(tuán)用戶提供特殊信息報(bào)警服務(wù)。位置服務(wù)器也已經(jīng)被用在終端用戶尋找周圍用戶,例如:尋找附近的人進(jìn)行社交活動(dòng)、尋找附近與自己有關(guān)聯(lián)關(guān)系(例如相同愛好、玩相同游戲等)的人。
[0006]目前基于位置服務(wù)的系統(tǒng),通常采用如圖1所示的結(jié)構(gòu),位置服務(wù)器接收來自終端的地理位置信息,將地理位置信息存放到位置服務(wù)存儲(chǔ)設(shè)備I?η ;如果位置服務(wù)器需要解析地理位置信息,還可以將地理位置信息發(fā)送給地圖服務(wù)器,并從地圖服務(wù)器獲得上述地理位置信息的解析結(jié)果。
[0007]目前,地理位置信息使用經(jīng)緯度來表示和存儲(chǔ),這樣可以方便的定位到終端的位置,具有精確的優(yōu)點(diǎn),但是在定位附近終端的過程中,使用經(jīng)緯度計(jì)算距離計(jì)算量較大,導(dǎo)致位置服務(wù)器響應(yīng)速度很低。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實(shí)施例提供了一種位置服務(wù)的實(shí)現(xiàn)方法、裝置,及系統(tǒng),用于減少距離計(jì)算量,提高位置服務(wù)器的響應(yīng)速度。
[0009]本發(fā)明實(shí)施例提供了一種位置服務(wù)的實(shí)現(xiàn)方法,包括:
[0010]在接收到包含目標(biāo)位置信息的定位請(qǐng)求后,確定目標(biāo)網(wǎng)格;所述目標(biāo)網(wǎng)格包括所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格,以及與所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格距離在設(shè)定范圍內(nèi)的網(wǎng)格;所述網(wǎng)格是由地圖劃分正方形得到;
[0011]確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;在位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;
[0012]從確定的位置服務(wù)存儲(chǔ)設(shè)備中,查詢與所述目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息,并向所述定位請(qǐng)求的發(fā)送方發(fā)送查詢到的終端信息。
[0013]本發(fā)明實(shí)施例還提供了另一種位置服務(wù)的實(shí)現(xiàn)方法,包括:
[0014]位置服務(wù)存儲(chǔ)設(shè)備接收位置服務(wù)器的查詢請(qǐng)求,所述查詢請(qǐng)求包含有待查詢的目標(biāo)網(wǎng)格;
[0015]在所述位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;所述網(wǎng)格是由地圖劃分正方形得到;
[0016]使用所述目標(biāo)網(wǎng)格的編號(hào)查詢并獲得與所述待查詢的目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息;
[0017]將獲得的終端信息發(fā)送給所述位置服務(wù)器。
[0018]本發(fā)明實(shí)施例還提供了一種位置服務(wù)器,包括:
[0019]網(wǎng)格確定單元,用于在接收到包含目標(biāo)位置信息的定位請(qǐng)求后,確定目標(biāo)網(wǎng)格;所述目標(biāo)網(wǎng)格包括所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格,以及與所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格距離在設(shè)定范圍內(nèi)的網(wǎng)格;所述網(wǎng)格是由地圖劃分正方形得到;
[0020]設(shè)備確定單元,用于確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;在位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;
[0021]查詢單元,用于從確定的位置服務(wù)存儲(chǔ)設(shè)備中,查詢與所述目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息;
[0022]信息發(fā)送單元,用于向所述定位請(qǐng)求的發(fā)送方發(fā)送查詢到的終端信息。
[0023]本發(fā)明實(shí)施例還提供了一種位置服務(wù)存儲(chǔ)設(shè)備,包括:
[0024]請(qǐng)求接收單元,用于接收位置服務(wù)器的查詢請(qǐng)求,所述查詢請(qǐng)求包含有待查詢的目標(biāo)網(wǎng)格;
[0025]數(shù)據(jù)存儲(chǔ)單元,用于以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;所述網(wǎng)格是由地圖劃分正方形得到;
[0026]查詢單元,用于使用所述目標(biāo)網(wǎng)格的編號(hào)查詢并獲得與所述待查詢的目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息;
[0027]信息發(fā)送單元,用于將獲得的終端信息發(fā)送給所述位置服務(wù)器。
[0028]一種位置服務(wù)系統(tǒng),包括:位置服務(wù)器和位置服務(wù)存儲(chǔ)設(shè)備,位置服務(wù)器和位置服務(wù)存儲(chǔ)設(shè)備以可通信方式連接,所述位置服務(wù)器為本發(fā)明實(shí)施例提供的任意一項(xiàng)的位置服務(wù)器,所述位置服務(wù)存儲(chǔ)設(shè)備為本發(fā)明實(shí)施例提供的任意一項(xiàng)的位置服務(wù)存儲(chǔ)設(shè)備。
[0029]從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):采用網(wǎng)格的方式將地理位置進(jìn)行劃分,并采用劃分后的網(wǎng)格進(jìn)行位置信息存儲(chǔ);在位置服務(wù)過程中不必使用經(jīng)緯度進(jìn)行距離計(jì)算減少計(jì)算量,從而可以提高服務(wù)器的響應(yīng)速度。另外,在為位置服務(wù)存儲(chǔ)設(shè)備分配網(wǎng)格時(shí),使用的最小粒度比網(wǎng)格要大,這樣可以使更多的相鄰網(wǎng)格分配到同一個(gè)位置服務(wù)存儲(chǔ)設(shè)備,使得確定的目標(biāo)網(wǎng)格集中在少數(shù)幾個(gè)位置服務(wù)存儲(chǔ)設(shè)備內(nèi),從而減少對(duì)位置服務(wù)存儲(chǔ)設(shè)備的調(diào)用,降低位置服務(wù)存儲(chǔ)設(shè)備的計(jì)算壓力,從而進(jìn)一步的提升真?zhèn)€位置服務(wù)的系統(tǒng)性能。
【專利附圖】
【附圖說明】
[0030]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0031]圖1為現(xiàn)有技術(shù)系統(tǒng)架構(gòu)示意圖;
[0032]圖2為本發(fā)明實(shí)施例方法流程示意圖;
[0033]圖3為本發(fā)明實(shí)施例方法流程示意圖;
[0034]圖4為本發(fā)明實(shí)施例系統(tǒng)結(jié)構(gòu)示意圖;
[0035]圖5為本發(fā)明實(shí)施例空間數(shù)據(jù)模型示意圖;
[0036]圖6為本發(fā)明實(shí)施例格子的劃分示意圖;
[0037]圖7為本發(fā)明實(shí)施例格子搜索示意圖;
[0038]圖8為本發(fā)明實(shí)施例數(shù)據(jù)的存儲(chǔ)示意圖;
[0039]圖9為本發(fā)明實(shí)施例上報(bào)玩家地理信息的方法流程示意圖;
[0040]圖10為本發(fā)明實(shí)施例存放和刪除信息的系統(tǒng)結(jié)構(gòu)示意圖;
[0041]圖11為本發(fā)明實(shí)施例刪除playerID3的數(shù)據(jù)查找過程示意圖;
[0042]圖12為本發(fā)明實(shí)施例hash表結(jié)構(gòu)示意圖;
[0043]圖13為本發(fā)明實(shí)施例playerID到GridGID的反向索引結(jié)構(gòu)示意圖;
[0044]圖14為本發(fā)明實(shí)施例基于bucket (桶)的定時(shí)清理示意圖;
[0045]圖15為本發(fā)明實(shí)施例的位置服務(wù)器的結(jié)構(gòu)示意圖;
[0046]圖16為本發(fā)明實(shí)施例的位置服務(wù)器的結(jié)構(gòu)示意圖;
[0047]圖17為本發(fā)明實(shí)施例的位置服務(wù)器的結(jié)構(gòu)示意圖;
[0048]圖18為本發(fā)明實(shí)施例的位置服務(wù)器的結(jié)構(gòu)示意圖;
[0049]圖19為本發(fā)明實(shí)施例的位置服務(wù)存儲(chǔ)設(shè)備的結(jié)構(gòu)示意圖;
[0050]圖20為本發(fā)明實(shí)施例的位置服務(wù)存儲(chǔ)設(shè)備的結(jié)構(gòu)示意圖;
[0051]圖21為本發(fā)明實(shí)施例的位置服務(wù)存儲(chǔ)設(shè)備的結(jié)構(gòu)示意圖;
[0052]圖22為本發(fā)明實(shí)施例的位置服務(wù)存儲(chǔ)設(shè)備的結(jié)構(gòu)示意圖;
[0053]圖23為本發(fā)明實(shí)施例的位置服務(wù)系統(tǒng)結(jié)構(gòu)示意圖;
[0054]圖24為本發(fā)明實(shí)施例的服務(wù)器的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0055]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0056]本發(fā)明實(shí)施例提供了一種位置服務(wù)的實(shí)現(xiàn)方法,如圖2所示,包括:
[0057]201:在接收到包含目標(biāo)位置信息的定位請(qǐng)求后,確定目標(biāo)網(wǎng)格;上述目標(biāo)網(wǎng)格包括上述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格,以及與上述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格距離在設(shè)定范圍內(nèi)的網(wǎng)格;上述網(wǎng)格是由地圖劃分正方形得到;
[0058]在本發(fā)明實(shí)施例中,網(wǎng)格由地圖劃分而來,也即是說網(wǎng)格與實(shí)際的地理位置是對(duì)應(yīng)的。網(wǎng)格的邊長(zhǎng)實(shí)際上就是這個(gè)網(wǎng)格對(duì)應(yīng)地理位置的邊長(zhǎng)。網(wǎng)格邊長(zhǎng)越小,最終定位時(shí)的精度將會(huì)越高,網(wǎng)格越大則存儲(chǔ)的網(wǎng)格數(shù)量越少,查找所用的時(shí)間則可能越少。具體的長(zhǎng)度本發(fā)明實(shí)施例不予限定,推薦可以使用10m作為邊長(zhǎng)。
[0059]202:確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;在位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為上述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;
[0060]這里M的具體取值,可以由技術(shù)人員設(shè)定。若查找周圍最大2KM范圍內(nèi)的終端信息,那么可以將這個(gè)值設(shè)定為100或者50等值,具體取值本發(fā)明實(shí)施例不予限定。
[0061]203:從確定的位置服務(wù)存儲(chǔ)設(shè)備中,查詢與上述目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息,并向上述定位請(qǐng)求的發(fā)送方發(fā)送查詢到的終端信息。
[0062]本發(fā)明實(shí)施例,采用網(wǎng)格的方式將地理位置進(jìn)行劃分,并采用劃分后的網(wǎng)格進(jìn)行位置信息存儲(chǔ);在位置服務(wù)過程中不必使用經(jīng)緯度進(jìn)行距離計(jì)算減少計(jì)算量,從而可以提高服務(wù)器的響應(yīng)速度。另外,在為位置服務(wù)存儲(chǔ)設(shè)備分配網(wǎng)格時(shí),使用的最小粒度比網(wǎng)格要大,這樣可以使更多的相鄰網(wǎng)格分配到同一個(gè)位置服務(wù)存儲(chǔ)設(shè)備,使得確定的目標(biāo)網(wǎng)格集中在少數(shù)幾個(gè)位置服務(wù)存儲(chǔ)設(shè)備內(nèi),從而減少對(duì)位置服務(wù)存儲(chǔ)設(shè)備的調(diào)用,降低位置服務(wù)存儲(chǔ)設(shè)備的計(jì)算壓力,從而進(jìn)一步的提升真?zhèn)€位置服務(wù)的系統(tǒng)性能。另外,還可以將網(wǎng)格可以設(shè)置得較小,提高定位精度,并減少因單個(gè)網(wǎng)格位置信息太多導(dǎo)致的沖突。
[0063]在本發(fā)明實(shí)施例中,位置服務(wù)存儲(chǔ)設(shè)備中的位置信息可以來源于其他服務(wù)器搜集的信息也可以來源于位置服務(wù)器直接收集的信息,本發(fā)明實(shí)施例提供了如何獲得并存儲(chǔ)終端的位置信息的具體實(shí)現(xiàn)方案,具體如下:進(jìn)一步地,上述方法,還包括:
[0064]接收終端上報(bào)的位置信息以及終端信息;確定上述位置信息所屬的網(wǎng)格,以及確定的網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;
[0065]將上述終端上報(bào)的位置信息以及終端信息,發(fā)送給確定的位置服務(wù)存儲(chǔ)設(shè)備進(jìn)行存儲(chǔ)。
[0066]本發(fā)明實(shí)施例還提供了優(yōu)選的存儲(chǔ)方案,并且防止存儲(chǔ)的數(shù)據(jù)發(fā)生重疊導(dǎo)致數(shù)據(jù)沖突的情況;具體如下:在位置服務(wù)存儲(chǔ)設(shè)備中還以終端信息為關(guān)鍵字以網(wǎng)格編號(hào)為值進(jìn)行數(shù)據(jù)存儲(chǔ),上述方法還包括:
[0067]向確定的位置服務(wù)存儲(chǔ)設(shè)備以外的其他位置服務(wù)存儲(chǔ)設(shè)備發(fā)送位置信息刪除指令,刪除存儲(chǔ)的上述終端信息對(duì)應(yīng)的位置信息。
[0068]在本發(fā)明實(shí)施例中,向確定的位置服務(wù)存儲(chǔ)設(shè)備以外的其他位置服務(wù)存儲(chǔ)設(shè)備發(fā)送位置信息刪除指令,具體的發(fā)送方案可以采用廣播的方式發(fā)送,這樣可以保持終端在服務(wù)器一側(cè)的位置信息的唯一性。
[0069]在本發(fā)明實(shí)施例中網(wǎng)格劃分后可以進(jìn)行編號(hào),然后采用哈希算法對(duì)網(wǎng)格在位置服務(wù)存儲(chǔ)設(shè)備間進(jìn)行分配,從而提升查詢時(shí)候的查詢速度,另外也方便后續(xù)位置服務(wù)存儲(chǔ)設(shè)備的擴(kuò)展,具體如下:上述網(wǎng)格由地圖劃分正方形得到,所有網(wǎng)格的網(wǎng)格編號(hào)按照地理位置順序編號(hào);所有在位置服務(wù)存儲(chǔ)設(shè)備中最小粒度的網(wǎng)格與位置服務(wù)存儲(chǔ)設(shè)備的所屬關(guān)系符合哈希算法的規(guī)則;
[0070]上述確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備包括:使用目標(biāo)網(wǎng)格進(jìn)行哈希查找確定標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備。
[0071]本發(fā)明實(shí)施例,雖然可以減少位置服務(wù)設(shè)備的調(diào)用,但是并不能保證在一個(gè)位置服務(wù)存儲(chǔ)設(shè)備完成位置服務(wù)器功能,因此目標(biāo)網(wǎng)格是可以分布于多個(gè)位置服務(wù)存儲(chǔ)設(shè)備的,本發(fā)明實(shí)施例基于此給出了進(jìn)一步的實(shí)現(xiàn)方案如下:進(jìn)一步地,若目標(biāo)網(wǎng)格分布于兩個(gè)或兩個(gè)以上的位置服務(wù)存儲(chǔ)設(shè)備;上述方法還包括:將從位置服務(wù)存儲(chǔ)設(shè)備查詢到的終端信息進(jìn)行組包。
[0072]由于終端用戶可能會(huì)不停的通過終端發(fā)送定位的請(qǐng)求,如果每次定位請(qǐng)求都進(jìn)行定位處理,將會(huì)給服務(wù)器造成較大的壓力;另外,通常來說間隔時(shí)間很短的情況下,定位的結(jié)果通常也極少發(fā)生變化,因此這類頻繁的定位也是沒有必要的。本發(fā)明實(shí)施例為了降低服務(wù)器的壓力,減少不必要的定位操作,提出了如下解決方案:若再次接收到來自上述終端的定位請(qǐng)求,上述方法還包括:確定與前次定位請(qǐng)求的時(shí)間間隔是否超過預(yù)定閾值,若為超過預(yù)定閾值,則拒絕執(zhí)行定位。
[0073]在本發(fā)明實(shí)施例中,將地圖劃分為網(wǎng)格,網(wǎng)格的邊長(zhǎng)越短,則定位的精度越高,但是計(jì)算量越大;網(wǎng)格的邊長(zhǎng)越短,則計(jì)算量越小響應(yīng)速度越快;為了綜合這兩者的優(yōu)點(diǎn),本發(fā)明實(shí)施例提供了如下解決方案:上述確定目標(biāo)網(wǎng)格包括:首先在測(cè)試網(wǎng)格中查詢包含終端信息的測(cè)試網(wǎng)格,上述測(cè)試網(wǎng)格是與上述目標(biāo)位置信息對(duì)應(yīng)的測(cè)試網(wǎng)格,測(cè)試網(wǎng)格由地圖劃分正方形得到,且邊長(zhǎng)大于上述網(wǎng)格;確定查詢到的測(cè)試網(wǎng)格中包含的網(wǎng)格為目標(biāo)網(wǎng)格。
[0074]在本發(fā)明實(shí)施例中,測(cè)試網(wǎng)格的邊長(zhǎng)較大,這樣可以首先使用大網(wǎng)格來過濾掉目標(biāo)網(wǎng)格中沒有位置信息的網(wǎng)格,避免不必要的查找,從而減少查找量,提高系統(tǒng)響應(yīng)速度。
[0075]本發(fā)明實(shí)施例還提供了另一種位置服務(wù)的實(shí)現(xiàn)方法,如圖3所示,包括:
[0076]301:位置服務(wù)存儲(chǔ)設(shè)備接收位置服務(wù)器的查詢請(qǐng)求,上述查詢請(qǐng)求包含有待查詢的目標(biāo)網(wǎng)格;在上述位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為上述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;上述網(wǎng)格是由地圖劃分正方形得到;
[0077]在本發(fā)明實(shí)施例中,網(wǎng)格由地圖劃分而來,也即是說網(wǎng)格與實(shí)際的地理位置是對(duì)應(yīng)的。網(wǎng)格的邊長(zhǎng)實(shí)際上就是這個(gè)網(wǎng)格對(duì)應(yīng)地理位置的邊長(zhǎng)。網(wǎng)格邊長(zhǎng)越小,最終定位時(shí)的精度將會(huì)越高,網(wǎng)格越大則存儲(chǔ)的網(wǎng)格數(shù)量越少,查找所用的時(shí)間則可能越少。具體的長(zhǎng)度本發(fā)明實(shí)施例不予限定,推薦可以使用10m作為邊長(zhǎng)。
[0078]這里M的具體取值,可以由技術(shù)人員設(shè)定。若查找周圍最大2KM范圍內(nèi)的終端信息,那么可以將這個(gè)值設(shè)定為100或者50等值,具體取值本發(fā)明實(shí)施例不予限定。
[0079]可選地,本發(fā)明實(shí)施例還提供了在位置服務(wù)存儲(chǔ)設(shè)備網(wǎng)格的分布以及網(wǎng)格內(nèi)數(shù)據(jù)存儲(chǔ)的具體實(shí)現(xiàn)方案如下:在上述位置服務(wù)存儲(chǔ)設(shè)備存儲(chǔ)的網(wǎng)格編號(hào)按照哈希算法的規(guī)則進(jìn)行存儲(chǔ),并采用哈希桶排序。
[0080]302:使用上述目標(biāo)網(wǎng)格的編號(hào)查詢并獲得與上述待查詢的目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息;
[0081]303:將獲得的終端信息發(fā)送給上述位置服務(wù)器。
[0082]本發(fā)明實(shí)施例,采用網(wǎng)格的方式將地理位置進(jìn)行劃分,并采用劃分后的網(wǎng)格進(jìn)行位置信息存儲(chǔ);在位置服務(wù)過程中不必使用經(jīng)緯度進(jìn)行距離計(jì)算減少計(jì)算量,從而可以提高服務(wù)器的響應(yīng)速度。另外,在為位置服務(wù)存儲(chǔ)設(shè)備分配網(wǎng)格時(shí),使用的最小粒度比網(wǎng)格要大,這樣可以使更多的相鄰網(wǎng)格分配到同一個(gè)位置服務(wù)存儲(chǔ)設(shè)備,使得確定的目標(biāo)網(wǎng)格集中在少數(shù)幾個(gè)位置服務(wù)存儲(chǔ)設(shè)備內(nèi),從而減少對(duì)位置服務(wù)存儲(chǔ)設(shè)備的調(diào)用,降低位置服務(wù)存儲(chǔ)設(shè)備的計(jì)算壓力,從而進(jìn)一步的提升真?zhèn)€位置服務(wù)的系統(tǒng)性能。另外,還可以將網(wǎng)格可以設(shè)置得較小,提高定位精度,并減少因單個(gè)網(wǎng)格位置信息太多導(dǎo)致的沖突。
[0083]在本發(fā)明實(shí)施例中,位置服務(wù)存儲(chǔ)設(shè)備中的位置信息可以來源于其他服務(wù)器搜集的信息也可以來源于位置服務(wù)器直接收集的信息,本發(fā)明實(shí)施例提供了如何獲得并存儲(chǔ)終端的位置信息的具體實(shí)現(xiàn)方案,并且提供了保持位置信息唯一性的具體實(shí)現(xiàn)方案,具體如下:進(jìn)一步地,上述方法,還包括:
[0084]接收來自上述位置服務(wù)器發(fā)送的終端信息以及位置信息,查找是否已經(jīng)存在上述終端信息對(duì)應(yīng)的位置信息,若存在,則刪除;
[0085]若不存在,或者,刪除完畢后,將上述終端信息存放到與上述位置信息對(duì)應(yīng)的網(wǎng)格中,上述位置信息采用哈希表存儲(chǔ)。
[0086]本發(fā)明實(shí)施例還提供了位置信息的具體存儲(chǔ)方案,在本發(fā)明實(shí)施例中采用鏈表用頭插法的方式對(duì)位置信息進(jìn)行存儲(chǔ),這樣可以使位置信息可以按照時(shí)間先后次序進(jìn)行存儲(chǔ),方便后續(xù)對(duì)失效數(shù)據(jù)的刪除,具體如下:可選地,上述哈希表的值采用鏈表的數(shù)據(jù)結(jié)構(gòu);上述將上述終端信息存放到與上述位置信息對(duì)應(yīng)的網(wǎng)格中包括:將上述位置信息采用頭插法將位置信息插入與上述位置信息對(duì)應(yīng)的網(wǎng)格的鏈表中。
[0087]由于終端的位置信息(地理信息)是有時(shí)限的,隨著終端的地理位置的變化,終端的位置信息可能就會(huì)失效。因此對(duì)于存儲(chǔ)在位置服務(wù)存儲(chǔ)設(shè)備中的位置信息,需要清除已經(jīng)過期的位置信息;這樣不僅可以提高定位的準(zhǔn)確性,還可以降低計(jì)算量提高系統(tǒng)響應(yīng)速度。進(jìn)一步地,上述方法,還包括:
[0088]讀取網(wǎng)格的回收時(shí)間,若回收時(shí)間距當(dāng)前時(shí)間超過預(yù)定閾值,則從上述鏈表的后端往前依次刪除超時(shí)的位置信息。
[0089]由于位置服務(wù)存儲(chǔ)設(shè)備中,可能存放的網(wǎng)格很多,哈希桶也可能很多,如果每次對(duì)一個(gè)位置服務(wù)存儲(chǔ)設(shè)備全部的網(wǎng)格進(jìn)行過期數(shù)據(jù)的清理,這可能需要較多的時(shí)間,并且這段時(shí)間內(nèi)位置服務(wù)器將會(huì)停滯,造成位置服務(wù)器不穩(wěn)定。為了提高位置服務(wù)的穩(wěn)定性,清理過期數(shù)據(jù)的進(jìn)程可以逐步進(jìn)行,具體如下:可選地,上述讀取網(wǎng)格的回收時(shí)間包括:
[0090]按照預(yù)定的順序在所有網(wǎng)格中選取預(yù)定數(shù)量網(wǎng)格讀取回收時(shí)間。
[0091]在本發(fā)明實(shí)施例中,預(yù)定數(shù)量的網(wǎng)格,可以是任意設(shè)定的,也可以是按照系統(tǒng)的忙閑度來調(diào)整的,例如系統(tǒng)越忙則這個(gè)數(shù)量越少,系統(tǒng)越閑則這個(gè)數(shù)量越多。采用本發(fā)明實(shí)施例方案,不會(huì)造成位置服務(wù)的停滯,可以提高位置服務(wù)的穩(wěn)定性。
[0092]在本發(fā)明實(shí)施例中,位置信息等數(shù)據(jù)可以存放在共享內(nèi)存中,如果執(zhí)行了清共享內(nèi)存等處理,是可能需要進(jìn)行數(shù)據(jù)恢復(fù)的,因此本發(fā)明實(shí)施例進(jìn)一步提供了如何進(jìn)行數(shù)據(jù)恢復(fù)的方案,如下:進(jìn)一步地,上述方法還包括:
[0093]將位置信息的插入操作和刪除操作記錄到本端業(yè)務(wù)支撐系統(tǒng)日志中;在有本端業(yè)務(wù)支撐系統(tǒng)日志超時(shí)后,刪除超時(shí)的本端業(yè)務(wù)支撐系統(tǒng)日志;
[0094]在清內(nèi)存恢復(fù)過程中,按照本端業(yè)務(wù)支撐系統(tǒng)日志的記錄時(shí)間從先到后依次讀入并執(zhí)行業(yè)務(wù)支撐系統(tǒng)日志記錄的操作。
[0095]基于本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),以及數(shù)據(jù)恢復(fù)的方案,本發(fā)明實(shí)施例還提供了在位置服務(wù)存儲(chǔ)設(shè)備擴(kuò)容時(shí)的數(shù)據(jù)恢復(fù),具體方案如下:進(jìn)一步地,上述方法還包括:
[0096]在位置服務(wù)存儲(chǔ)設(shè)備擴(kuò)容過程中,獲取所有位置服務(wù)存儲(chǔ)設(shè)備的業(yè)務(wù)支撐系統(tǒng)日志;讀取獲取到的業(yè)務(wù)支撐系統(tǒng)日志的記錄,若當(dāng)前讀取到的記錄屬于本端位置服務(wù)存儲(chǔ)設(shè)備,則執(zhí)行當(dāng)前讀取到的記錄對(duì)應(yīng)的操作。
[0097]以下實(shí)施例將以游戲玩家使用手機(jī)查找附近玩家的應(yīng)用場(chǎng)景為例,對(duì)本發(fā)明實(shí)施例的應(yīng)用過程以及系統(tǒng)實(shí)現(xiàn)過程進(jìn)行詳細(xì)的舉例說明。
[0098]一、系統(tǒng)體結(jié)構(gòu),可以參考圖4所示。
[0099]Lbs (Locat1n Based Service,位置服務(wù))服務(wù)器主要有兩個(gè)功能:一個(gè)是存儲(chǔ)玩家空間地理信息(玩家對(duì)應(yīng)的是位于終端的賬號(hào),因此實(shí)際上也是終端的地理信息),另一個(gè)功能是查詢某個(gè)玩家附近的玩家,比如某個(gè)玩家周圍2KM之內(nèi)的玩家。
[0100]Lbs服務(wù)器作為一個(gè)單獨(dú)的服務(wù)存在,提供接口供外部訪問玩家地理信息,存儲(chǔ)玩家地理信息。
[0101]Lbs服務(wù)器需要合理有效組織玩家地理信息,用于支持快速查找玩家附近的玩家,設(shè)置玩家地理信息等需求。圖4是Lbs服務(wù)器的總體結(jié)構(gòu)圖。
[0102]在本發(fā)明實(shí)施例圖4所示系統(tǒng)中,游戲服務(wù)器(GameServer)只和位置服務(wù)器(Lbsservice)進(jìn)行通信,GameServer設(shè)置玩家地理信息,請(qǐng)求玩家地理信息都交由Lbsservice進(jìn)行處理。Lbsservice負(fù)責(zé)分析GameServer的請(qǐng)求,并將請(qǐng)求消息發(fā)送給合適的位置服務(wù)存儲(chǔ)設(shè)備。
[0103]對(duì)于GameServer提交的需要解析的地理信息,由Lbsservice通過超文本傳輸協(xié)議(HTTP-Hypertext transfer protocol)協(xié)議向搜搜的地圖服務(wù)器請(qǐng)求解析的結(jié)果,并進(jìn)行相應(yīng)的處理。
[0104]在圖4所示的系統(tǒng)結(jié)構(gòu)中,Lbsservice實(shí)現(xiàn)的是代理的功能,位置服務(wù)存儲(chǔ)設(shè)備(Lbsstore)負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),Lbsservice與Lbsstore之間通信的通道可以采用tbus實(shí)現(xiàn)。
[0105]二、Lbs空間數(shù)據(jù)模型:
[0106]位置信息的存儲(chǔ)重要的一點(diǎn)是要支持范圍查詢,比如以某個(gè)點(diǎn)為中心查找附近多遠(yuǎn)距離的人。在服務(wù)器一側(cè),數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)應(yīng)該有效的支持這種查詢方式?;谶@一點(diǎn),可以將全球地圖二維化之后,然后分割成N*M個(gè)格子,每個(gè)格子的大小都是相同的正方形。玩家的地理信息則根據(jù)玩家當(dāng)前的二維坐標(biāo)(x,y)存放到不同的格子中,如圖5所示。
[0107]當(dāng)查找一個(gè)玩家某個(gè)點(diǎn)附近的玩家這種應(yīng)用,可以按照下面的步驟進(jìn)行:
[0108]1、首先以玩家的地理位置(x,y)為中心,距離r為半徑,得到一個(gè)圓
[0109]2、計(jì)算出這個(gè)圓的外接正方形;
[0110]3、計(jì)算這個(gè)外接正方形包含哪些格子,那么半徑為r的玩家信息都在這些格子中
[0111]4、檢索這些格子,找出符合條件的玩家
[0112]如圖5所示,半徑為r的格子包含1、2、3、4、5、6、7、8、9號(hào)格子,那么只需要找出存儲(chǔ)在這個(gè)9個(gè)格子中的所有玩家,然后計(jì)算每個(gè)玩家是否在圓所在的正方形內(nèi),如果在正方形內(nèi)就是滿足條件的玩家。這樣,只需要遍歷這個(gè)9個(gè)格子中的玩家,就能查詢到點(diǎn)(X,y)附近距離r之內(nèi)的玩家了。
[0113]基于以上空間數(shù)據(jù)模型的要求,本發(fā)明實(shí)施例提供了如下詳細(xì)設(shè)計(jì)方案:
[0114]2.1、地球坐標(biāo)二維化:
[0115]地球是一個(gè)略扁的球形,赤道的長(zhǎng)度是40076千米,子午線的長(zhǎng)度是40009千米。粗略的將地球以赤道為矩形的長(zhǎng)邊,將地球變成一個(gè)長(zhǎng)方形(參考我們掛在墻上的世界地圖)。那么長(zhǎng)方形的長(zhǎng)就是赤道的長(zhǎng)度,我們以40000KM作為矩形的長(zhǎng),寬就是20000KM。
[0116]對(duì)于經(jīng)度上的I度,代表的長(zhǎng)度簡(jiǎn)單認(rèn)為是40000KM/360,緯度上的一度代表的長(zhǎng)度是:20000KM/180o
[0117]選擇東經(jīng)180度,北緯90度作為原點(diǎn),經(jīng)度代表X軸,正方向是從東往西。緯度代表Y軸,正方向就是從北到南。比如東經(jīng)170度,北緯40度這個(gè)經(jīng)緯度坐標(biāo),二維化后,X =(180 - 170)*40000KM/360,y = (90-40)*20000KM/180。
[0118]2.2、格子的劃分:
[0119]本發(fā)明實(shí)施例方案中,格子的寬度可以為100米的正方形。也就是將全球二維化后,劃分為寬度為100的多個(gè)正方形。玩家的信息就根據(jù)其坐標(biāo)(x,y)計(jì)算出所在格子,然后將數(shù)據(jù)存放到該格子中。對(duì)于每一個(gè)格子都有唯一的編號(hào)GridGID,GridGID的編號(hào)圖6所示進(jìn)行變化。
[0120]在圖6中所示了 400m*400m的范圍內(nèi)格子編號(hào)的變化情況。如圖6所示的地理區(qū)域被劃分成4*4的格子,那么編號(hào)就是從原點(diǎn)開始,沿著X軸的方向增加的。
[0121]對(duì)應(yīng)于二維化的地球,我們已經(jīng)知道二維化后的長(zhǎng)方形地圖長(zhǎng)度是40000KM,寬度是20000KM。并且格子的寬度是100米。對(duì)于一個(gè)點(diǎn)(X,y),計(jì)算對(duì)應(yīng)GridGID的公式如下:
[0122]GridGID (x,y) = ((40000*1000)/100)*(y/100)+x/100+l ;
[0123]因此,對(duì)于一個(gè)在(x,y)位置的玩家,我們可以按照上面的GridGID計(jì)算公式計(jì)算出其 GridGID。
[0124]2.3、格子搜索:
[0125]格子搜索可以采用螺旋搜索算法,如圖7所示,假設(shè)A是中心搜索點(diǎn)(玩家所在格子),搜索A附近的人時(shí),依次按照箭頭的方向進(jìn)行搜索。
[0126]2.4、數(shù)據(jù)的存儲(chǔ)
[0127]在前述實(shí)施例中已經(jīng)將地球劃分為長(zhǎng)度為100米的格子,玩家信息就按其位置存放在不同的格子中。具體存儲(chǔ)玩家地理信息時(shí),我們可以選擇以GridGID作為key (鍵值,有時(shí)也稱為關(guān)鍵字),格子中的玩家信息作為值存放到一個(gè)hash (哈希)表中,如圖8所示。
[0128]查詢附近玩家時(shí),按照2.2中所記載的公式計(jì)算出格子編號(hào),然后根據(jù)格子編號(hào)從hash表中取出玩家信息,再計(jì)算滿足條件的玩家即可。
[0129]三、位置服務(wù)器以及位置服務(wù)存儲(chǔ)設(shè)備數(shù)據(jù)存儲(chǔ)以及處理流程的設(shè)計(jì):
[0130]Lbs主要包括Lbsservice和Lbsstore兩個(gè)部分。Lbsserive相當(dāng)于一個(gè)代理,它向外提供訪問的接口,外部只和它通信。
[0131]Lbsstore則負(fù)責(zé)組織玩家空間地理信息,存儲(chǔ)玩家空間地理信息。Lbsstore存儲(chǔ)數(shù)據(jù)時(shí)將數(shù)據(jù)存放在共享內(nèi)存,同時(shí)將玩家信息記錄到OSS(Operat1ns support system,業(yè)務(wù)支撐系統(tǒng))日志中,方便清理共享內(nèi)存重啟時(shí)進(jìn)行數(shù)據(jù)恢復(fù)。
[0132]下面針對(duì)這兩個(gè)部分進(jìn)行詳細(xì)的介紹。
[0133]3.1Lbsservice 詳細(xì)設(shè)計(jì):
[0134]Lbsservice作為一個(gè)代理,負(fù)責(zé)協(xié)調(diào)GameServer、Lbsstore、搜搜的地圖服務(wù)器(MAP Server)之間的通信。由上面描述已知Lbs服務(wù)器的功能就是存儲(chǔ)玩家空間地理信息,查詢玩家附近的玩家。
[0135]對(duì)于存儲(chǔ)玩家空間信息這個(gè)功能,如圖9所示,是上報(bào)玩家地理信息的流程圖:
[0136]首先玩家通過客戶端將自身的地理位置信息發(fā)送給GameServer, GameServer再將收到的地理位置信息轉(zhuǎn)發(fā)給Lbsservice。Lbsservice在收到地理信息后,將這些地理位置信息發(fā)送給搜搜的MAP Server (地圖服務(wù)器)請(qǐng)求解析地理信息(可以使用http協(xié)議,在程序中是使用CURL (curl是利用URL語法在命令行方式下工作的開源文件傳輸工具)來發(fā)送http請(qǐng)求和接收http數(shù)據(jù))。搜搜的MAP Server解析后將解析地理信息的結(jié)果返回給Lbsservice,Lbsservice對(duì)位置信息進(jìn)行解析,計(jì)算出該位置信息應(yīng)該存放的Lbsstore服務(wù)器編號(hào),然后將玩家的地理信息發(fā)送給計(jì)算得到的Lbsstore。Lbsstore將玩家地理信息數(shù)據(jù)存儲(chǔ),并寫入OSS日志中,方便以后重啟時(shí)進(jìn)行數(shù)據(jù)恢復(fù)。Lbsstore存儲(chǔ)完畢后向Lbsservice發(fā)送存儲(chǔ)結(jié)果響應(yīng),告知存儲(chǔ)是否成功,Lbsservice再將收到的存儲(chǔ)結(jié)果響應(yīng)轉(zhuǎn)發(fā)給游戲服務(wù)器。
[0137]通過以上實(shí)施例可以完成各玩家的位置信息的收集,在此之后可以實(shí)現(xiàn)獲取玩家附近的玩家這個(gè)功能,過程描述如下:
[0138]首先玩家通過GameServer發(fā)送消息請(qǐng)求給Lbsservice,消息內(nèi)容包括自己的位置信息,位置信息可能是一個(gè)二維坐標(biāo),也可能是一串需要搜搜的MAP Server解析的位置串。同時(shí)消息包中還包含附近距離范圍(rad1us)、超時(shí)時(shí)間expireTm(即只需要距離當(dāng)前時(shí)間多少秒內(nèi)更新的玩家的信息)。
[0139]如果玩家位置信息是一個(gè)需要搜搜MAP解析的字符串,那么Lbsservice先發(fā)http消息給搜搜MAP Server進(jìn)行位置解析得到玩家的二維坐標(biāo)。
[0140]Lbsservice得到玩家的二維坐標(biāo)(x, y)之后,以坐標(biāo)(x, y)作為原點(diǎn),rad1us為半徑計(jì)算出一個(gè)圓的外接正方形,那么附近玩家的數(shù)據(jù)都在這個(gè)外接正方形中所包含的格子中。計(jì)算出這個(gè)外接正方形包含了哪些格子,然后計(jì)算相應(yīng)格子的數(shù)據(jù)存放在哪個(gè)Lbsstore上。再將請(qǐng)求發(fā)送到這些Lbsstore上??梢詤⒖紙D5所示。
[0141]由圖5可知,附近玩家包含在編號(hào)為I?9的格子中。假如計(jì)算后得知I?9號(hào)格子包含的數(shù)據(jù)分布在編號(hào)為N1、N2、N3這3個(gè)Lbsstore上。那么發(fā)查詢請(qǐng)求給3個(gè)Lbsstore,請(qǐng)求這些格子內(nèi)的玩家信息,從而獲得上述玩家附近的玩家信息。
[0142]在以上實(shí)施例中,Lbsstore會(huì)根據(jù)半徑以及玩家坐標(biāo)點(diǎn)計(jì)算出附近的玩家,然后將結(jié)果返回給Lbsservice。然后Ibsserivce將收到的來自Lbsstore返回的結(jié)果組裝好后發(fā)送給GameServer,由GameServer進(jìn)行進(jìn)一步的處理。GameServer對(duì)收到的結(jié)果如何處理,本發(fā)明實(shí)施例不予限定。
[0143]下面針對(duì)Lbsservice的功能介紹Lbsservice的設(shè)計(jì)方案。
[0144]3.1.1、清除重復(fù)玩家地理信息:
[0145]在設(shè)置玩家地理信息的時(shí)候,需要清除玩家之前上報(bào)的地理信息,以防止過期地理信息造成的數(shù)據(jù)錯(cuò)誤,提高定位服務(wù)的準(zhǔn)確性。由于Lbsservice并不知道之前玩家地理信息存放在哪個(gè)Lbsstore上面,計(jì)算出當(dāng)前地理信息存放的Lbsstore后,給其發(fā)送存放(set)指示消息實(shí)現(xiàn)存放地理信息。然后采用了廣播的方式發(fā)送一條刪除(delete)指示消息給其他所有的Lbsstore,進(jìn)行刪除操作,刪除上述玩家的地理信息。如圖10所示。
[0146]如圖11所示,為刪除playerID3的示意圖。在delete消息包中包含玩家的playerID (玩家標(biāo)識(shí))。在Lbsstore上,建立了一個(gè)以playerID為key, GridGID為值的hash表。delete時(shí),廣播的delete消息最多只在一個(gè)Lbsstore上能根據(jù)playerID找到GridGID。然后根據(jù)這個(gè)GridGID,從存儲(chǔ)地理信息的hash表中刪除玩家的信息,然后在刪除這個(gè)playerID到GridGID的索引關(guān)系即可。
[0147]3.1.2、確定格子所屬的Lbsstore編號(hào):
[0148]在本發(fā)明實(shí)施例中,將地球劃分為成了 100*100的格子,每個(gè)格子都有一個(gè)GridGID。存儲(chǔ)玩家信息的Lbsstore可能有多個(gè),對(duì)于格子編號(hào)為GridGIDl的玩家信息,需要決定其具體存放在哪個(gè)Lbsstore上。
[0149]假設(shè)我們有N個(gè)Lbsstore服務(wù)器,對(duì)于存放GridGIDl格子數(shù)據(jù)的Lbsstore的編號(hào)Ml,我們可以簡(jiǎn)單如下計(jì)算:
[0150]Ml = hash (GridGIDl) % N ;
[0151]但是這樣有一個(gè)壞處:比如我們要查找某個(gè)玩家附近IKM內(nèi)的玩家,可以查找的格子數(shù)目大概是2000/100*2000/100 = 400個(gè)格子,對(duì)這400個(gè)格子hash計(jì)算其存儲(chǔ)的Lbsstore編號(hào),可能包含了所有的Lbsstore。也就是說一次查找附近的人的操作需要向所有的Lbsstore請(qǐng)求數(shù)據(jù),這樣會(huì)導(dǎo)致Lbsstore數(shù)據(jù)處理壓力會(huì)很大。
[0152]如果能夠?qū)崿F(xiàn)單個(gè)查找附近的人的請(qǐng)求,大部分?jǐn)?shù)據(jù)集中在少部分機(jī)器上,將會(huì)大大減輕Lbsstore的數(shù)據(jù)處理壓力。本發(fā)明實(shí)施例可以采用在一個(gè)更粗的粒度上將一些范圍內(nèi)的數(shù)據(jù)集中存放在同一個(gè)機(jī)器上。也就是說存放在同一個(gè)機(jī)器上的區(qū)域范圍的最小粒度應(yīng)該比100米大。由于格子劃分是100*100。在本發(fā)明實(shí)施例中,按照之前的劃分方案將地球再次劃分為大小為10000*10000的格子(如果10000過大可以調(diào)整,10_數(shù)倍都是可行的)。這樣一個(gè)大格子中的數(shù)據(jù)會(huì)分發(fā)存儲(chǔ)到同一臺(tái)機(jī)器上。
[0153]大格子的寬度是10000*10000時(shí),它包含了 10000個(gè)小格子,也就是這10000個(gè)小格子的數(shù)據(jù)都會(huì)存放到同一臺(tái)機(jī)器上。對(duì)每個(gè)大格子也按之前小格子的規(guī)則編號(hào),稱之為虛擬機(jī)標(biāo)識(shí)(VirtualMachineGridGID),后續(xù)稱為虛擬機(jī)標(biāo)識(shí)GridGID。
[0154]對(duì)于一個(gè)坐標(biāo)點(diǎn)(X,y)計(jì)算虛擬機(jī)標(biāo)識(shí)GridGID所屬的Lbsstore編號(hào)如下:
[0155]首先計(jì)算VirtualMachineGridGID 如下:VirtualMachineGridGID = ((40000*1000) /10000) * (y/10000) +x/10000+l ;假設(shè)有 N 個(gè) Lbsstore,那么存儲(chǔ)坐標(biāo)點(diǎn)(x,y)所在的Lbsstore 編號(hào) Ml 計(jì)算如下:M1 = hash (VirtualMachineGridGID) % N
[0156]Lbsservice在存儲(chǔ)玩家地理信息時(shí),根據(jù)上述方式計(jì)算出該玩家地理信息存放的Lbsstore編號(hào)M,然后將玩家地理信息分發(fā)到該Lbsstore上。Lbsstore再計(jì)算GridGID,然后將數(shù)據(jù)存入hash表中。
[0157]首先根據(jù)玩家坐標(biāo)以及半徑,計(jì)算出一個(gè)圓的外接正方形,然后看這個(gè)外接正方形包含哪些大格子(計(jì)算方式跟之前一樣,只是格子邊長(zhǎng)變大了)。得到了大格子的虛擬機(jī)標(biāo)識(shí)GridGID,就可以按照上面的公式計(jì)算出相應(yīng)的Lbsstore編號(hào)。
[0158]很顯然,本發(fā)明實(shí)施例通過在一個(gè)更粗的粒度上將一些范圍內(nèi)的數(shù)據(jù)集中存放在同一個(gè)機(jī)器上,將查找附近的人的需求(查找附近的人范圍不會(huì)無限大的,不然無意義,現(xiàn)在程序限制最多2KM),現(xiàn)在單個(gè)查找附近的人的請(qǐng)求會(huì)集中分發(fā)到I到2個(gè)Lbsstore上,最多可能分發(fā)到4個(gè)Lbsstore上去。這樣可以大大減少這種請(qǐng)求對(duì)Lbsstore的壓力。
[0159]3.3.3、Lbsservice 對(duì)數(shù)據(jù)的組裝:
[0160]由于請(qǐng)求玩家附近的玩家時(shí),可能附近玩家信息分布在多個(gè)Lbsstore上,也就是Lbsservice需要接收多個(gè)Lbsstore返回的數(shù)據(jù)才能得到完整的查詢結(jié)果,然后需要將多份數(shù)據(jù)拼裝好返回給GameServer。
[0161]在Lbsservice上可以定義如下的數(shù)據(jù)結(jié)構(gòu):
[0162]
struct tagNearPlayersI η fo
{
int iUpdateTm; //發(fā)送請(qǐng)求的時(shí)間,用于超時(shí)處理
int iNeedDataParts; Il應(yīng)該收到的數(shù)據(jù)總數(shù)
intiReceivedDataPart; //已經(jīng)接受到的數(shù)據(jù)總數(shù)
int iPosX; //玩家X坐標(biāo)
intiPosY; //玩家Y坐標(biāo)
int ISeq; // 序列號(hào)
uint32_t dwBusID; // 發(fā)送消息的 GameSvr 的 bus 地址
int iPIayerCnt; // 玩家數(shù)目
tagp!ayerDetailstPlayerList[MAX_LBS_PLAYER_LIST_NUM];
};
[0163]并且建立了一個(gè)以 playerID 為 key,值為 tagNearPlayersInfo 的 hash 表。當(dāng)Lbsservice發(fā)請(qǐng)求到多個(gè)Lbsstore請(qǐng)求附近玩家信息時(shí),會(huì)插入一個(gè)以playerID為key的數(shù)據(jù)到一個(gè)Map ( 一種文本文件)中,其中記錄了插入的時(shí)間,已經(jīng)接收的數(shù)據(jù),需要接收的數(shù)據(jù),消息序列號(hào)等(需要接收的數(shù)據(jù)就是請(qǐng)求分發(fā)的Lbsstore的數(shù)目)。Lbsservice每收到從Lbsstore響應(yīng)的數(shù)據(jù)iReceivedDataPart就增加I,如果iNeedDataParts =iReceivedDataPart (也就是已經(jīng)接收到完整的數(shù)據(jù)),或者已經(jīng)超時(shí),那么就將已經(jīng)接收好的數(shù)據(jù)發(fā)送給GameServer。
[0164]使用上述Map還可以啟動(dòng)控制玩家請(qǐng)求頻率的作用,比如玩家第一次請(qǐng)求了獲取附近玩家,馬上又發(fā)送一個(gè)請(qǐng)求,那么Map中應(yīng)該有該玩家的信息,第二次的請(qǐng)求可以直接拒絕;在服務(wù)器一側(cè)可以定義超時(shí)時(shí)間是10s,也就是1s之內(nèi)玩家同時(shí)發(fā)送2個(gè)獲取附近玩家的請(qǐng)求,僅處理第一次發(fā)送的請(qǐng)求。
[0165]3.3.4、程序使用的hash函數(shù):
[0166]在前述實(shí)施例的描述中,會(huì)對(duì)VirtualMachineGridGID進(jìn)行一次hash處理,然后計(jì)算出玩家信息所在的Lbsstore編號(hào)。
[0167]在Lbsstore上根據(jù)玩家GridGID插入數(shù)據(jù)到hash表中時(shí),也會(huì)先計(jì)算hash (GridGID),然后用hash (GridGID) % hashnum才得到該數(shù)據(jù)所在的hash桶(hash桶排序)編號(hào)。原因是GridGID的計(jì)算規(guī)律很強(qiáng),可能會(huì)導(dǎo)致一些格子數(shù)據(jù)集中到同一個(gè)hash桶中。所以本發(fā)明實(shí)施例可以再對(duì)GridGID進(jìn)行一次hash處理,從而增加數(shù)據(jù)的隨機(jī)性。
[0168]對(duì)于整個(gè)地球二維化后,總的格子數(shù)目有800億個(gè),為了區(qū)分不同的格子,可以使用一個(gè)uint64_t(64位無符號(hào)整數(shù))類型數(shù)據(jù)來存儲(chǔ)GridGID。為了使GridGID有更好的分布性能,采用如下算法Wang/Jenkins hash算法(王/詹金斯哈希算法)對(duì)GridGID進(jìn)行hash處理。
[0169]
uint64_t CLbsPosConvert::hash64shift(uint64_t ullKey)
{
ullKey = (-uiiKey) + (uiiKey ?21);
uliKey = ullKey Λ (ullKey ? 24);
ullKey = (ullKey + (ullKey ? 3)) + (ullKey ? 8);
uiiKey 二 ullKey Λ (uiiKey ? 14);
ullKey = (ullKey + (ullKey ? 2)) + (ullKey ? 4);
ullKey = ullKey A (yllKey ? 28);
ullKey = ullKey + (ullKey ?31);
[0170]
return ullKey;
}
[0171]3.2、Lbsstore 詳細(xì)設(shè)計(jì):
[0172]Lbsstore用于存儲(chǔ)玩家地理信息,在本發(fā)明實(shí)施例中可以使用共享內(nèi)存上的一個(gè)hash表來存儲(chǔ)玩家的地理信息。地球被分為100*100的格子,玩家信息存放在這樣的格子中。hash表的key是格子的GridGID,值(value)就是格子中的玩家信息。由于某些格子中玩家數(shù)量可能很大,而某些格子玩家數(shù)量可能很少。hash需要支持在格子中存放不同數(shù)量的玩家。如果value使用一個(gè)數(shù)組,會(huì)降低共享內(nèi)存的利用率,而且由于無法估算一個(gè)格子中玩家的最大數(shù)量,數(shù)組大小是一個(gè)問題。
[0173]因此,在本發(fā)明實(shí)施例中value的值采用鏈表存儲(chǔ),每個(gè)格子中的玩家都用鏈表的形式鏈接起來。鏈表采用頭插法,保證最新上報(bào)數(shù)據(jù)的玩家在鏈表最前面,同時(shí)也在邏輯上保證了鏈表中的數(shù)據(jù)是按照上報(bào)時(shí)間排序的。這個(gè)特性在玩家信息GC(GarbageCo 11 ect 1n,超時(shí)清除玩家信息信息)以及查找附近玩家時(shí)只查詢某個(gè)時(shí)間點(diǎn)內(nèi)上報(bào)地理信息的玩家時(shí)比較有用。
[0174]圖12是存放玩家信息的hash表結(jié)構(gòu)圖。
[0175]在圖12中GridlndexNode就是代表一個(gè)格子,3個(gè)格子節(jié)點(diǎn)鏈接代表的是hash (key)沖突的情況,采用鏈表的方式可以解決沖突。每個(gè)格子節(jié)點(diǎn),也就是GridIndexNode中可以掛玩家節(jié)點(diǎn)信息,也就是PlayerNode,格子中有多少玩家,那么該格子中就有多少個(gè)PlayerNode, PlayerNode通過鏈表的形式鏈接起來。
[0176]GridIndexNode 結(jié)構(gòu)形式如下:
[0177]
【權(quán)利要求】
1.一種位置服務(wù)的實(shí)現(xiàn)方法,其特征在于,包括: 在接收到包含目標(biāo)位置信息的定位請(qǐng)求后,確定目標(biāo)網(wǎng)格;所述目標(biāo)網(wǎng)格包括所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格,以及與所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格距離在設(shè)定范圍內(nèi)的網(wǎng)格;所述網(wǎng)格是由地圖劃分正方形得到; 確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;在位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ; 從確定的位置服務(wù)存儲(chǔ)設(shè)備中,查詢與所述目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息,并向所述定位請(qǐng)求的發(fā)送方發(fā)送查詢到的終端信息。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,還包括: 接收終端上報(bào)的位置信息以及終端信息;確定所述位置信息所屬的網(wǎng)格,以及確定的網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備; 將所述終端上報(bào)的位置信息以及終端信息,發(fā)送給確定的位置服務(wù)存儲(chǔ)設(shè)備進(jìn)行存儲(chǔ)。
3.根據(jù)權(quán)利要求2所述方法,其特征在于,在位置服務(wù)存儲(chǔ)設(shè)備中還以終端信息為關(guān)鍵字以網(wǎng)格編號(hào)為值進(jìn)行數(shù)據(jù)存儲(chǔ),所述方法還包括: 向確定的位置服務(wù)存儲(chǔ)設(shè)備以外的其他位置服務(wù)存儲(chǔ)設(shè)備發(fā)送位置信息刪除指令,刪除存儲(chǔ)的所述終端信息對(duì)應(yīng)的位置信息。
4.根據(jù)權(quán)利要求1至3任意一項(xiàng)所述方法,其特征在于,所述網(wǎng)格由地圖劃分正方形得至IJ,所有網(wǎng)格的網(wǎng)格編號(hào)按照地理位置順序編號(hào);所有在位置服務(wù)存儲(chǔ)設(shè)備中最小粒度的網(wǎng)格與位置服務(wù)存儲(chǔ)設(shè)備的所屬關(guān)系符合哈希算法的規(guī)則; 所述確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備包括:使用目標(biāo)網(wǎng)格進(jìn)行哈希查找確定標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備。
5.根據(jù)權(quán)利要求4所述方法,其特征在于,若目標(biāo)網(wǎng)格分布于兩個(gè)或兩個(gè)以上的位置服務(wù)存儲(chǔ)設(shè)備;所述方法還包括: 將從位置服務(wù)存儲(chǔ)設(shè)備查詢到的終端信息進(jìn)行組包。
6.根據(jù)權(quán)利要求1至3任意一項(xiàng)所述方法,其特征在于,若再次接收到來自所述終端的定位請(qǐng)求,還包括: 確定與前次定位請(qǐng)求的時(shí)間間隔是否超過預(yù)定閾值,若為超過預(yù)定閾值,則拒絕執(zhí)行定位。
7.根據(jù)權(quán)利要求1所述方法,其特征在于,所述確定目標(biāo)網(wǎng)格包括: 首先在測(cè)試網(wǎng)格中查詢包含終端信息的測(cè)試網(wǎng)格,所述測(cè)試網(wǎng)格是與所述目標(biāo)位置信息對(duì)應(yīng)的測(cè)試網(wǎng)格,測(cè)試網(wǎng)格由地圖劃分正方形得到,且邊長(zhǎng)大于所述網(wǎng)格; 確定查詢到的測(cè)試網(wǎng)格中包含的網(wǎng)格為目標(biāo)網(wǎng)格。
8.—種位置服務(wù)的實(shí)現(xiàn)方法,其特征在于,包括: 位置服務(wù)存儲(chǔ)設(shè)備接收位置服務(wù)器的查詢請(qǐng)求,所述查詢請(qǐng)求包含有待查詢的目標(biāo)網(wǎng)格; 在所述位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;所述網(wǎng)格是由地圖劃分正方形得到; 使用所述目標(biāo)網(wǎng)格的編號(hào)查詢并獲得與所述待查詢的目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息; 將獲得的終端信息發(fā)送給所述位置服務(wù)器。
9.根據(jù)權(quán)利要求8所述方法,其特征在于, 在所述位置服務(wù)存儲(chǔ)設(shè)備存儲(chǔ)的網(wǎng)格編號(hào)按照哈希算法的規(guī)則進(jìn)行存儲(chǔ),并采用哈希桶排序。
10.根據(jù)權(quán)利要求8或9所述方法,其特征在于,還包括: 接收來自所述位置服務(wù)器發(fā)送的終端信息以及位置信息,查找是否已經(jīng)存在所述終端信息對(duì)應(yīng)的位置信息,若存在,則刪除; 若不存在,或者,刪除完畢后,將所述終端信息存放到與所述位置信息對(duì)應(yīng)的網(wǎng)格中,所述位置信息采用哈希表存儲(chǔ)。
11.根據(jù)權(quán)利要求10所述方法,其特征在于,所述哈希表的值采用鏈表的數(shù)據(jù)結(jié)構(gòu);所述將所述終端信息存放到與所述位置信息對(duì)應(yīng)的網(wǎng)格中包括: 將所述位置信息采用頭插法將位置信息插入與所述位置信息對(duì)應(yīng)的網(wǎng)格的鏈表中。
12.根據(jù)權(quán)利要求11所述方法,其特征在于,還包括: 讀取網(wǎng)格的回收時(shí)間,若回收時(shí)間距當(dāng)前時(shí)間超過預(yù)定閾值,則從所述鏈表的后端往前依次刪除超時(shí)的位置信息。
13.根據(jù)權(quán)利要求12所述方法,其特征在于,所述讀取網(wǎng)格的回收時(shí)間包括: 按照預(yù)定的順序在所有網(wǎng)格中選取預(yù)定數(shù)量網(wǎng)格讀取回收時(shí)間。
14.根據(jù)權(quán)利要求12所述方法,其特征在于,所述方法還包括: 將位置信息的插入操作和刪除操作記錄到本端業(yè)務(wù)支撐系統(tǒng)日志中;在有本端業(yè)務(wù)支撐系統(tǒng)日志超時(shí)后,刪除超時(shí)的本端業(yè)務(wù)支撐系統(tǒng)日志; 在清內(nèi)存恢復(fù)過程中,按照本端業(yè)務(wù)支撐系統(tǒng)日志的記錄時(shí)間從先到后依次讀入并執(zhí)行業(yè)務(wù)支撐系統(tǒng)日志記錄的操作。
15.根據(jù)權(quán)利要求14所述方法,其特征在于,還包括: 在位置服務(wù)存儲(chǔ)設(shè)備擴(kuò)容過程中,獲取所有位置服務(wù)存儲(chǔ)設(shè)備的業(yè)務(wù)支撐系統(tǒng)日志;讀取獲取到的業(yè)務(wù)支撐系統(tǒng)日志的記錄,若當(dāng)前讀取到的記錄屬于本端位置服務(wù)存儲(chǔ)設(shè)備,則執(zhí)行當(dāng)前讀取到的記錄對(duì)應(yīng)的操作。
16.一種位置服務(wù)器,其特征在于,包括: 網(wǎng)格確定單元,用于在接收到包含目標(biāo)位置信息的定位請(qǐng)求后,確定目標(biāo)網(wǎng)格;所述目標(biāo)網(wǎng)格包括所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格,以及與所述目標(biāo)位置信息對(duì)應(yīng)的網(wǎng)格距離在設(shè)定范圍內(nèi)的網(wǎng)格;所述網(wǎng)格是由地圖劃分正方形得到; 設(shè)備確定單元,用于確定目標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備;在位置服務(wù)存儲(chǔ)設(shè)備中以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ; 查詢單元,用于從確定的位置服務(wù)存儲(chǔ)設(shè)備中,查詢與所述目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息; 信息發(fā)送單元,用于向所述定位請(qǐng)求的發(fā)送方發(fā)送查詢到的終端信息。
17.根據(jù)權(quán)利要求16所述位置服務(wù)器,其特征在于,還包括: 信息接收單元,用于接收終端上報(bào)的位置信息以及終端信息; 所述網(wǎng)格確定單元,還用于確定所述位置信息所屬的網(wǎng)格; 所述設(shè)備確定單元,還用于確定所述網(wǎng)格確定單元確定的網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備; 所述信息發(fā)送單元,還用于將所述終端上報(bào)的位置信息以及終端信息,發(fā)送給確定的位置服務(wù)存儲(chǔ)設(shè)備進(jìn)行存儲(chǔ)。
18.根據(jù)權(quán)利要求17所述位置服務(wù)器,其特征在于,在位置服務(wù)存儲(chǔ)設(shè)備中還以終端信息為關(guān)鍵字以網(wǎng)格編號(hào)為值進(jìn)行數(shù)據(jù)存儲(chǔ),所述位置服務(wù)器還包括: 所述信息發(fā)送單元,還用于向確定的位置服務(wù)存儲(chǔ)設(shè)備以外的其他位置服務(wù)存儲(chǔ)設(shè)備發(fā)送位置信息刪除指令,刪除存儲(chǔ)的所述終端信息對(duì)應(yīng)的位置信息。
19.根據(jù)權(quán)利要求16至18任意一項(xiàng)所述位置服務(wù)器,其特征在于,所述網(wǎng)格由地圖劃分正方形得到,所有網(wǎng)格的網(wǎng)格編號(hào)按照地理位置順序編號(hào);所有在位置服務(wù)存儲(chǔ)設(shè)備中最小粒度的網(wǎng)格與位置服務(wù)存儲(chǔ)設(shè)備的所屬關(guān)系符合哈希算法的規(guī)則; 所述設(shè)備確定單元,用于使用目標(biāo)網(wǎng)格進(jìn)行哈希查找確定標(biāo)網(wǎng)格所屬的位置服務(wù)存儲(chǔ)設(shè)備。
20.根據(jù)權(quán)利要求19所述位置服務(wù)器,其特征在于,若目標(biāo)網(wǎng)格分布于兩個(gè)或兩個(gè)以上的位置服務(wù)存儲(chǔ)設(shè)備;所述位置服務(wù)器還包括: 組包單元,用于將從位置服務(wù)存儲(chǔ)設(shè)備查詢到的終端信息進(jìn)行組包; 所述信息發(fā)送單元,用于向所述定位請(qǐng)求的發(fā)送方組包單元的組包結(jié)果。
21.根據(jù)權(quán)利要求16至18任意一項(xiàng)所述位置服務(wù)器,其特征在于,還包括: 定位控制單元,用于若再次接收到來自所述終端的定位請(qǐng)求,確定與前次定位請(qǐng)求的時(shí)間間隔是否超過預(yù)定閾值,若為超過預(yù)定閾值,則拒絕執(zhí)行定位。
22.根據(jù)權(quán)利要求16所述位置服務(wù)器,其特征在于, 所述網(wǎng)格確定單元,用于首先在測(cè)試網(wǎng)格中查詢包含終端信息的測(cè)試網(wǎng)格,所述測(cè)試網(wǎng)格是與所述目標(biāo)位置信息對(duì)應(yīng)的測(cè)試網(wǎng)格,測(cè)試網(wǎng)格由地圖劃分正方形得到,且邊長(zhǎng)大于所述網(wǎng)格;然后確定查詢到的測(cè)試網(wǎng)格中包含的網(wǎng)格為目標(biāo)網(wǎng)格。
23.一種位置服務(wù)存儲(chǔ)設(shè)備,其特征在于,包括: 請(qǐng)求接收單元,用于接收位置服務(wù)器的查詢請(qǐng)求,所述查詢請(qǐng)求包含有待查詢的目標(biāo)網(wǎng)格; 數(shù)據(jù)存儲(chǔ)單元,用于以網(wǎng)格編號(hào)為關(guān)鍵字以終端信息為值進(jìn)行數(shù)據(jù)存儲(chǔ),且在每個(gè)位置服務(wù)存儲(chǔ)設(shè)備中存儲(chǔ)的最小粒度為所述網(wǎng)格對(duì)應(yīng)的正方形的邊長(zhǎng)的M倍,M大于等于2 ;所述網(wǎng)格是由地圖劃分正方形得到; 查詢單元,用于使用所述目標(biāo)網(wǎng)格的編號(hào)查詢并獲得與所述待查詢的目標(biāo)網(wǎng)格對(duì)應(yīng)的終端信息; 信息發(fā)送單元,用于將獲得的終端信息發(fā)送給所述位置服務(wù)器。
24.根據(jù)權(quán)利要求23所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于, 所述數(shù)據(jù)存儲(chǔ)單元,用于存儲(chǔ)的網(wǎng)格的網(wǎng)格編號(hào)按照哈希算法的規(guī)則進(jìn)行存儲(chǔ),并采用哈希桶排序。
25.根據(jù)權(quán)利要求23或24所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于,還包括: 信息接收單元,用于接收來自所述位置服務(wù)器發(fā)送的終端信息以及位置信息; 所述查詢單元,還用于查找是否已經(jīng)存在所述終端信息對(duì)應(yīng)的位置信息; 數(shù)據(jù)刪除單元,用于若所述查詢單元查詢結(jié)果為存在,則刪除查找到的位置信息; 所述數(shù)據(jù)存儲(chǔ)單元,用于若所述查詢單元查詢結(jié)果為不存在,或者,所述數(shù)據(jù)刪除單元?jiǎng)h除完畢后,將所述終端信息存放到與所述位置信息對(duì)應(yīng)的網(wǎng)格中,所述位置信息采用哈希表存儲(chǔ)。
26.根據(jù)權(quán)利要求25所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于,所述哈希表的值采用鏈表的數(shù)據(jù)結(jié)構(gòu); 所述數(shù)據(jù)存儲(chǔ)單元,用于將所述位置信息采用頭插法將位置信息插入與所述位置信息對(duì)應(yīng)的網(wǎng)格的鏈表中。
27.根據(jù)權(quán)利要求26所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于,還包括: 超時(shí)清理單元,用于讀取網(wǎng)格的回收時(shí)間,若回收時(shí)間距當(dāng)前時(shí)間超過預(yù)定閾值,則從所述鏈表的后端往前依次刪除超時(shí)的位置信息。
28.根據(jù)權(quán)利要求27所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于, 所述超時(shí)清理單元,用于按照預(yù)定的順序在所有網(wǎng)格中選取預(yù)定數(shù)量網(wǎng)格讀取回收時(shí)間。
29.根據(jù)權(quán)利要求27所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于,所述位置服務(wù)存儲(chǔ)設(shè)備還包括: 日志記錄單元,用于將位置信息的插入操作和刪除操作記錄到本端業(yè)務(wù)支撐系統(tǒng)日志中; 日志清理單元,用于在有本端業(yè)務(wù)支撐系統(tǒng)日志超時(shí)后,刪除超時(shí)的本端業(yè)務(wù)支撐系統(tǒng)日志; 恢復(fù)控制單元,用于在清內(nèi)存恢復(fù)過程中,按照本端業(yè)務(wù)支撐系統(tǒng)日志的記錄時(shí)間從先到后依次讀入并執(zhí)行業(yè)務(wù)支撐系統(tǒng)日志記錄的操作。
30.根據(jù)權(quán)利要求29所述位置服務(wù)存儲(chǔ)設(shè)備,其特征在于, 所述恢復(fù)控制單元,還用于在位置服務(wù)存儲(chǔ)設(shè)備擴(kuò)容過程中,獲取所有位置服務(wù)存儲(chǔ)設(shè)備的業(yè)務(wù)支撐系統(tǒng)日志;讀取獲取到的業(yè)務(wù)支撐系統(tǒng)日志的記錄,若當(dāng)前讀取到的記錄屬于本端位置服務(wù)存儲(chǔ)設(shè)備,則執(zhí)行當(dāng)前讀取到的記錄對(duì)應(yīng)的操作。
31.一種位置服務(wù)系統(tǒng),包括:位置服務(wù)器和位置服務(wù)存儲(chǔ)設(shè)備,位置服務(wù)器和位置服務(wù)存儲(chǔ)設(shè)備以可通信方式連接,其特征在于,所述位置服務(wù)器為權(quán)利要求16?22任意一項(xiàng)的位置服務(wù)器,所述位置服務(wù)存儲(chǔ)設(shè)備為權(quán)利要求23?30任意一項(xiàng)的位置服務(wù)存儲(chǔ)設(shè)備。
【文檔編號(hào)】H04W4/02GK104135715SQ201410256324
【公開日】2014年11月5日 申請(qǐng)日期:2014年6月10日 優(yōu)先權(quán)日:2014年6月10日
【發(fā)明者】楊岳軍, 姚曉光, 吳凡凡, 樊亮, 沙鷹, 牟露 申請(qǐng)人:騰訊科技(深圳)有限公司