Google Megastoreについて今更ながら調べたよ
- SIGMOD 2008 (6/10-12)で発表された
概要
- 複数レコードで構成されたひとまとまりの"entity group"の中では、トランザクションが可能。entity groupはキー値のprefixを共有。entity groupは階層化されたentityの集合である。entity group毎にトランザクションログが使用される(他の行と同様、永続化・レプリケーションされている)。
- コミットログのレプリケーションはPaxosプロトコルで実現されており、ACIDなトランザクション。
- カラム指向のDB。
- entity group内に限って、join操作が可能。entity groupを跨ぐjoinをしたい場合はconsistencyが保証されない。
- BigTableはインデックスをサポートしない。primary keyでソートされているだけ。Megastoreがインデックスを提供しているが、詳細は不明。倍なりテーブルを用意して、もともとのprimary keyをカラムに入れているようだ。
- entity groupのコンポーネント間の参照整合性は保証されていない。
- 多対多のリレーションはサポートされないが、逆関数として保存可能…materialized view?
- 既に一年ほどサービスで利用実績がある。
TITLE: Megastore – Scalable Data System for User-facing Apps
SPEAKERS: Jonas Karlsson, Philip Zeyliger (Google)
- 依然、参照系重視だが、多少の更新系機能を追加。スキーマが正しければスケール可能。
- スケール可能なDB技術を付加: インデクス、スキーマ、データ型、パーティショニング
- レプリケーション層を隠蔽、DC間フェイルオーバ
- SQL風の柔軟な宣言型スキーマ言語(MDL)
- トランザクション!
- rollbackなし、rollforward logのみ
- entity group内でのみconsistentが保証される
- 楽観的な隔離性制御
- api: newTransaction, read/write, commit (pb: couldn’t type fast enough for the details)
- スキーマで物理的な距離を宣言(prefix, entity group, attributes,...)
- ディスクseek, RPC, 帯域、ストレージを最適化
- コストが見えるプリミティブなAPIのみ提供
- only add scalable features
- cost of writes is linear to data/indices
- avoid scalability surprises
- Paxos-basedなレプリケーションは思ったより複雑になる
- クエリのフェイルオーバを行う(処理中に死ぬ)
- どんどん使われている