Bigtable: A Distributed Storage System for Structured Data を読んだ
Bigtable: A Distributed Storage System for Structured Data を読んだ時のメモ。
どんなもの?
- ペタバイト級のデータ、何千台ものサーバまでスケールする大規模分散ストレージ
- Google Analyics, Google Earth, Web indexing等に使われている
先行研究とくらべて何がすごい?
技術や手法の肝は?
Data Model
- sparse, distributed, persistent multidimentsional sorted map
- (row:string, column:string, time:int64) → string
- row,column,timestampでindexingされている
- row keyは任意の文字列
- transaction consistencyの単位がrow
- 辞書順にrow keyでソートされている
- 最大64KBで一般的には10~100byte
- column family
- column keyをグループ化したもの
- diskやmemoryへの割り当ての単位
- timestampでindex化された複数バージョンのデータをもつ
- read時には最新のデータから読まれる
- client側で何世代保持しておくかを設定できる
- filesystemはGFS
- Chubbyでmaster serverやtabletサーバの管理、スキーマ情報の格納等を行う
構成
どうやって有効と検証した?
- performance
- tablet serverの台数を変えてread/writeのパフォーマンスを測定した
- 1000bytesのread毎に64KBのブロックを転送した
- random read
- 一番遅い
- read毎に、64KB SSTable blockを転送すると1200 read/secで75MB/sのデータをGFSから読み込むことになりネットワーク帯域がサチった
- random write
- random readよりもパフォーマンスが良い
- 1つのcommit logに書き込みを行って、GFSに対してgroup commitを行っているから
- random readよりもパフォーマンスが良い
- sequential read
- random readよりもパフォーマンスが良い
- GFSからfetchしてくる64KB SSTable blockがblock cacheに含まれていて、64個のread requestとして使われるから
- tablet serverの台数を変えてread/writeのパフォーマンスを測定した
議論はある?
- tablet serverが少ない時に負荷が偏ってしまい、パフォーマンスがあまり出ない
- rebalance中はtabletの移動数が減少してしまう
- secondary indexのサポート
- multiple master replicaのcross-data-centerでのレプリケーション