Spanner (データベース)

Spannerは、Googleによって開発・利用されている分散データベースシステムです。2012年にその設計が論文として公開され、2017年からはGoogle Cloud Platform上で一般ユーザーも利用できるようになりました。このデータベースは、従来のRDBMS(関係データベース管理システム)の構造と、NoSQL(非関係データベース)のスケーラビリティという、異なるデータベースの利点を兼ね備えている点が特徴です。

背景と概要


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が長年の経験から培ってきた技術を集約した、非常に高度な分散データベースシステムです。その設計思想や技術は、現代の大規模データ処理における重要な課題を解決する上で、非常に参考になるでしょう。

関連項目



外部リンク


もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。