Spanner (データベース)

提供: miniwiki
2018/9/22/ (土) 21:33時点におけるAdmin (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索
ファイル:GoogleCloudSpannerBooth.jpg
GoogleクラウドサミットにおけるCloud Spannerの展示

Spanner (スパナ)は、Google にて開発・利用される、分散データベース[1]。2012年に同社より論文が公開され[1]、2017年よりGoogle Cloud Platform 上で提供が開始、一般ユーザでも利用できるようになった[2]

概要

関係データベース管理システム ( RDBMS ) の構造と非関係データベース ( NoSQL ) のスケーラビリティを兼ね備えるとされる[3]

Googleは、Spanner 以前にもスケーラブルな分散型データベースである BigTable ( NoSQL )を社内で利用していた。 BigTable は多くのプロジェクトで活用されてきた一方で、従来のスキーマ型の RDBMSのように 「データの一貫性」 が欲しいという不満も受けていた[1]。この解決のためにGoogleは、Spannerを開発した。

何百ものデータセンターに渡る100万台規模のサーバに分散、スケールするように設計されている[1]

SQL文を利用してデータの更新や集計などが可能である[4]

後述の通り、タイムスタンプを利用してデータの一貫性を保証する特徴がある。これにより、データベースへの処理が行われている最中であっても、一貫したデータの読み書きが行えるだけでなく、一貫したバックアップMapReduce処理が可能であるとされる[1]

技術詳細

上記の通り、Spanner ではデータの一貫性を担保する必要があった。これを実現するために、BigTableとは異なり、Spanner ではタイムスタンプが必ずデータに付与される[1]。このデータ構造は tabletと呼ばれ以下のようなマッピングを持つ:

(key:string, timestamp:int64) -> string

これらデータは Google File System の後継である Colossus 上に全て保存される。

上記のようにタイムスタンプを用いることで、全てのトランザクション処理コミットがどの順番で行われたかを管理でき、これによって、一貫性を保証できる ( 詳細はMultiVersion Concurrency Control ) 。

ここで重要となるのは、タイムスタンプを一貫した時刻基準を用いて押し、処理した順番を誤って前後させない事である。しかしながら、Spanner のようにデータが複数のサーバに分散される場合は実現が難しい。全てのサーバを常に、かつ厳密に同時刻に保つことは困難なためである。

これを解決するために、Spanner では、TrueTime APIを利用して、現在の絶対時刻をある幅: TTinterval: [earliest, latest] を持たせて取得する[1]。これは、現在の絶対時刻: [math]t_{abs}[/math]が、earliest以上、latest以下である事を保証する。換言すると、Spanner のサーバ群の中で、最も早い/遅い時間は、それぞれearliest/latestであり、他の全てのサーバはこの範囲内に収まるという事である。このように、時刻ずれのワーストケースが分かっているため、処理の順序関係に不整合がでないようにデータベースの読み書きを制御する事が可能となり、データの一貫性が保たれる。

時刻のずれ量が大きくなるほど、処理をコミットするまでの待ち時間が大きくなり、性能が劣化する。このため、Spanner では GPS原子時計 を利用した正確な時刻基準をマスター・サーバに利用して、出来る限りスレーブ・サーバ間のずれを少なくする特徴もある。

脚注

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 Spanner: Google's Globally-Distributed Database”. . 2018-1-25閲覧.
  2. リリースノート”. . 2018-1-26閲覧.
  3. CLOUD SPANNER”. . 2018-1-27閲覧.
  4. SQL のベスト プラクティス”. . 2018-1-27閲覧.

関連項目

外部リンク