Spannerは、
Googleによって開発・利用されている
分散データベースシステムです。2012年にその設計が論文として公開され、2017年からは
Google Cloud Platform上で一般ユーザーも利用できるようになりました。このデータベースは、従来のRDBMS(
関係データベース管理システム)の構造と、No
SQL(非関係データベース)の
スケーラビリティという、異なるデータベースの利点を兼ね備えている点が特徴です。
背景と概要
Googleは、Spanner以前にもBigTableというスケーラブルな分散型データベースを社内で活用していました。BigTableは多くのプロジェクトで利用されていましたが、従来のRDBMSのようなデータ一貫性に対する要望も多くありました。これらの課題を解決するために開発されたのがSpannerです。Spannerは、何百もの
データセンターにまたがる100万台規模の
サーバーに分散してスケールするように設計されており、大規模なデータ処理を効率的に行うことができます。さらに、
SQL文を利用してデータの更新や集計が可能であり、RDBMSに慣れたユーザーにとっても使いやすいシステムとなっています。
技術詳細:タイムスタンプによる一貫性保証
Spannerの最も重要な特徴の一つは、タイムスタンプを利用してデータの一貫性を保証する点です。BigTableとは異なり、Spannerでは全てのデータにタイムスタンプが付与されます。このデータ構造は「tablet」と呼ばれ、以下のマッピングを持ちます。
(key:string, timestamp:int64) -> string
これらのデータは、
Google File Systemの後継であるColossus上に保存されます。タイムスタンプを用いることで、全ての
トランザクション処理の
コミット順序を管理し、データの一貫性を保証します(詳細についてはMultiVersion Concurrency Controlを参照)。
TrueTime API
タイムスタンプによる一貫性保証を実現するためには、正確な時刻基準が不可欠です。しかし、Spannerのようにデータが複数の
サーバーに分散している場合、全ての
サーバーを常に同時刻に保つことは非常に困難です。この問題を解決するために、SpannerではTrueTime APIを利用しています。TrueTime APIは、現在の絶対時刻をある幅(TTinterval: [earliest, latest])を持たせて取得します。これにより、現在の絶対時刻 \(t_{abs}\) が、earliest以上、latest以下であることが保証されます。
{\displaystyle t_{abs} \in [earliest, latest]}
つまり、Spannerの
サーバー群の中で最も早い/遅い時間はそれぞれearliest/latestであり、他の全ての
サーバーはこの範囲内に収まります。時刻のずれ量が大きいほど、処理の
コミットまでの待ち時間が長くなり、性能が低下します。そのため、SpannerではGPSや
原子時計を利用した正確な時刻基準をマスター
サーバーに利用し、スレーブ
サーバー間のずれを最小限に抑えるようにしています。
まとめ
Spannerは、
Googleが長年の経験から培ってきた技術を集約した、非常に高度な
分散データベースシステムです。その設計思想や技術は、現代の大規模データ処理における重要な課題を解決する上で、非常に参考になるでしょう。
関連項目
外部リンク