Database
-
ACID
#Database トランザクションが保証する安全性について以下の4つの頭文字を取ったもの 原子性(Atomicity) 一貫性(Consistency) 分離性(Isolation) 永続性(Durability)
-
トランザクション分離レベル
#Database ACIDのうち、I(Isolation)について言及するような分離性のレベル。 RDBMS間で共通して4つの分離レベルがあるが、分離レベルの命名が異なるケースがあり曖昧になっている。 Read Uncommitted コミットされていない未確定のデータを読み取るダーティリードが発生する Read Committed ダーティリード、ダーティライトが生じない Snapshot Isolation OracleではSERIALIZABLE、PostgreSQLやMySQLではRepeatable Readと呼ばれるため曖昧 読み取りスキュー(nonrepeatable read)が生じない、読み取りはロックを取らず常にトランザクション開始時のスナップショットを参照する スナップショットとして複数のバージョンを保持するためMVCC(multi-version concurrency controll)の手法が用いられる Serializable 書き込みスキュー(ファントム)が生じない、複数のレコードを跨いだ一貫性を保証する ユニーク制約によって書き込みスキューを防止できない際に必要となる 全てのトランザクションが直列で実行されるように振る舞うことで直列化可能と呼ばれる
-
レプリケーション
#Database 書き込みまたは読み取りをリーダー、読み取りをフォロワーで行われ、リーダーへの書き込みがフォロワーに伝播される仕組みをレプリケーションと呼ぶ。 レプリケーションの方法として ステートメントベース write-aheadログ 等がある。 ステートメントベースはSQLをそのまま転送する形になるため副作用を持つ関数が返す結果にズレが生じる方法で、MySQL5.1以前に採用されていた。 write-aheadログはPostgreSQL,Oracleで使用されているが、ログが低レベルに記述されているため詳細実装と密になってしまう。 その他レプリケーションのトポロジーとしていくつかのパターンがある マルチリーダーレプリケーション 複数のデータセンターにリーダーが存在する。リアルタイムの同時編集がイメージに近い。 書き込みの衝突があった際に最終的に同じ値に収束させるような方法が取られる リーダーレスレプリケーション AmazonがDynamoシステムで利用し流行しDynamoスタイルと呼ばれる。 一部のノードが何らかの理由で利用できなくてもクオラムによって読み取りあるいは書き込みの正当性を判断する
-
レポーティングデータベース
#Martin Fowler #Database アプリケーションのドメインモデルに対応するテーブルとは別にレポート目的の中間テーブルを用意することで、レポートの関心を分離してテーブルに変更を加えることができる。 ReportingDatabase
-
Bツリー
#Database Bツリーはデータベースを固定サイズのブロックあるいはページに分割する。固定サイズの空き容量がない状態で新しいキーが追加される場合、半分の領域が空いた2つのブロックに分割される。 このアルゴリズムはツリーバランスが保たれ、ツリーの深さも3ないし4レベルに収まることがほとんど。 また信頼性を高めるためにwrite-aheadログ(WAL)と呼ばれる書き込み内容の構造化データを追記して保持している。 Wikipedia
-
SQLパフォーマンス詳解