# Bigtable
## 概要
[[Google]] が設計・実装した[[分散ストレージ]]システムであり、ペタバイト規模の構造化データを数千台のコモディティサーバ上で管理する。データモデルは `(row:string, column:string, time:int64) → string` という多次元疎ソート済みマップであり、リレーショナルモデルを採用しない。クライアントはカラムファミリ、ローカリティグループ、タイムスタンプなどのスキーマパラメータを通じてデータレイアウトとアクセス特性を制御する。
テーブルは行範囲ごとにタブレットに動的分割され、タブレットサーバが読み書きを処理する。書き込みは LSM-Tree 型のパス(コミットログ → memtable → SSTable)で永続化され、[[Google File System]] 上に保存される。マスタ選出やタブレットサーバ管理には [[Chubby]] 分散ロックサービスを利用する。
2006 年 8 月時点で 60 以上の Google プロダクト(Google Analytics、Google Earth、Personalized Search など)が本番利用し、388 クラスタ・約 24,500 台のタブレットサーバが稼働していた。
## 技術的特徴
- **タブレット**: 行範囲の動的分割単位(既定 100--200 MB)。分散と負荷分散の粒度
- **SSTable**: キーから値への永続的・順序付き不変マップ。ブロック単位(既定 64 KB)で構成
- **三階層位置特定**: Chubby → ルートタブレット → METADATA → ユーザーテーブル
- **コンパクション**: マイナー(memtable → SSTable)、マージング(複数 SSTable 統合)、メジャー(全 SSTable 統合・削除エントリ除去)
- **ローカリティグループ**: カラムファミリのグループ化による読み取り効率化。インメモリ宣言可能
- **ブルームフィルタ**: SSTable への不要なディスクシーク削減
- **二段階圧縮**: Bentley-McIlroy + 高速圧縮で Webtable 10:1 の圧縮率
## 関連
- ソース: [[@2006__OSDI__Bigtable - A Distributed Storage System for Structured Data]]
- エンティティ: [[Google]] / [[Jeffrey Dean]] / [[Sanjay Ghemawat]] / [[Google File System]] / [[Chubby]]
- 概念: [[分散ストレージ]]
## 出典
- [[@2006__OSDI__Bigtable - A Distributed Storage System for Structured Data]]