Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DB Tree Algorithms
Search
Yunosuke Yamada
October 16, 2022
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DB Tree Algorithms
Yunosuke Yamada
October 16, 2022
More Decks by Yunosuke Yamada
See All by Yunosuke Yamada
AI時代に成長するエンジニアに必要なスキルとは.pdf
yunosukey
0
310
Gemini CLIでもセキュアで堅牢な開発をしたい!
yunosukey
1
690
DevOps/MLOpsに学ぶエージェントの可観測性
yunosukey
1
1.3k
Agent Development Kitで作るマルチエージェントアプリケーション(AIAgent勉強会)
yunosukey
4
1.9k
Agent Development Kitで作るマルチエージェントアプリケーション(GCNT2025)
yunosukey
0
100
AIエージェントのオブザーバビリティについて
yunosukey
1
960
OpenTelemetry + LLM = OpenLLMetry!?
yunosukey
2
1.3k
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
500
フロントエンドオブザーバビリティ on Google Cloud
yunosukey
1
400
Other Decks in Programming
See All in Programming
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
340
Domain-Driven Transformation
hschwentner
2
2.3k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
820
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
190
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
800
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
golang-bob.pdf
iwatsukayura
0
130
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
170
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
330
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Docker and Python
trallard
47
4.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
430
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
The Cult of Friendly URLs
andyhume
79
7k
Tell your own story through comics
letsgokoyo
1
1.1k
A designer walks into a library…
pauljervisheath
211
25k
Transcript
DBとアルゴリズム 2021/09/09 山田悠之介
Web の技術とアルゴリズム アルゴリズムの理論には純粋なパズル的な楽しさがある Web の技術ではプラクティカルな話が中心で理論の話は多くない (そんな事ないよって方の LT をお待ちしています) DB は理論の話が多く面白い
今回は DB にまつわるアルゴリズムのうち、木に関するものを紹介 2
流れ データ構造をいくつか紹介 BST B-tree LSM tree(主題) 時間があれば LSM tree における最適化をいくつか紹介
3
BST(二分探索木) 右部分木のノードは親より大きく、左部分木のノードは親より小さい 多くの言語で Map, Set の実装に使われる 4
BST(二分探索木) バランスしている時、読み込み・書き込み (INSERT, UPDATE, DELETE)がO(log N) 5
BST はディスクと相性が悪い バランシングが頻発する → ディスクの読み書きが増える ノードサイズとページサイズと合っていない 6
B-tree (B+ tree) ディスクに最適化された探索木 多くの RDBMS (MySQL, PostgreSQL など) のストレージエンジン
でインデックスとして用いられている 7
B-tree (B+ tree) ディスク最適化 各ノードの大きさをページサイズに合わせる バランシングも兄弟への分割・兄弟とのマージなので局所的 8
B-tree の向き・不向き 読み込み・書き込みともに だが、 書き込みが多いユースケースではボトルネックになる ミュータブルなので排他制御が必要 O(log N) 9
LSM tree 書き込みに最適化されたデータ構造 Cassandra などの NoSQL, Spanner などの分散 DB で用いられる
書き込みが 、読み込みが 書き込み時はメモリとログに書くだけにして、 重複を読み込み時に解決する ディスク上のコンポーネントはイミュータブルで、 ロックなしで読み書きできる O(1) O(N) 10
LSM tree 小さなメモリ上のコンポーネント (memtable) 大きなディスク上のコンポーネント(複数) からなる 11
LSM tree 全ての書き込みは memtable に適用される 耐久性を保証するためにログファイルが必要となる memtable はサイズが閾値になると,ディスク上に永続化される ディスク上のデータ構造は B-tree
が一般的 12
LSM tree フラッシュ後のテーブルの数を抑えるために定期的にマージする (コンパクション) コンパクションではマージされた結果を新しいファイルに書き出す (イミュータブル) 13
LSM tree の書き込みと読み込み 追加・更新は memtable に新たに key と value を追加するだけ
削除では memtable からデータレコードを削除するだけでは不十分 (ディスク上のコンポーネントが同じキーのデータレコードを 保持している可能性がある) value に特別な削除エントリ(墓石)を割り当てることで対応 読み込みでは複数のコンポーネントにアクセスし、 タイムスタンプを比較して最新の結果を返すようにする → どのコンポーネントにレコードがあるか知りたい 14
Leveled compaction レベル 0 はフラッシュされたテーブルがそのまま入る レベル 1 以降は上のレベルからマージされ、 key の範囲が各レベルで被らないようにすることで探索を最適化する
15
Bloom Filter 各レベルである key がどのテーブルの範囲にあるかはわかるが、 本当にそのテーブルにあるかは分からない Bloom filter という確率的データ構造がよく使われる 16
Bloom Filter 構築時: 要素の key に対して hash 値のビットを全て立てる (ビット配列は共有) 探索時:
hash 値のビットが全て立っていれば要素かもしれない、 そうでなければ要素ではない 17
まとめ B-tree は読み込み・書き込みともに優れたデータ構造 特殊なケースでは書き込みに特化した LSM tree が使われる LSM tree の読み取りを改善する最適化がいろいろある
18
参考資料 Database Internals 19