国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于二維地理位置信息的數(shù)據(jù)集分片方法

      文檔序號(hào):6623601閱讀:601來(lái)源:國(guó)知局
      一種基于二維地理位置信息的數(shù)據(jù)集分片方法
      【專利摘要】本發(fā)明公開(kāi)了一種基于二維地理位置信息的數(shù)據(jù)集分片方法,包括:(1)將每條數(shù)據(jù)的二維的地理位置信息轉(zhuǎn)化為2進(jìn)制geoHash值;(2)依據(jù)geoHash值進(jìn)行分片,每個(gè)分片有公共的geoHash前綴,并在分片的過(guò)程中建立或更新片索引;(3)當(dāng)有新增數(shù)據(jù)時(shí),在索引中查找與新增數(shù)據(jù)具有最長(zhǎng)公共geoHash前綴的片,然后將數(shù)據(jù)插入到該片中,若數(shù)據(jù)插入導(dǎo)致片的大小超過(guò)設(shè)定值,則按照(2)對(duì)片進(jìn)行分裂。本發(fā)明利用將二維地理位置信息轉(zhuǎn)化為geoHash值后進(jìn)行數(shù)據(jù)分片,能盡量的保證地理位置上相鄰的數(shù)據(jù)被分在相同的片上,對(duì)基于地理位置的分布式應(yīng)用有很好的優(yōu)化作用。
      【專利說(shuō)明】一種基于二維地理位置信息的數(shù)據(jù)集分片方法

      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明屬于數(shù)據(jù)存儲(chǔ)【技術(shù)領(lǐng)域】,具體涉及一種基于二維地理位置信息的數(shù)據(jù)集分片方法。

      【背景技術(shù)】
      [0002]在大數(shù)據(jù)時(shí)代,當(dāng)數(shù)據(jù)量達(dá)到兆級(jí)別時(shí),單個(gè)內(nèi)存或磁盤(pán)存儲(chǔ)不下。在這種情況下,需要將數(shù)據(jù)集以分布式的方式進(jìn)行存儲(chǔ)。當(dāng)進(jìn)行分布式存儲(chǔ)時(shí),需要對(duì)數(shù)據(jù)集進(jìn)行分片,從而方便以片為單位對(duì)數(shù)據(jù)進(jìn)行組織、管理、遷移等操作。當(dāng)前熱門(mén)的NOSQL數(shù)據(jù)庫(kù)MongoDB在進(jìn)行分布式存儲(chǔ)時(shí),正是先對(duì)數(shù)據(jù)集進(jìn)行分片,然后在多個(gè)服務(wù)器上對(duì)片進(jìn)行管理。
      [0003]我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)時(shí),通常把一個(gè)較大的全局?jǐn)?shù)據(jù)庫(kù)按其數(shù)據(jù)項(xiàng)(即字段)或按某關(guān)鍵字的某些特征來(lái)進(jìn)行劃分,在這里我們稱之為數(shù)據(jù)分片,劃分出的各個(gè)片段組成一個(gè)個(gè)較小的局部數(shù)據(jù)庫(kù)。
      [0004]在進(jìn)行數(shù)據(jù)分片時(shí)并不是盲目地對(duì)數(shù)據(jù)庫(kù)進(jìn)行劃分。為了達(dá)到分片的目的,我們分片時(shí)必須遵循以下三個(gè)準(zhǔn)則;數(shù)據(jù)分片的類型一般可分為水平分片、垂直分片、混合分片三類。
      [0005](I)完備性準(zhǔn)則;必須把全局?jǐn)?shù)據(jù)庫(kù)的所有數(shù)據(jù)都映射到各個(gè)局部數(shù)據(jù)庫(kù)中,即絕不允許發(fā)生一個(gè)屬于全局關(guān)系的數(shù)據(jù)項(xiàng)目而不屬于任一個(gè)局部數(shù)據(jù)庫(kù)的情況。
      [0006](2)重構(gòu)準(zhǔn)則;劃分所采用的方法必須確保能夠由全局關(guān)系的各個(gè)局部數(shù)據(jù)庫(kù)來(lái)重建全局?jǐn)?shù)據(jù)庫(kù)。
      [0007](3)不相交準(zhǔn)則;對(duì)于水平劃分,要求一個(gè)全局關(guān)系被劃分后所得的各個(gè)數(shù)據(jù)片段互相不重疊,垂直劃可放寬此限制。
      [0008]當(dāng)前已有的分片方案中,一般是選擇一個(gè)一維的屬性作為片鍵,比如數(shù)據(jù)的ID,然后對(duì)這一維屬性根據(jù)線性范圍直接劃分為不同的片,這些分片方式不能保證同一個(gè)片上的數(shù)據(jù)在地理上是相近的,或者即使利用了 GeoHash來(lái)分片,也只是將GeoHash作為一個(gè)普通的一維屬性,然后根據(jù)GeoHash的范圍進(jìn)行劃分,沒(méi)有很好的利用GeoHash的特性,不能很好的保證片上數(shù)據(jù)在地理位置上是相鄰的。
      [0009]GeoHash是一種對(duì)地圖上的點(diǎn)進(jìn)行編碼的方法,它逐步的對(duì)地圖劃分為一個(gè)個(gè)網(wǎng)格,并按照點(diǎn)所在的網(wǎng)格來(lái)標(biāo)識(shí)點(diǎn);它將點(diǎn)的二維經(jīng)緯度信息轉(zhuǎn)化成一個(gè)一維的串,并且在大部分情況下,兩個(gè)串的公共前綴越長(zhǎng),他們?cè)诘乩砩暇驮浇咏?,而且,串的長(zhǎng)度越長(zhǎng),精度也就越高。


      【發(fā)明內(nèi)容】

      [0010]針對(duì)現(xiàn)有技術(shù)所存在的上述技術(shù)問(wèn)題,本發(fā)明提供了一種基于二維地理位置信息的數(shù)據(jù)集分片方法,能夠保證地理上相鄰的數(shù)據(jù)盡量分布在相同的片上。
      [0011]一種基于二維地理位置信息的數(shù)據(jù)集分片方法,所述的數(shù)據(jù)集中每條數(shù)據(jù)均含有關(guān)于經(jīng)度和緯度的二維地理位置信息,所述的數(shù)據(jù)集分片方法包括如下步驟:
      [0012](I)將數(shù)據(jù)集中每條數(shù)據(jù)的二維地理位置信息轉(zhuǎn)換為二進(jìn)制的GeoHash值;
      [0013](2)根據(jù)所述的GeoHash值對(duì)數(shù)據(jù)集進(jìn)行分片且每個(gè)片中的數(shù)據(jù)具有公共的GeoHash前綴,并在分片過(guò)程中建立并更新片的索引樹(shù);
      [0014](3)當(dāng)數(shù)據(jù)集有新增數(shù)據(jù)時(shí),從所述的索引樹(shù)中查找出與該新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中;若插入新增數(shù)據(jù)后,該片的大小超過(guò)預(yù)設(shè)的上限值,則對(duì)該片進(jìn)行分裂并更新索引樹(shù)。
      [0015]所述的步驟(2)中對(duì)數(shù)據(jù)集進(jìn)行分片的過(guò)程如下:
      [0016]初始時(shí),新建一個(gè)片作為父片,將數(shù)據(jù)集中所有數(shù)據(jù)放入父片中,且令父片的公共GeoHash前綴為null ;此時(shí),若父片的大小未超過(guò)預(yù)設(shè)的上限值M,則分片結(jié)束;若父片的大小超過(guò)上限值M,則對(duì)父片進(jìn)行分裂:
      [0017]將父片分成兩個(gè)子片A0和A1,令子片A0的公共GeoHash前綴為0,子片A1的公共GeoHash前綴為I ;進(jìn)而根據(jù)二進(jìn)制GeoHash值的首位編碼,將父片中的所有數(shù)據(jù)分配至子片A0和A1中,即GeoHash值首位編碼為O的數(shù)據(jù)分配至子片A0中,GeoHash值首位編碼為I的數(shù)據(jù)分配至子片A1中;分配完畢后,判斷子片Ac^P A1的大小是否超過(guò)上限值M:若均未超過(guò),則分片結(jié)束;若子片Ai的大小超過(guò)上限值M,則使子片Ai作為父片并對(duì)其進(jìn)行分裂:
      [0018]將父片Ai分成兩個(gè)子片Aitl和An,i為O或1,令子片Ai0的公共GeoHash前綴為1,子片Ail的公共GeoHash前綴為il ;進(jìn)而根據(jù)二進(jìn)制GeoHash值的第二位編碼,將父片Ai中的所有數(shù)據(jù)分配至子片Aitl和Ail中,即GeoHash值第二位編碼為O的數(shù)據(jù)分配至子片Ai0中,GeoHash值第二位編碼為I的數(shù)據(jù)分配至子片Ail中;分配完畢后,進(jìn)而判斷子片Aki和Ail的大小是否超過(guò)上限值M,若仍存在大小超過(guò)上限值M的子片,則根據(jù)以上操作繼續(xù)對(duì)該子片進(jìn)行分裂,直至所有子片大小都在上限值M以下,則分片結(jié)束。
      [0019]所述的步驟(2)中通過(guò)以下方法建立并更新片的索引樹(shù):
      [0020]分片過(guò)程中當(dāng)初始新建一個(gè)片作為父片時(shí),則為該父片對(duì)應(yīng)新建一個(gè)索引節(jié)點(diǎn)并使該節(jié)點(diǎn)作為索引樹(shù)的根節(jié)點(diǎn),并使該索引節(jié)點(diǎn)的片地址對(duì)應(yīng)為該父片在服務(wù)器中的存儲(chǔ)地址,左孩子節(jié)點(diǎn)地址和右孩子節(jié)點(diǎn)地址均為null ;
      [0021]在對(duì)任一父片進(jìn)行分裂后,為分裂得到的且不為空的子片對(duì)應(yīng)新建一個(gè)索引節(jié)點(diǎn),并令該索引節(jié)點(diǎn)的片地址對(duì)應(yīng)為子片在服務(wù)器中的存儲(chǔ)地址,左孩子節(jié)點(diǎn)地址和右孩子節(jié)點(diǎn)地址均為null ;同時(shí)將父片對(duì)應(yīng)索引節(jié)點(diǎn)的片地址置為null,左孩子節(jié)點(diǎn)地址指向父片分裂得到的且公共GeoHash前綴尾號(hào)為O的子片對(duì)應(yīng)的索引節(jié)點(diǎn)在服務(wù)器中的存儲(chǔ)地址,右孩子節(jié)點(diǎn)地址指向父片分裂得到的且公共GeoHash前綴尾號(hào)為I的子片對(duì)應(yīng)的索引節(jié)點(diǎn)在服務(wù)器中的存儲(chǔ)地址;
      [0022]所述的索引節(jié)點(diǎn)均包含有三個(gè)地址:左孩子節(jié)點(diǎn)地址、片地址、右孩子節(jié)點(diǎn)地址。
      [0023]所述的步驟(3)中通過(guò)以下方法從索引樹(shù)中查找出與新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中:
      [0024]從索引樹(shù)的根節(jié)點(diǎn)開(kāi)始,判斷新增數(shù)據(jù)GeoHash值的首位編碼:若首位編碼為O,則根據(jù)根節(jié)點(diǎn)的左孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并作為當(dāng)前節(jié)點(diǎn);若首位編碼為1,則根據(jù)根節(jié)點(diǎn)的右孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并作為當(dāng)前節(jié)點(diǎn);
      [0025]判斷當(dāng)前節(jié)點(diǎn)是否為索引樹(shù)的葉子節(jié)點(diǎn):若是,則根據(jù)當(dāng)前節(jié)點(diǎn)的片地址查找到對(duì)應(yīng)的片,作為與新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中;若否,則判斷新增數(shù)據(jù)GeoHash值的下一位編碼:若下一位編碼為0,則根據(jù)當(dāng)前節(jié)點(diǎn)的左孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并使其作為當(dāng)前節(jié)點(diǎn);若首位編碼為1,則根據(jù)當(dāng)前節(jié)點(diǎn)的右孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并使其作為當(dāng)前節(jié)點(diǎn);
      [0026]依此往下搜索直至判斷出當(dāng)前節(jié)點(diǎn)為索引樹(shù)的葉子節(jié)點(diǎn),則根據(jù)當(dāng)前節(jié)點(diǎn)的片地址查找到對(duì)應(yīng)的片,作為與新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中。
      [0027]本發(fā)明分片方法利用地理位置信息作為片鍵,并利用GeoHash的特點(diǎn),將具有相同GeoHash公共前綴的數(shù)據(jù)分在同一個(gè)片上,能盡量保證地理上相鄰的數(shù)據(jù)分布在相同的片上。這種分片方式,對(duì)于基于地理位置的應(yīng)用具有很好的實(shí)用價(jià)值,能夠優(yōu)化按照地理位置進(jìn)行查詢、統(tǒng)計(jì)的效率,能夠按照地理位置范圍來(lái)對(duì)數(shù)據(jù)進(jìn)行管理,按照這種方式分片后查詢效率大大提升。

      【專利附圖】

      【附圖說(shuō)明】
      [0028]圖1為本發(fā)明分片方法的步驟流程示意圖。
      [0029]圖2為分片索引結(jié)構(gòu)的示意圖。

      【具體實(shí)施方式】
      [0030]為了更為具體地描述本發(fā)明,下面結(jié)合附圖及【具體實(shí)施方式】對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。
      [0031]以下更為具體講述分片過(guò)程,首先需要分片的數(shù)據(jù)集中每條數(shù)據(jù)中的二維地理位置信息,即將經(jīng)緯度值轉(zhuǎn)化為geoHash ;如可將(緯度為42.6,經(jīng)度為-5.6)轉(zhuǎn)化成0110111111 11000 00100 00010,然后依據(jù)轉(zhuǎn)化所得的這個(gè)二進(jìn)制的geoHash值來(lái)對(duì)數(shù)據(jù)進(jìn)行分片,geoHash值長(zhǎng)度N根據(jù)數(shù)據(jù)地理位置精度要求進(jìn)行配置,長(zhǎng)度越長(zhǎng),誤差越小。
      [0032]如圖1所示,具體的分片過(guò)程如下:
      [0033](I)初始時(shí),所有的數(shù)據(jù)都在同一個(gè)片上,這個(gè)片的公共geoHash的前綴長(zhǎng)度初始時(shí)為0,即沒(méi)有公共前綴,此時(shí),建立一個(gè)索引的頭節(jié)點(diǎn),該頭結(jié)點(diǎn)值域?yàn)槌跏计鎯?chǔ)位置,左孩子和右孩子均為空。
      [0034](2)如果片的數(shù)據(jù)量大于M,則將其拆分為兩個(gè)子片,設(shè)父片的公共前綴為XXXXX,則兩個(gè)子片的公共前綴分別為XXXXX0、XXXXX1 ;Μ值可根據(jù)應(yīng)用的需求進(jìn)行配置,M值大,則分片的大小越大,片的數(shù)量較少。
      [0035](3)將geoHash前綴為xxxxxO的數(shù)據(jù)分配到公共前綴為xxxxxO的子片上,前綴為XXXXXl的數(shù)據(jù)分配到公共前綴為xxxxxl的子片上;數(shù)據(jù)分配完后,為不為空的子片建立新的節(jié)點(diǎn),讓父節(jié)點(diǎn)的左孩子指向前綴為xxxxxO的節(jié)點(diǎn),右孩子指向xxxxxl節(jié)點(diǎn);
      [0036]如果子片的數(shù)據(jù)量還是大于M,則重復(fù)(2)?(3)過(guò)程。
      [0037](4)如果片的公共前綴已經(jīng)達(dá)到了最大值,即公共前綴已經(jīng)與geoHash長(zhǎng)度相同,片的數(shù)據(jù)量還是大于M,這種情況說(shuō)明是geoHash精度不夠或者同一個(gè)地點(diǎn)的數(shù)據(jù)很多,因?yàn)榇藭r(shí)片中所有數(shù)據(jù)都有相同的geoHash,。這可能有如下3種情況:a) N的值設(shè)置過(guò)??;b)M設(shè)置過(guò)?。籧)數(shù)據(jù)集中有大量數(shù)據(jù)集中在相同的地點(diǎn)上,對(duì)于a)b)種情況,可以調(diào)整N和M值后重新分片,對(duì)于c)可對(duì)該片中的數(shù)據(jù)再選擇另外的關(guān)鍵字按照傳統(tǒng)的方法再進(jìn)行分片。
      [0038]建立如圖2所示的索引結(jié)構(gòu)概念圖,其中節(jié)點(diǎn)上方的值代表當(dāng)前節(jié)點(diǎn)所代表的數(shù)據(jù)片的公共geoHash前綴,即該片中所有的數(shù)據(jù)的geoHash都具有該前綴。
      [0039]索引中每個(gè)節(jié)點(diǎn)包含三個(gè)域,左孩子節(jié)點(diǎn),右孩子節(jié)點(diǎn),以及值域,值域代表當(dāng)前片的存儲(chǔ)位置。所有非葉子節(jié)點(diǎn)中的值域都為空,所有葉子節(jié)點(diǎn)中的左孩子和右孩子節(jié)點(diǎn)為空,葉子節(jié)點(diǎn)的值域一定不為空。
      [0040]初始片分好后,如果有新增的數(shù)據(jù),需要先在索引樹(shù)中查找到需要插入的片,然后進(jìn)行插入,插入后,如果片的大小超過(guò)M,則按照上述的分片過(guò)程對(duì)該片進(jìn)行拆分。
      [0041]查找的過(guò)程是根據(jù)待插入數(shù)據(jù)的geoHash值,從索引樹(shù)的頭結(jié)點(diǎn)和geoHash值得第一位開(kāi)始,依次取出geoHash值的每一位的值,如果為0,則查找左子樹(shù),為I則查找右子樹(shù),直到查找到葉子節(jié)點(diǎn)。如果查找到不為空的葉子節(jié)點(diǎn),則將數(shù)據(jù)插入到該節(jié)點(diǎn)指向的分片上;如果最后查找到空節(jié)點(diǎn),則需要新建一個(gè)分片將數(shù)據(jù)插入,并且需要新建一個(gè)索引節(jié)點(diǎn)來(lái)替換該空節(jié)點(diǎn)。
      [0042]按照上述方法步驟,我們對(duì)一個(gè)具體數(shù)據(jù)集進(jìn)行分片操作,該數(shù)據(jù)集初始時(shí)有371222條數(shù)據(jù),每條數(shù)據(jù)都具有經(jīng)緯度信息,經(jīng)緯度信息精確到小數(shù)點(diǎn)后6位。在本實(shí)施例中,將N設(shè)定為63位,以32位二進(jìn)制位表示精度,31位二進(jìn)制位表示緯度,數(shù)據(jù)分片大小M設(shè)定為500條數(shù)據(jù);數(shù)據(jù)分片過(guò)程是在內(nèi)存中進(jìn)行的,編程語(yǔ)言采用java。
      [0043]將數(shù)據(jù)讀入內(nèi)存后,用一個(gè)List進(jìn)行存放,將所有數(shù)據(jù)的經(jīng)緯度信息轉(zhuǎn)化為63位的geoHash值;本實(shí)施例中采用分別將精度緯度轉(zhuǎn)化之后再合并的方法。為了方便起見(jiàn),將所有的geoHash前面再拼接一個(gè)O,剛好64位,可以用一個(gè)long型的變量存儲(chǔ)。
      [0044]初始化一個(gè)空的索引頭,初始片為所有數(shù)據(jù),初始公共geoHash前綴為O (因?yàn)榈谝徊綖榱朔奖悖織l數(shù)據(jù)的geoHash前面都拼接一個(gè)0)。
      [0045]從初始片開(kāi)始,按上述進(jìn)行分裂,每個(gè)父片分裂得到兩個(gè)子List,并對(duì)應(yīng)的創(chuàng)建子節(jié)點(diǎn)。子節(jié)點(diǎn)的值域指向子List。并將父節(jié)點(diǎn)的孩子節(jié)點(diǎn)指向?qū)?yīng)的子節(jié)點(diǎn),然后將父節(jié)點(diǎn)的值域置為空。如果子List中的數(shù)據(jù)量仍然大于M,則繼續(xù)分裂,直到分裂后的片數(shù)據(jù)量小于500。
      [0046]當(dāng)后面有新增數(shù)據(jù)時(shí),按照上述相應(yīng)操作進(jìn)行數(shù)據(jù)插入,如果數(shù)據(jù)插入導(dǎo)致插入的片數(shù)據(jù)量大于500,則按照上述相應(yīng)操作進(jìn)行數(shù)據(jù)拆分。
      [0047]我們對(duì)本實(shí)施方式做的一個(gè)矩形搜索的性能對(duì)比結(jié)果如下,矩形范圍:左上角(經(jīng)度127,緯度29),右下角(經(jīng)度129,緯度27)。
      [0048]內(nèi)存分片搜索時(shí)間:0ms (按照本實(shí)施方式進(jìn)行分片);
      [0049]內(nèi)存不分片搜索時(shí)間:16ms (不分片);
      [0050]MongoDB搜索時(shí)間:3lms (按照id進(jìn)行分片)。
      【權(quán)利要求】
      1.一種基于二維地理位置信息的數(shù)據(jù)集分片方法,所述的數(shù)據(jù)集中每條數(shù)據(jù)均含有關(guān)于經(jīng)度和緯度的二維地理位置信息,所述的數(shù)據(jù)集分片方法包括如下步驟: (1)將數(shù)據(jù)集中每條數(shù)據(jù)的二維地理位置信息轉(zhuǎn)換為二進(jìn)制的GeoHash值; (2)根據(jù)所述的GeoHash值對(duì)數(shù)據(jù)集進(jìn)行分片且每個(gè)片中的數(shù)據(jù)具有公共的GeoHash前綴,并在分片過(guò)程中建立并更新片的索引樹(shù); (3)當(dāng)數(shù)據(jù)集有新增數(shù)據(jù)時(shí),從所述的索引樹(shù)中查找出與該新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中;若插入新增數(shù)據(jù)后,該片的大小超過(guò)預(yù)設(shè)的上限值,則對(duì)該片進(jìn)行分裂并更新索引樹(shù)。
      2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)集分片方法,其特征在于:所述的步驟(2)中對(duì)數(shù)據(jù)集進(jìn)行分片的過(guò)程如下: 初始時(shí),新建一個(gè)片作為父片,將數(shù)據(jù)集中所有數(shù)據(jù)放入父片中,且令父片的公共GeoHash前綴為null ;此時(shí),若父片的大小未超過(guò)預(yù)設(shè)的上限值M,則分片結(jié)束;若父片的大小超過(guò)上限值M,則對(duì)父片進(jìn)行分裂: 將父片分成兩個(gè)子片A0和A1,令子片A0的公共GeoHash前綴為0,子片A1的公共GeoHash前綴為I ;進(jìn)而根據(jù)二進(jìn)制GeoHash值的首位編碼,將父片中的所有數(shù)據(jù)分配至子片A0和A1中,即GeoHash值首位編碼為O的數(shù)據(jù)分配至子片A0中,GeoHash值首位編碼為I的數(shù)據(jù)分配至子片A1中;分配完畢后,判斷子片Ac^P A1的大小是否超過(guò)上限值M:若均未超過(guò),則分片結(jié)束;若子片Ai的大小超過(guò)上限值M,則使子片Ai作為父片并對(duì)其進(jìn)行分裂: 將父片Ai分成兩個(gè)子片Aitl和An,i為O或I,令子片Aitl的公共GeoHash前綴為1,子片Ail的公共GeoHash前綴為il ;進(jìn)而根據(jù)二進(jìn)制GeoHash值的第二位編碼,將父片Ai中的所有數(shù)據(jù)分配至子片Aitl和Ail中,即GeoHash值第二位編碼為O的數(shù)據(jù)分配至子片Aitl中,GeoHash值第二位編碼為I的數(shù)據(jù)分配至子片Ail中;分配完畢后,進(jìn)而判斷子片Aitl和Ail的大小是否超過(guò)上限值M,若仍存在大小超過(guò)上限值M的子片,則根據(jù)以上操作繼續(xù)對(duì)該子片進(jìn)行分裂,直至所有子片大小都在上限值M以下,則分片結(jié)束。
      3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)集分片方法,其特征在于:所述的步驟(2)中通過(guò)以下方法建立并更新片的索引樹(shù): 分片過(guò)程中當(dāng)初始新建一個(gè)片作為父片時(shí),則為該父片對(duì)應(yīng)新建一個(gè)索引節(jié)點(diǎn)并使該節(jié)點(diǎn)作為索引樹(shù)的根節(jié)點(diǎn),并使該索引節(jié)點(diǎn)的片地址對(duì)應(yīng)為該父片在服務(wù)器中的存儲(chǔ)地址,左孩子節(jié)點(diǎn)地址和右孩子節(jié)點(diǎn)地址均為null ; 在對(duì)任一父片進(jìn)行分裂后,為分裂得到的且不為空的子片對(duì)應(yīng)新建一個(gè)索引節(jié)點(diǎn),并令該索引節(jié)點(diǎn)的片地址對(duì)應(yīng)為子片在服務(wù)器中的存儲(chǔ)地址,左孩子節(jié)點(diǎn)地址和右孩子節(jié)點(diǎn)地址均為null ;同時(shí)將父片對(duì)應(yīng)索引節(jié)點(diǎn)的片地址置為null,左孩子節(jié)點(diǎn)地址指向父片分裂得到的且公共GeoHash前綴尾號(hào)為O的子片對(duì)應(yīng)的索引節(jié)點(diǎn)在服務(wù)器中的存儲(chǔ)地址,右孩子節(jié)點(diǎn)地址指向父片分裂得到的且公共GeoHash前綴尾號(hào)為I的子片對(duì)應(yīng)的索引節(jié)點(diǎn)在服務(wù)器中的存儲(chǔ)地址; 所述的索引節(jié)點(diǎn)均包含有三個(gè)地址:左孩子節(jié)點(diǎn)地址、片地址、右孩子節(jié)點(diǎn)地址。
      4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)集分片方法,其特征在于:所述的步驟(3)中通過(guò)以下方法從索引樹(shù)中查找出與新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中: 從索引樹(shù)的根節(jié)點(diǎn)開(kāi)始,判斷新增數(shù)據(jù)GeoHash值的首位編碼:若首位編碼為0,則根據(jù)根節(jié)點(diǎn)的左孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并作為當(dāng)前節(jié)點(diǎn);若首位編碼為1,則根據(jù)根節(jié)點(diǎn)的右孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并作為當(dāng)前節(jié)點(diǎn); 判斷當(dāng)前節(jié)點(diǎn)是否為索引樹(shù)的葉子節(jié)點(diǎn):若是,則根據(jù)當(dāng)前節(jié)點(diǎn)的片地址查找到對(duì)應(yīng)的片,作為與新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中;若否,則判斷新增數(shù)據(jù)GeoHash值的下一位編碼:若下一位編碼為0,則根據(jù)當(dāng)前節(jié)點(diǎn)的左孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并使其作為當(dāng)前節(jié)點(diǎn);若首位編碼為1,則根據(jù)當(dāng)前節(jié)點(diǎn)的右孩子節(jié)點(diǎn)地址查找到下一索引節(jié)點(diǎn)并使其作為當(dāng)前節(jié)點(diǎn); 依此往下搜索直至判斷出當(dāng)前節(jié)點(diǎn)為索引樹(shù)的葉子節(jié)點(diǎn),則根據(jù)當(dāng)前節(jié)點(diǎn)的片地址查找到對(duì)應(yīng)的片,作為與新增數(shù)據(jù)具有最長(zhǎng)公共GeoHash前綴的片,并將該新增數(shù)據(jù)插入該片中。
      【文檔編號(hào)】G06F17/30GK104199860SQ201410403157
      【公開(kāi)日】2014年12月10日 申請(qǐng)日期:2014年8月15日 優(yōu)先權(quán)日:2014年8月15日
      【發(fā)明者】吳朝暉, 劉娜, 陳華鈞, 鄭國(guó)軸 申請(qǐng)人:浙江大學(xué)
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1