Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DynamicでScalableな空間分割データ構造Bkd-Tree
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takatomo Torigoe
November 27, 2020
Programming
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DynamicでScalableな空間分割データ構造Bkd-Tree
社内勉強会資料です。
Takatomo Torigoe
November 27, 2020
More Decks by Takatomo Torigoe
See All by Takatomo Torigoe
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
1.3k
AI動画生成ガチャ紹介
piyo7
1
450
AIイラスト生成・編集テクニック紹介
piyo7
2
520
PandasAIにおけるLLMを用いた自然言語クエリの仕組み
piyo7
0
600
HdrHistogram紹介:ストリーミングで統計値を算出するための 高速・省メモリなライブラリ
piyo7
0
550
AI画像生成の紹介スライドをAI画像とAIチャットで作ってみた
piyo7
0
400
将棋AI「dlshogi」紹介
piyo7
1
1.2k
軌跡検索エンジンT-Torch論文紹介
piyo7
0
320
アドテクと機械学習
piyo7
0
420
Other Decks in Programming
See All in Programming
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
180
えっ!!コードを読まずに開発を!?
hananouchi
0
270
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
100
Foundation Models frameworkで画像分析
ryodeveloper
1
140
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
460
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
190
5分で問診!Composer セキュリティ健康診断
codmoninc
0
670
[RVD26] Vibe Architecture en 2040 : Darwin a-t-il (enfin) eu raison des architectes ?
alexandretouret
0
110
継続モナドとリアクティブプログラミング
yukikurage
3
650
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
180
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
120
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.1k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
320
Balancing Empowerment & Direction
lara
6
1.2k
Thoughts on Productivity
jonyablonski
76
5.3k
Navigating Weather and Climate Data
rabernat
0
410
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
180
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
390
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
380
Building AI with AI
inesmontani
PRO
1
1.1k
Transcript
Dynamic で Scalable な 空間分割データ構造 Bkd-Tree 鳥越貴智 2020/11/27 データサイエンス共有会 #meetup_ds
Bkd-Tree? 全文検索エンジンElasticsearchで、地理インデックスとして使われている。 BKD-backed geo_shapes in Elasticsearch: precision + efficiency +
speed Geospatial Advancements in Elasticsearch Elasticsearchのコアである Apache Luceneで実装されている。 org.apache.lucene.util.bkd
Bkd-Tree? kd-Treeの亜種。ざっくり言うとforest of balanced binary kd-trees。 kd-Treeについては「k-d treeによる最近傍探索」が分かりやすい。 K-D-B-Treeよりもディスク使用率が高く追加コストを安くした、という触れ込み のためK-D-B-Treeから紹介します。
ちなみにK-D-B-TreeはWikipediaに英文記事があるものの、Bkd-Treeの解説記事 はほぼ無く「The Bkd Tree: A Dynamic Disk Optimized BSP Tree」くらい。
K-D-B-Tree The K-D-B-Tree : a search structure for large multidimensional
dynamic indexes (1981)
range query を想定 [K-D-B-Tree] Data Structure Region Pages Point Pages
平衡多分木 1 Nodeを 1 Pageに メモリ配置
[K-D-B-Tree] Insertions 1. 木を辿って、Pointの位置を含むPoint Pageを探し、Pointを追加する。 2. Pointが増えてPoint Pageが溢れたら、Regionを分割する。 3. Regionが増えてRegion
Pageが溢れたら、さらに親のRegionを分割する。 親Regionの分割は、 子Regionの分割を引き起こすため、 コストが高い。
[K-D-B-Tree] Splitting Patterns ] Pointの分布特性を知っているならば、 Cyclic以外の分割パターンの方がいい場合もある。
[K-D-B-Tree] Deletions and Reorganization 1. Pointが属するPoint Pageから、Pointを削除する。 2. ストレージ使用率が減ってきたらリバランス。 (リバランス例)
Region Page A, B, Cの使用率が半分を切ったため、 どれか二つを合体させたいが、 長方形にするためには三つ合体させないといけない。 しかし三つ合体すると溢れるため、 二つの長方形に再分割を行う必要がある。
[K-D-B-Tree] Utilization 空のK-D-B Treeに 一様乱数で発生させた100,000Points をCyclicに分割してInsertした実験
Bkd-Tree Bkd-Tree: A Dynamic Scalable kd-Tree (2003)
[Bkd-Tree] Main Idea • K-D-B-Treeは追加削除時にリバランスすることでクエリ性能を保つ代わり、 ストレージ使用率が低下する。(その後に提案されたhB-Treeも同じ) • Bkd-Treeはリバランスせず、後述の「Bulk Load」「Logarithmic Method」
という手法によって、ストレージをほぼ100%で使いきる。 // Bkd-Treeの論文はPageではなくBlockで使用率を考えている。K-D-B-Treeも 1 Node 1 Pageに拘らなければ、キャッシュヒット落とさず使用率上げる 実装はできる気がするものの、これは現代の感覚か(?) // 使用率は置いておいても、枝の数がまちまちだとクエリ性能落ちるので、 できるだけ木をコンパクトにするのは重要なはず。
[Bkd-Tree] Bulk Load • Bkd-Treeは2分木 ◦ 葉は一定数のPointを保持する。 ◦ 葉のインデックスのシフト演算で、子 ノードのポインタを置き換えられる。
• 空の木に1点ずつ追加するのではなく、ま とめて木を構築する。 (not Dynamic) • 1階層ごとにソートして分割位置を決める のではなく、グリッド行列で一気に掘る。
[Bkd-Tree] Logarithmic Method • サイズが指数的に膨らんでいく木の列をなす。ただし列は欠けてもよい。 • クエリは並列的に投げる。 • Point追加は、メモリ上のバッファ木 に対して行う。 ◦
これはリバランスせず、Leafを大きくしたり深くしたりするはず。 • バッファ木が溢れたら、ストレージ上の木とBulk Loadによってマージ。 ◦ 下図の場合 をマージして、 size 4Mの を作り出し、 を空にする。
[Bkd-Tree] Insertion Performance • Bkd-Treeは、追加コストがK-B-D-Treeより2桁安い。 ◦ 木のマージ自体はコスト高いが、その間もクエリは投げられる。