GoogleクラウドサミットにおけるCloud Spannerの展示

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

概要

編集

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

Googleは、Spanner以前にもスケーラブルな分散型データベースであるBigTable(NoSQLデータベース)を社内で利用していた。BigTableは多くのプロジェクトで活用されてきた一方で、従来のスキーマ型のRDBMSのようにデータの一貫性が欲しいという不満も受けていた[1]。この問題を解決するために、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]。これは、現在の絶対時刻が、earliest以上、latest以下であることを保証する。すなわち、Spanner のサーバ群の中で最も早い/遅い時間は、それぞれearliest/latestであり、他の全てのサーバはこの範囲内に収まるということである。このように、時刻ずれのワーストケースが分かっているため、処理の順序関係に不整合がでないようにデータベースの読み書きを制御する事が可能となり、データの一貫性が保たれる。

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

脚注

編集
  1. ^ a b c d e f g Spanner: Google's Globally-Distributed Database”. 2018年1月25日閲覧。
  2. ^ リリースノート”. 2018年1月26日閲覧。
  3. ^ CLOUD SPANNER”. 2018年1月27日閲覧。
  4. ^ SQL のベスト プラクティス”. 2018年1月27日閲覧。

関連項目

編集

外部リンク

編集

📚 Artikel Terkait di Wikipedia

Bigtable

Bigtable(ビッグテーブル)とは、Googleの大規模なサーバ上の大量のデータを管理するために設計された、データ圧縮機能を持つ高性能なNoSQL型のプロプライエタリのデータストレージシステムである。Google File System、分散ロックマネージャの1種であるChubby Lock

Apache Spark

your database server. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // Create a sql context object val df = sqlContext .read .format("jdbc")

Apache HBase

ルとし、Javaにより書かれている。Apacheソフトウェア財団のHadoopプロジェクトの一部として開発され、HDFS (Hadoop Distributed File System)の上で実行され、Hadoopに対しBigtableのような機能を提供する。自由かつオープンソースソフトウェアである。

NoSQL

NoSQL(一般に "Not only SQL" と解釈される)とは、関係データベース管理システム (RDBMS) 以外のデータベース管理システムを指すおおまかな分類語である。関係データベースを杓子定規に適用してきた長い歴史を打破し、それ以外の構造のデータベースの利用・発展を促進させようとする運動

Carbonado (Java)

はなく、依然としてオブジェクト指向である一方で、関係モデルは保存される。SQLやJDBCの特定の機能に縛られていないCarbonadoは、Berkeley DBなどの非SQLデータベース製品もサポートしている。これにより、SQLのオーバーヘッドなしで、クエリやインデックスなどの関連機能がサポートされる。

Windows Management Instrumentation

Modelへの拡張の一種で、システムの構成要素について情報収集と通知を行うオペレーティングシステム (OS) のインタフェースを提供する。WMI はDistributed Management Task Force (DMTF) の定めた Web-Based Enterprise Management (WBEM)

Amazon DynamoDB

DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications”. All Things Distributed blog. 2012年1月21日閲覧。 ^ “Amazon Web

RocksDB

Meet CockroachDB, the Resilient SQL Database”. The New Stack. https://thenewstack.io/cockroachdb-unkillable-distributed-sql-database/ 2016年7月8日閲覧。  {{cite