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
DB Tree Algorithms
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
250
Gemini CLIでもセキュアで堅牢な開発をしたい!
yunosukey
1
660
DevOps/MLOpsに学ぶエージェントの可観測性
yunosukey
1
1.2k
Agent Development Kitで作るマルチエージェントアプリケーション(AIAgent勉強会)
yunosukey
4
1.9k
Agent Development Kitで作るマルチエージェントアプリケーション(GCNT2025)
yunosukey
0
89
AIエージェントのオブザーバビリティについて
yunosukey
1
940
OpenTelemetry + LLM = OpenLLMetry!?
yunosukey
2
1.2k
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
470
フロントエンドオブザーバビリティ on Google Cloud
yunosukey
1
390
Other Decks in Programming
See All in Programming
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
Press start. Python's next generation.
willingc
PRO
3
310
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
ALB ログから Trace を気合で繋げる技術
fohte
7
880
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
560
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
170
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
AIエージェント時代のコードレビューを設計する
nogu66
6
2.5k
高専キャリア LT 発表内容
crysta1221
6
5.6k
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
630
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Design in an AI World
tapps
1
310
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.5k
Utilizing Notion as your number one productivity tool
mfonobong
4
570
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Building AI with AI
inesmontani
PRO
1
1.2k
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