(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-10-12
(54)【発明の名称】ヒルベルト曲線に基づくR木インデックスのマージ更新方法、装置及び媒体
(51)【国際特許分類】
G06F 16/901 20190101AFI20231004BHJP
【FI】
G06F16/901
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023519043
(86)(22)【出願日】2020-10-16
(85)【翻訳文提出日】2023-05-19
(86)【国際出願番号】 CN2020121521
(87)【国際公開番号】W WO2022061995
(87)【国際公開日】2022-03-31
(31)【優先権主張番号】202011026535.8
(32)【優先日】2020-09-25
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】505072650
【氏名又は名称】浙江大学
【氏名又は名称原語表記】ZHEJIANG UNIVERSITY
(74)【代理人】
【識別番号】100128347
【氏名又は名称】西内 盛二
(72)【発明者】
【氏名】▲張▼ ▲豊▼
(72)【発明者】
【氏名】▲銭▼ 伯至
(72)【発明者】
【氏名】汪 愿愿
(72)【発明者】
【氏名】胡 林舒
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175DA10
5B175KA06
(57)【要約】
【課題】本発明はヒルベルト曲線に基づくR木インデックスのマージ更新方法、装置及び媒体を提供する。
【解決手段】
方法のステップは、マージ対象の第1R木と、第1R木を挿入する第2R木とを取得し、R木の非葉ノードには含まれるオブジェクトのヒルベルト値の上下限範囲が記憶されるステップS1と、「上から下への」階層クエリアルゴリズムによって第1R木の葉ノード層におけるマージされた各葉ノードの第2R木の葉ノード層での挿入対象ノードをクエリするステップS2と、「下から上への」階層調整アルゴリズムによって第1R木における各葉ノードに対して、それに含まれる空間オブジェクトをヒルベルト値の順序に従ってS2において決定された挿入対象ノードに挿入して、2本のR木のマージを実現するステップS3と、マージ後の第2R木に対して、葉ノードから根ノードまでの順序に従って各ノードの記憶情報を1層ずつ更新するステップS4と、を含む。本発明は地理時空大データの高性能記憶分野において重要な実際の応用価値がある。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ヒルベルト曲線に基づくR木インデックスのマージ更新方法であって、以下のステップS1~ステップS4を含み、
前記ステップS1では、マージ対象の第1R木と、第1R木を挿入する第2R木とを取得し、第1R木の高さが第2R木の高さ以下であり、各本のR木において、各葉ノードの記憶情報が空間オブジェクトの最小外接矩形枠及びその主キーポインタを含み、各非葉ノードの記憶情報がすべての子ノードの最小外接矩形枠、すべての子ノードの主キーポインタセット、最小外接矩形枠におけるすべての空間オブジェクトの最大ヒルベルト値、及び最小外接矩形枠におけるすべての空間オブジェクトの最小ヒルベルト値を含み、
前記ステップS2では、各ノードに記憶されるヒルベルト値情報に基づいて、根ノード層から葉ノード層まで1層ずつクエリする順序に従って、第1R木の葉ノード層におけるマージされた各葉ノードの第2R木の葉ノード層での挿入対象ノードをクエリして取得し、
前記ステップS3では、第1R木における各葉ノードに対して、それに含まれる空間オブジェクトをヒルベルト値の順序に従って前記ステップS2において決定された挿入対象ノードに挿入して、2本のR木のマージを実現し、且つマージ過程において葉ノードの容量がオーバーフローした場合、第2R木に対してノード分割を行って、第1R木及び第2R木に含まれるすべての空間オブジェクトをヒルベルト値の順序に従って分割後の第2R木のすべての葉ノードに改めて割り当てる必要があり、
前記ステップS4では、第1R木とマージした後の第2R木に対して、葉ノードから根ノードまでの順序に従って各ノード中の記憶情報を1層ずつ更新する
ことを特徴とするヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項2】
前記R木において、各空間オブジェクトのヒルベルト値は該空間オブジェクトの最小外接矩形枠の中心点の2次元座標のヒルベルト曲線上での1次元コード値である
ことを特徴とする請求項1に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項3】
前記R木の構築過程は、以下のステップS11~ステップS13を含み、
前記ステップS11では、すべての空間オブジェクトをヒルベルト値に従って昇順に配列し、
前記ステップS12では、すべての空間オブジェクトを抽出してk個の葉ノードを取得してノードの構築順序に従って先入れ先出し待ち行列に加えるまで、R木の各ノードの容量cに基づいて、上位c個の空間オブジェクトを抽出して1つのR木の1番目の葉ノードに構築し、その次のc個の空間オブジェクトを抽出して次の葉ノードに構築するように繰り返し、
前記ステップS13では、葉ノードから根ノードまでの順序に従って非葉ノードを1層ずつ構築し、且つ各層の非葉ノードに対しては、先入れ先出し待ち行列におけるすべてのノードを抽出して現在の非葉ノード層を取得してその中のすべての非葉ノードをノードの構築順序に従って新たな先入れ先出し待ち行列に加えて次の層の非葉ノードの構築に用いるまで、その子ノード層の先入れ先出し待ち行列から上位c個のノードを抽出して1番目の非葉ノードに構築し、更に先入れ先出し待ち行列から上位c個のノードを抽出して次の非葉ノードに構築するように繰り返す
ことを特徴とする請求項1に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項4】
前記ステップS2の具体的な実現方法は、以下のステップS21~ステップS25を含み、
前記ステップS21では、第1R木における現在の検索対象ノード層の階層nを1として設定し、第2R木における現在の検索対象ノード層の階層mを1として設定し、第1R木の高さがH
1であり、第2R木の高さがH
2であり、第1R木及び第2R木の第1層のノード層がいずれも根ノードであり、第2R木の根ノードが第1R木の根ノードに対応する挿入対象ノードとされ、
前記ステップS22では、第1R木における第n層のノードに対して、それぞれ各ノードx
i
nのすべての子ノードセットX
i
n+1を取得するとともに、第2R木からノードx
i
nに対応する挿入対象ノードのすべての子ノードセットY
i
n+1を取得し、セットX
i
n+1に含まれる各ノードx
i
n+1に対して、ノードx
i
n+1に記憶される最大ヒルベルト値maxLHV
i及び最小ヒルベルト値minLHV
iに基づいて、セットY
i
n+1に含まれるすべてのノードから最大ヒルベルト値がminLHV
iよりも大きい1番目のノードのポインタAを検索し、且つセットY
i
n+1に含まれるすべてのノードから最大ヒルベルト値がmaxLHV
iよりも大きい1番目のノードのポインタBを検索し、セットY
i
n+1におけるポインタ値が[A,B]区間内にあるノードをノードx
i
nの挿入対象ノードとし、
前記ステップS23では、n及びmの値にそれぞれ1を加えてから前記ステップS22を繰り返し、
前記ステップS24では、n及びmの値がいずれもH
1になるまで、前記ステップS23を繰り返し続けて、第1R木における各葉ノードの第2R木での対応する挿入対象ノードを取得し、
前記ステップS25では、判断過程を実行し続け、m<H
2の場合、nの値が変化しないように維持し且つm値に1を加えてから前記ステップS22を繰り返し、m=H
2になると、クエリが完了され、第1R木の葉ノード層におけるマージされた各葉ノードがいずれも第2R木の葉ノード層から対応する挿入対象ノードを見つけるようにする
ことを特徴とする請求項1に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項5】
前記ステップS22において、セットY
i
n+1に含まれるすべてのノードからそれぞれバイナリ検索の方式でポインタA及びポインタBに対応するノードを検索する
ことを特徴とする請求項4に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項6】
前記ステップS3において、2本のR木のマージ過程において葉ノードの容量がオーバーフローした場合、以下のステップS31~ステップS33によってオーバーフローに対してノード分割処理を行う必要があり、
前記ステップS31において、第1R木及び第2R木に含まれるすべての空間オブジェクトの総数の、第2R木のノード容量に対するオーバーフローオブジェクトの数を計算し、
前記ステップS32において、第2R木の葉ノードを分割して、すべてのオーバーフローオブジェクトを収容するための最少の追加の葉ノードを作成し、
前記ステップS33において、第1R木及び第2R木に含まれるすべての空間オブジェクトをヒルベルト値に従って昇順に配列し、次に第2R木の分割後の各葉ノードに順番に改めて割り当て、
前記ステップS34において、葉ノード層から根ノード層まで1層ずつ調整する順序に従って、第2R木の各層の非葉ノードに対してノード容量オーバーフロー判断を行い、1層の非葉ノードにノード容量オーバーフローが生じた場合、該層の非葉ノードに対してノード分割を行って、該層の非葉ノードのすべての子ノードを分割後の該層の非葉ノードに改めて割り当て、最終的に根ノードの調整を完了した後に第2R木のノード分割処理を完了する
ことを特徴とする請求項1に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項7】
前記ステップS34において、根ノードにノード容量オーバーフローが生じた場合、根ノードを2つのノードに分割して、この2つのノードを子ノードとして1つの根ノードを改めて構築する
ことを特徴とする請求項6に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項8】
前記ステップS3において、2本のR木をマージした後、各葉ノードにおける空間オブジェクトをヒルベルト値に従って昇順に配列する
ことを特徴とする請求項6に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法。
【請求項9】
ヒルベルト曲線に基づくR木インデックスのマージ更新装置であって、
コンピュータプログラムを記憶するためのメモリと、
前記コンピュータプログラムを実行したとき、請求項1~8のいずれか1項に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法を実現するためのプロセッサと、を備える
ことを特徴とするヒルベルト曲線に基づくR木インデックスのマージ更新装置。
【請求項10】
コンピュータ読み取り可能な記憶媒体であって、
コンピュータプログラムが記憶され、前記コンピュータプログラムがプロセッサにより実行されたとき、請求項1~8のいずれか1項に記載のヒルベルト曲線に基づくR木インデックスのマージ更新方法を実現する
ことを特徴とするコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータの検索及び更新の技術分野に関し、特にヒルベルトR木インデックスのマージ更新技術に関する。
【背景技術】
【0002】
空間データの更新頻度は地理情報データ収集装置の発展につれて徐々に高まり、空間データの管理は効率的なクエリニーズを満足する必要があるだけでなく、迅速な更新ニーズを考慮する必要もある。LSM木構造を組み合わせた空間インデックスは空間データの頻繁な挿入及び更新のニーズを効果的にサポートすることができ、LSM R木インデックスはDBH木、DHVB木及びSHB木よりも汎用性及び安定性が高い。しかしながら、LSM R木の実際の応用過程は大量のR木のマージ操作に関する場合が多く、R木はマージ過程においてシステムの一定の内部記憶及び計算資源を占有してこの間にインデックスに対してクエリ、挿入、削除などの操作を行う効率に影響することとなる。従って、R木のマージ効率を向上させることによりLSM R木の利用可能性を全体的に向上させる効率的なヒルベルトR木のマージアルゴリズムを必要とする。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本発明の目的は従来技術における高周波時空間データを挿入する際にインデックスの更新効率及びクエリ効率が低い問題を克服して、ヒルベルト曲線に基づく改良されたR木インデックスを提供することである。
【課題を解決するための手段】
【0004】
本発明が用いる具体的な技術案は以下の通りである。
【0005】
ヒルベルト曲線に基づくR木インデックスのマージ更新方法であって、
マージ対象の第1R木と、第1R木を挿入する第2R木とを取得し、第1R木の高さが第2R木の高さ以下であり、各本のR木において、各葉ノードの記憶情報が空間オブジェクトの最小外接矩形枠及びその主キーポインタを含み、各非葉ノードの記憶情報がすべての子ノードの最小外接矩形枠、すべての子ノードの主キーポインタセット、最小外接矩形枠におけるすべての空間オブジェクトの最大ヒルベルト値、及び最小外接矩形枠におけるすべての空間オブジェクトの最小ヒルベルト値を含むステップS1と、
各ノードに記憶されるヒルベルト値情報に基づいて、根ノード層から葉ノード層まで1層ずつクエリする順序に従って、第1R木の葉ノード層におけるマージされた各葉ノードの第2R木の葉ノード層での挿入対象ノードをクエリして取得するステップS2と、
第1R木における各葉ノードに対して、それに含まれる空間オブジェクトをヒルベルト値の順序に従ってS2において決定された挿入対象ノードに挿入して、2本のR木のマージを実現し、且つマージ過程において葉ノードの容量がオーバーフローした場合、第2R木に対してノード分割を行って、第1R木及び第2R木に含まれるすべての空間オブジェクトをヒルベルト値の順序に従って分割後の第2R木のすべての葉ノードに改めて割り当てる必要があるステップS3と、
第1R木とマージした後の第2R木に対して、葉ノードから根ノードまでの順序に従って各ノードの記憶情報を1層ずつ更新するステップS4と、を含む。
【発明の効果】
【0006】
従来技術に比べて、本発明は以下の有益な効果を有する。
【0007】
本発明は「上から下への」階層クエリアルゴリズム及び「下から上への」階層調整アルゴリズムによってヒルベルトR木の迅速なマージ更新を実現することができる。マージ過程において、各挿入対象のノードは1回しか読み取られず、各ノードの書き込み及び分割も1回しか行われない。1つずつ挿入する方式に比べて、磁気ディスクの読み書き回数を大幅に減少させ、ヒルベルトR木のマージ効率を向上させ、R木のマージが空間インデックス全体の操作に与えた影響を軽減する。それと同時に、改良されたヒルベルトR木は一括挿入・均一分割の方式を用い、ノードの充填率をある程度で向上させ、R木の空間使用率を向上させることもでき、従って、クエリ効率の面でもある程度で向上する。
【図面の簡単な説明】
【0008】
【
図2】
図2は改良されたヒルベルトR木構造を示す図である。
【
図4】
図4はR木と異なるデータ量のR木とのマージ時間を比較する折れ線グラフである。
【
図5】
図5はR木の空間範囲のクエリ効率を比較する折れ線グラフである。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら具体的な実施形態によって本発明を更に詳述及び説明する。互いに衝突しない限り、本発明の各実施形態の技術的特徴はいずれも互いに組み合わせられてもよい。
【0010】
R木はマージ過程においてシステムの一定の内部記憶及び計算資源を占有してこの間にインデックスに対してクエリ、挿入、削除などの操作を行う効率に影響することとなる。従って、効率的なヒルベルトR木のマージ方法によって、上記状況の発生を減少させて木空間インデックスの使用効率を全体的に向上させることができる。本発明は従来のヒルベルトR木構造を改良して、改良されたヒルベルトR木のマージ方法を設計し、ヒルベルトR木の効率的なマージを実現する。
【0011】
図1に示すように、本発明の好適な実施例では、ヒルベルト曲線に基づくR木インデックスのマージ更新方法を提供し、該方法のステップは以下の通りである。
【0012】
S1では、まず、2本のR木を取得し、それらがそれぞれマージ対象の第1R木及び第1R木を挿入する第2R木である。叙述しやすくするために、以下に第1R木をR1として記し、第2R木をR2として記す。インデックスのマージがいずれも低位層から高位層へ行われるため、木R2の高さが必ず木R1の高さ以上である。
【0013】
本発明における木R1及び木R2がいずれも改良されたヒルベルトR木であり、2本のR木の基本構造が同じである。用語の意味を一致させるために、以下にR木の葉ノードをR木における子ノードがないノード即ち最後の層のノードとして定義し、R木の根ノードがR木における第1層のノード即ち最上層のノードであり、R木におけるノードの階層は、根ノードから根ノードの階層を第1層、根ノードの子ノードの階層を第2層として設定し、これによって類推し、あるノードの階層が第L層である場合、その子ノードの階層が第L+1層であり、R木の高さがR木におけるすべてのノードの階層の最大値である。
【0014】
各本のR木において、改良されたヒルベルトR木の葉ノードClは通常のヒルベルトR木の葉ノードの構造と一致し、各葉ノードの記憶情報が空間オブジェクトの最小外接矩形枠及びその主キーポインタであり、即ちCl=(R,object_id)である。
【0015】
しかしながら、非葉ノードCnに対して、2本の改良されたヒルベルトR木はいずれも元の動的ヒルベルトR木の非葉ノードの構造を基に、最小ヒルベルト値が追加して記憶され、従って、各非葉ノードの記憶情報は該ノードのすべての子ノードの最小外接矩形枠R、該ノードのすべての子ノードの主キーポインタセットptr、最小外接矩形枠Rにおけるすべての空間オブジェクトの最大ヒルベルト値maxLHV及び最小外接矩形枠Rにおけるすべての空間オブジェクトの最小ヒルベルト値minLHVであり、即ちCn=(R,ptr,maxLHV,minLHV)である。
【0016】
図2は改良されたヒルベルトR木構造の模式図であり、図面から分かるように、ノードI、ノードII、ノードIIIが3つの非葉ノードである。ノードIIを例とし、3つの空間オブジェクトが含まれており、そのヒルベルト値がそれぞれ5010、7671及び13646であり、従って、ノードIIに記憶される最大ヒルベルト値maxLHVが13646であり、最小ヒルベルト値minLHVが5010である。根ノードはノードI、ノードII、ノードIIIを含み、従って、根ノードに保存される必要がある最大ヒルベルト値LHVは14033であり、最小ヒルベルト値minLHVは415である。
【0017】
該改良されたヒルベルトR木において、ノードにおけるすべての空間オブジェクトのヒルベルト値範囲を記録することにより、各空間オブジェクトの挿入に対していずれも根ノードからクエリする必要とせずに、このノードにおける空間オブジェクトの挿入対象のヒルベルトR木における非葉ノードでの経路を決定することができる。これにより、磁気ディスクの読み書き回数を減少させてマージ効率を向上させることができる。
【0018】
本発明に係る改良されたヒルベルトR木において、最小外接矩形のヒルベルト値の計算方式は様々あり、第1)としては、矩形の中心点を2次元のヒルベルト値として計算し、第2)としては、左下角座標及び右上角座標を4次元点のヒルベルト値として計算し、第3)としては、矩形の中心点及び中心から矩形境界までの距離dx、dyを4次元点のヒルベルト値として計算する。異なるヒルベルト値の計算方式によって複数の集中状況が生じることとなる。
【0019】
本実施例では、好ましくは、空間オブジェクトの最小外接矩形枠の中心点の2次元座標のヒルベルト曲線上での1次元コード値を各空間オブジェクトのヒルベルト値とする。ヒルベルト値の符号化過程は任意の従来技術を用いてもよく、理解しやすくするために、以下に符号化過程を提供し、
ヒルベルト曲線の次数がnであって、空間データの座標がx及びyである場合には、
ステップ1において、最小外接矩形枠の中心点の2次元座標x及びyを読み取って、x及びy値を長さが2nであるバイナリ値に変換してxB、yBで示し、
ステップ2において、順番にそれぞれxB及びyBにおける1ビットのバイナリ値を抽出して組み合わせて、バイナリ値セクションを取得し、第i組のバイナリ値セクションをxi
Byi
Bとして記し、
ステップ3において、すべてのバイナリ値セクションを変換し、「00」を00に変換し、「01」を01に変換し、「10」を11に変換し、「11」を10に変換し、
ステップ4において、すべての変換後のバイナリ値セクションを改めて順番に組み合わせて、完全なバイナリ値を取得して十進値即ちヒルベルト値に変換する。
【0020】
また、理解しやすくするために、以下にヒルベルトR木の構築過程を詳しく説明するが、注意すべきことは、R木の構築過程は本発明に必要なステップではなく、本発明は構築されたR木をマージするためのものであってもよい。ヒルベルトR木の構築過程は、
各空間オブジェクトのヒルベルトを計算した後、すべての空間オブジェクトをヒルベルト値に従って昇順に配列するS11と、
すべての空間オブジェクトを抽出してk個の葉ノードを取得してノードの構築順序に従って先入れ先出し待ち行列に加えるまで、R木の各ノードの容量cに基づいて、上位c個の空間オブジェクトを抽出して1つのR木の1番目の葉ノードに構築し、その次のc個の空間オブジェクトを抽出して次の葉ノードに構築するように繰り返すS12と、
葉ノードから根ノードまでの順序に従って非葉ノードを1層ずつ構築し、且つ各層の非葉ノードに対しては、先入れ先出し待ち行列におけるすべてのノードを抽出して現在の非葉ノード層を取得してその中のすべての非葉ノードをノードの構築順序に従って新たな先入れ先出し待ち行列に加えて次の層の非葉ノードの構築に用いるまで、その子ノード層の先入れ先出し待ち行列から上位c個のノードを抽出して1番目の非葉ノードに構築し、更に先入れ先出し待ち行列から上位c個のノードを抽出して次の非葉ノードに構築するように繰り返すS13と、を含む。
【0021】
S2では、各ノードに記憶されるヒルベルト値情報に基づいて、根ノード層から葉ノード層まで1層ずつクエリする順序に従って、第1R木の葉ノード層におけるマージされた各葉ノードの第2R木の葉ノード層での挿入対象ノードをクエリして取得する。クエリ過程において、挿入対象ノードの決定原則は、マージされたノードのヒルベルト値範囲を挿入されたノードのヒルベルト値範囲内にできる限り完全にすることである。
【0022】
本実施例では、S2における該クエリ過程は「上から下への」階層クエリアルゴリズムを用い、該階層クエリアルゴリズムの具体的な実現過程は以下の通りである。
【0023】
S21では、第1R木における現在の検索対象ノード層の階層nを1として設定し、第2R木における現在の検索対象ノード層の階層mを1として設定し、第1R木の高さがH1であり、第2R木の高さがH2であり、第1R木及び第2R木の第1層のノード層がいずれも根ノードであり、第2R木の根ノードが第1R木の根ノードに対応する挿入対象ノードとされ、
S22では、第1R木における第n層のノードに対して、それぞれ各ノードxi
nのすべての子ノードセットXi
n+1を取得するとともに、第2R木からノードxi
nに対応する挿入対象ノードのすべての子ノードセットYi
n+1を取得し、セットXi
n+1に含まれる各ノードxi
n+1に対して、ノードxi
n+1に記憶される最大ヒルベルト値maxLHVi及び最小ヒルベルト値minLHViに基づいて、セットYi
n+1に含まれるすべてのノードから最大ヒルベルト値がminLHViよりも大きい1番目のノードのポインタAを検索し、且つセットYi
n+1に含まれるすべてのノードから最大ヒルベルト値がmaxLHViよりも大きい1番目のノードのポインタBを検索し、セットYi
n+1におけるポインタ値が[A,B]区間内にあるノードをノードxi
nの挿入対象ノードとする。
【0024】
S22を実行するとき、セットYi
n+1に含まれるすべてのノードからそれぞれバイナリ検索の方式でポインタA及びポインタBに対応するノードを検索してもよい。
【0025】
S23では、n及びmの値にそれぞれ1を加えてからS22を繰り返し、
S24では、n及びmの値がいずれもH1になるまで、S23を繰り返し続けて、第1R木における各葉ノードの第2R木での対応する挿入対象ノードを取得し、
S25では、判断過程を実行し続け、m<H2の場合、nの値が変化しないように維持し且つm値に1を加えてからS22を繰り返し、m=H2になると、クエリが完了され、第1R木の葉ノード層におけるマージされた各葉ノードがいずれも第2R木の葉ノード層から対応する挿入対象ノードを見つけるようにする。
【0026】
該階層クエリアルゴリズムにおいて、ステップS22を初めて実行する際に根ノードの挿入対象ノードを対応してクエリする。まず、R1の根ノードを読み取って、その子ノードのセットXi
2を取得し、下付き文字iがi番目のノードを表し、以下も同様である。改良されたヒルベルトR木ノードの特徴に基づいて、セットXi
2におけるノードに該ノードにおける空間オブジェクトのヒルベルト値範囲が記憶される。セットXi
2における各ノードxi
2に対して、その最小ヒルベルト値minLHVi及び最大ヒルベルト値LHViに基づいて、バイナリ検索の方式を用いて、R2木の根ノードの子ノードセットYi
2におけるmaxLHVがminLHViよりも大きい1番目の子ノードポインタを計算してfromPageiとして記す。同様に、R2木の根ノードの子ノードYi
2におけるmaxLHVがLHViよりも大きい1番目の子ノードポインタを計算してtoPageiとして記す。以上から分かるように、ノードxi
2における空間オブジェクトを挿入すべき磁気ディスクのページ位置PageはfromPagei≦Page≦toPageiを満足し、即ちfromPageiからtoPageiまでの範囲内のノードに挿入する。セットXi
2における各ノードのfromPagei及びtoPageiを計算し、このとき、R1木の第2層の各ノードはR2木の根ノードから挿入位置でのノードのポインタを見つける。その後でS23を実行するとき、ポインタ値に基づいてR2木の第2層のノードを見つけ、更に上記と同様の方式でR1木の第3層のノードにおけるR2木の第3層のノードに対応する位置を見つける。この方式で階層的に検索し、階層がR1木の葉ノードに対応する空間オブジェクトになると、R1木を更に検索して細分することができないが、R2木はS24の実行過程において更に葉ノードを見つければ、対応するR1木における空間オブジェクトを該葉ノードに一括挿入する。
【0027】
S3では、第1R木における各葉ノードに対して、それに含まれる空間オブジェクトをヒルベルト値の順序に従ってS2において決定された挿入対象ノードに挿入して、2本のR木のマージを実現する。そして、マージ過程において葉ノードの容量がオーバーフローした場合、第2R木に対してノード分割を行って、第1R木及び第2R木に含まれるすべての空間オブジェクトをヒルベルト値の順序に従って分割後の第2R木のすべての葉ノードに改めて割り当てる必要がある。
【0028】
第2R木に対してノード分割を行う方法は従来技術におけるノードインデックスの分割方式で処理してもよく、本実施例では、一括且つ迅速なR木のマージを実現するために、「下から上への」階層調整アルゴリズムを提供し、それにより第2R木に対してノードインデックス分割を行うことを容易にし、その作り方はS31~S33に示され、
S31において、第1R木及び第2R木に含まれるすべての空間オブジェクトの総数の、第2R木のノード容量に対するオーバーフローオブジェクトの数を計算し、
S32において、第2R木の葉ノードを分割して、すべてのオーバーフローオブジェクトを収容するための最少の追加の葉ノードを作成し、
S33において、第1R木及び第2R木に含まれるすべての空間オブジェクトをヒルベルト値に従って昇順に配列し、次に第2R木の分割後の各葉ノードに順番に改めて割り当て、
S34において、葉ノード層から根ノード層まで1層ずつ調整する順序に従って、第2R木の各層の非葉ノードに対してノード容量オーバーフロー判断を行い、1層の非葉ノードにノード容量オーバーフローが生じた場合、該層の非葉ノードに対してノード分割を行って、該層の非葉ノードのすべての子ノードを分割後の該層の非葉ノードに改めて割り当て、最終的に根ノードの調整を完了した後に第2R木のノード分割処理を完了する。
【0029】
この方法に基づいて、まず最後の層のすべての葉ノードに対して空間オブジェクトデータの挿入及び分割を実現し、その後、前の層の非葉ノードを上向きに調整する。葉ノード層におけるノード分割につれて、ノードの数が増加することとなり、下から数えて第2層の非葉ノードのオーバーフロー状況を引き起こす恐れがある。従って、その後、下から数えて第2層のノードを調整し、同様の方式でノード分割を行い、根ノードに調整するまで続く。根ノードにノード容量オーバーフローが生じた場合、根ノードを2つのノードに分割して、この2つのノードを子ノードとして1つの根ノードに改めて構築する。
【0030】
なお、2本のR木のマージ過程において、第1R木の空間オブジェクトを第2R木の挿入対象ノードに挿入するとき、ヒルベルト値の順序に従って挿入すべきであり、これにより、最終的な各葉ノードにおけるすべての空間オブジェクトをヒルベルト値に従って昇順に配列し、すべての葉ノード全体も最大ヒルベルト値に従って昇順に配列するように確保する。
【0031】
S4では、ノードはマージ、分割された後、それに記憶される空間オブジェクトが変化することとなるため、ノードの記憶情報は変化することとなり、従って、第1R木とマージした後の第2R木に対して、葉ノードから根ノードまでの順序に従って各ノードの記憶情報を1層ずつ更新する必要がある。葉ノードの場合、更新すべき記憶情報は空間オブジェクトの最小外接矩形枠R、主キーポインタobject_idを含み、非葉ノードの場合、更新すべき記憶情報は空間オブジェクトの最小外接矩形枠R、主キーポインタセットprt、最大ヒルベルト値maxLHV及び最小ヒルベルト値minLHVを含む。
【0032】
本発明の技術的効果を更に説明するために、以下に1つの具体的な実例によって上記ヒルベルト曲線に基づくR木インデックスのマージ更新方法の具体的な空間データにおける効果を示す。
【0033】
実施例
本実施例のステップ及び具体的な実施形態は上記ステップ即ちステップS1~S4と同様であり、且つステップS2は具体的にS21~S25により実現され、ステップS3は具体的にS31~S34により実現され、ここで詳細な説明は省略する。以下、実施過程及び実施結果の一部を示す。
【0034】
本実施例は面状の空間データタイプを研究対象とし、データがOpenStreetMapによりダウンロードされた中国全土の建築領域データを用いて、要素の数が合計して1000192本である。
図3には研究対象の空間データを示す。図面から分かるように、空間データは、サイズが異なって分布が不均一であり、データの疎密度に一定のランダム性があり、実験サンプルとされることができる。
【0035】
1000~50000本の記録合計して50組のデータをランダムに選択して、ヒルベルト曲線に基づく改良されたR木インデックス、通常のR木インデックス及びヒルベルトR木インデックスに対して更新操作を行って、本発明に係る改良されたヒルベルトR木のマージアルゴリズムの高効率性を検証し、且つマージ後のクエリ効率を比較して、LH R木のマージアルゴリズムがより高い空間集中性及びより高いクエリ効率を確保できることが証明される。
【0036】
図4において、横軸がマージされたR木のサイズを示し、縦軸がR木のマージに必要な時間を示す。折れ線グラフにおいて上から下へそれぞれは、黄色折れ線が通常のR木のマージに必要な時間を示し、灰色折れ線が動的ヒルベルトR木のマージに必要な時間を示し、オレンジ色折れ線が静的ヒルベルトR木のマージに必要な時間を示し、青色折れ線が本発明に係る改良されたヒルベルトR木のマージに必要な時間を示す。図面から分かるように、動的ヒルベルトR木のマージ方式は通常のR木のマージ方式よりも優れ、本発明に係る改良されたヒルベルトR木のマージ方式は静的ヒルベルトR木のマージ方式よりも優れ、本発明に係る改良されたヒルベルトR木のマージ方式及び静的ヒルベルトR木のマージ方式に必要な時間は1つずつ挿入してマージするという2種類の方式よりも明らかに短い。
【0037】
図5において、横軸は矩形の検索範囲を示し、経度と緯度を単位とし、縦軸はR木の磁気ディスクを読み取る回数を示し、単位が万ページである。R木のクエリにおいて、クエリ範囲がより狭い場合、クエリ速度がより速く、取得されたクエリ時間の誤差値がより大きい。磁気ディスクの読み書き速度が内部メモリの検索よりも遥かに大きいため、磁気ディスクページの読み取り回数で範囲クエリ時間を代替してもよく、本実験は磁気ディスクの読み取り回数をクエリ効率の比較根拠として用いる。図面において上から下へそれぞれは、通常のR木の空間クエリ効率の折れ線グラフ、動的ヒルベルトR木の空間クエリ効率の折れ線グラフ、本発明に係る改良されたヒルベルトR木の空間クエリ効率の折れ線グラフ及び静的ヒルベルトR木の空間クエリの折れ線グラフである。図面から分かるように、4種類のR木の空間クエリ効率は空間範囲の増加変化傾向に伴ってほぼ一致する。しかしながら、動的ヒルベルトR木のクエリ効率が通常のR木よりも優れたことは、ヒルベルトR木の空間集中性が通常のR木よりも高いことが説明される。一括マージアルゴリズムにより取得されたR木のクエリ効率は上記2種類のR木よりも明らかに高く、静的ヒルベルトR木の効率は本発明に係る改良されたヒルベルトR木よりも少々高い。しかしながら、本発明に係る改良されたヒルベルトR木はR木の平均クエリ効率よりも52%向上し、動的ヒルベルトR木の平均クエリ効率よりも41%向上し、静的ヒルベルトR木のクエリ効率よりも5%低下する。
【0038】
また、他の実施例では、ヒルベルト曲線に基づくR木インデックスのマージ更新装置を更に提供することができ、
コンピュータプログラムを記憶するためのメモリと、
前記コンピュータプログラムを実行したとき、上記ヒルベルト曲線に基づくR木インデックスのマージ更新方法を実現するためのプロセッサと、を備える。
【0039】
また、他の実施例では、コンピュータ読み取り可能な記憶媒体を更に提供することができ、該記憶媒体にコンピュータプログラムが記憶され、前記コンピュータプログラムがプロセッサにより実行されたとき、上記ヒルベルト曲線に基づくR木インデックスのマージ更新方法を実現することができる。
【0040】
以上に記載された実施例は単に本発明の好適な解決手段であり、本発明を制限するためのものではない。当業者であれば、本発明の趣旨及び範囲を逸脱せずに、更に種々の変化及び変形を行うことができる。従って、等価置換又は等価変換の方式で取得された技術案は、いずれも本発明の保護範囲内に含まれる。
【国際調査報告】