Slide 1

Slide 1 text

R-Tree for Spatial Data

Slide 2

Slide 2 text

みなさんはデータベースで検索性能を向上させる時に、どんなことをしますか?

Slide 3

Slide 3 text

より効率的なクエリを書いたり、マシンのスペックをあげることなどいろんな方法があると 思いますが、一番はじめに思いつく方法として インデックスを張る という方法があると思い ます。

Slide 4

Slide 4 text

例えば、PostgreSQLでは以下のようなインデックスが用意されています。 B-Tree: みんなご存知のB-Tree Hash: ハッシュ関数を使ってキーのHash値を作り、それに対応する値を持ってくる GiST: 高さが可能な限りバランスがいい木構造を使って検索を実行するインデックスで B+木を一般化したもの SP-GiST: GiSTとは違い、分割されたサイズが等しくないものも許容した木構造を使っ て検索を行うインデックス GIN: 配列などの複合型に対して張るインデックス BRIN: テーブルの連続的なブロック範囲に格納された値についてデータを格納するイン デックス

Slide 5

Slide 5 text

では、空間データでインデックスを張るには?

Slide 6

Slide 6 text

R木を使います

Slide 7

Slide 7 text

R木とは? 1984年にAntonin Guttmanの論文、R-Trees: A Dynamic Index Structure for Spatial Searchingによって、提唱されたデータ構造。B-Treeと同じように平衡木の構造になってい る。 PostgreSQLの空間データ拡張版であるPostGISでもこのR-Treeのアルゴリズムをもとに実装 されている。実際にはR木をそのまま実装しているのではなく、GiSTに沿って実装されたも のを使っている。

Slide 8

Slide 8 text

R木の構造 (画像はWikipediaより引用) 各階層のノードは子ノードを完全 に含む最小面積の矩形になる 葉ノードは対象の地物最小で覆う 最小面積の矩形になる ノードが含む子ノード or 地物の数 の範囲はあらかじめ決められてい る R木の高さは以下の式で求められる h = ∣ log ​ N∣ − m 1 m: ノードが含む最小の数 N: 地物の数

Slide 9

Slide 9 text

検索アルゴリズム 木構造の根から葉に向かって降下していく 1. 検索したい範囲が根ノードに含まれるか調べる 2. 範囲がノードに含まれる場合は、その配下にある子ノード全てを対象に検索したい範囲 に含まれるか否かを調べる 3. 2の結果、一致したノードについてはさらにその子ノード全てを対象に一致するかどうか を調べる 4. それを葉ノードに至るまで降下していって、条件に合う地物を結果として返す 検索アルゴリズム

Slide 10

Slide 10 text

緑色のポリゴンと交差している地物を検 索する場合 1. 黒い根ノードのうち、緑のポリゴ ンと交差している矩形を調べる -> R1とR2のうち、R1が緑と交差 している 検索アルゴリズム

Slide 11

Slide 11 text

緑色のポリゴンと交差している地物を検 索する場合 2. 青色のノードのうち、R1が含んでい る全ての矩形で緑色のポリゴンと交差し ているものを調べる -> R3, R4, R5のうち、R3とR4が緑と交 差している 検索アルゴリズム

Slide 12

Slide 12 text

緑色のポリゴンと交差している地物を検 索する場合 3. 赤色のノードのうち、R3とR4が含ん でいる全ての矩形で緑色のポリゴンと交 差しているものを調べる -> R8 ~ R12のうち、R8とR10が含んで いる 検索アルゴリズム

Slide 13

Slide 13 text

挿入アルゴリズム R木に対して挿入する地物( I )を覆う葉ノードを見つけるがその時の条件によって、その後の 処理が変わる 挿入アルゴリズム

Slide 14

Slide 14 text

1. 葉ノードに追加できる場合 i. 緑の星を追加する場合、検索 アルゴリズムを利用し、星が 重なるR15ノードを見つける ii. (一つの矩形に入る最大の地 物数を3とした時)R15に星が 入るので、R15に緑の星を追 加する 挿入アルゴリズム

Slide 15

Slide 15 text

2. 葉ノードに追加できる数を超えた 場合 i. 緑の星を追加する場合、検索 アルゴリズムを利用し、星が 重なるR16ノードを見つける ii. (一つの矩形に入る最大の地 物数を3とした時)R16に入れ られる地物の数が超える iii. 新しく緑の葉ノードをR6の下 に分割し、作成して、星を追 加する。 挿入アルゴリズム

Slide 16

Slide 16 text

3. 追加できる葉ノードがない場合 i. 緑の星を追加する場合、検索 アルゴリズムを利用しても星 と重なる葉ノード(赤のノー ド)が見つからない ii. 星の周辺にある葉ノードを拡 張し、かつ拡張する面積が最 も小さいものを選択する。 iii. この場合は、R8が一番拡張す る面積が少ないので、R8を選 択する。 挿入アルゴリズム

Slide 17

Slide 17 text

削除アルゴリズム 1. R木から該当の地物を削除する 2. 矩形が含む最少の地物数を下回る 場合、周囲のノードを拡張し、残 っている地物を含める この例の場合はR16を拡張するが、R6 が含む葉ノードの数が1になるため、緑 のように新しく葉ノードを作成する 削除アルゴリズム