データベース基礎
(tontinton.com)bashdbの基本
- 最もシンプルなデータベースプログラムである
bashdbは、2つの bash 関数で構成される。 db_set関数はデータをファイルに追記し、db_get関数はデータを検索する。bashdbの問題点として、耐久性、原子性、分離性、性能などがある。
bashdbを ACID に改善する
- ACID は、原子性、一貫性、分離性、耐久性を意味するデータベーストランザクションの特性である。
bashdbの耐久性を改善するために、db_setにsyncコマンドを追加する。- 分離性のために、
flockプログラムを使ってファイルロックを追加する。
耐久性
fsyncとfdatasyncは、書き込みバッファをディスクにフラッシュするシステムコールである。syncコマンドはすべての「ダーティ」ページをディスクにフラッシュし、-dフラグはfdatasyncを呼び出す。
分離性
flockを使ってbashdbにマルチプロセス分離性を提供する。flockはファイルロックのための Linux プログラムで、-sフラグを使って同時読み取りを許可する。
悪い知らせ
bashdbで原子性を保証する簡単な方法は見つからない。- 性能向上のためには、
O(n)アルゴリズムを改善する必要がある。
ストレージエンジン
- ストレージエンジンの目的は、永続ストレージにデータを読み書きするための抽象化を提供することである。
- ストレージエンジンの設計は、ディスク I/O とディスクシークを最小化することを目標とする。
可変 B-Tree
- B-Tree は、BST の空間局所性を持つ変種であり、ディスク I/O とシークを最小化する。
- B-Tree は、ノードがより多くの子を持てるように一般化された BST である。
不変 LSM ツリー
- LSM ツリーは、書き込み中心のワークロードに有利な、順次書き込みされる不変データ構造である。
- LSM ツリーはメモリにデータをバッファし、一定容量に達するとソート済み SSTable としてフラッシュする。
ブルームフィルタ
- ブルームフィルタは、集合内に項目が存在しないことを効率的に確認できる確率的データ構造である。
- ブルームフィルタはハッシュ関数を使って動作し、空間計算量は
O(log n)である。
Write Ahead Log
- WAL は、すべてのトランザクション操作を記録する特別なファイルであり、データベースプロセスの起動時に状態を再構築する。
分離性
- 分離性を達成するために、悲観的ロック、楽観的ロック、または MVCC を使用できる。
- ANSI/ISO 標準 SQL 92 は、さまざまな読み取り分離レベルを定義している。
分散システム
- 分散システムは複雑性を増すが、可用性と水平スケーリングのためにデータを複数のマシンに分散できる。
- CAP 定理によれば、システムは一貫性、可用性、分断耐性のうち 2 つだけを保証できる。
コンシステントハッシング
- コンシステントハッシングは、ノードの追加または削除時に移行される項目量を減らすデータ分割手法である。
GN⁺の意見:
- データベースの基本的な問題と ACID 特性への理解は、データベースエンジニアリングの中核である。
bashdbの例は、実際のデータベースシステムで発生する問題を理解する助けになる。- ストレージエンジンと分散システムの設計は、データベースの性能と信頼性を決定する重要な要素である。
1件のコメント
Hacker Newsのコメント
1つ目のコメント要約:
2つ目のコメント要約:
3つ目のコメント要約:
4つ目のコメント要約:
5つ目のコメント要約:
6つ目のコメント要約:
7つ目のコメント要約:
sync; mv; syncを使うことで達成できる。8つ目のコメント要約:
9つ目のコメント要約:
10個目のコメント要約: