我々が信じるのは、トランザクションの使い過ぎでボトルネックが発生した時に、アプリケーションプログラマにパフォーマンス問題を処理させるほうが、いつもトランザクションが欠如している周りでコーディングするよりもマシである、ということです。
クロック不確実性(論文ではεで示された)は、広域のネットワークにおいて様々な時刻マスターリファレンスがクロック時間を決める時にクロックのドリフトとネットワークの遅延によって生じるものである。時刻マスターリファレンスは、GPS時間マスターと原子時計が混在しており、それらのエラー率は、冗長化によって小さくしている。 クロック不確実性とコミット待機間隔(2倍のε)の上限に寄与する要因を決定することによって、外部の一貫性の保証は、他の利点、例えばロック無しのリードトランザクション、非ブロッキングリード、そしてアトミックなスキーマ変更などと合わせて達成された。コミット待機間隔が直接 クロック不確実性に結びついているので、クロック不確実性が大きければ、コミット待機間隔が長くなり、 Spannerを遅くすることになる。しかし、より長いコミット待機間隔(典型的には10msだがロングテール分布である)によるこの遅延効果を小さくするために、Spanner はPaxos(コンセンサスプロトコル)の準備フェーズあるいは、待機中に2フェーズコミットを実行する。
Spanner のデータモデルは、 Megastoreに似たセミリレーショナルで、階層的に構造化されたモデルである。 O'ReillyのTimothy O'Brien氏が彼のブログで Spannerのデプロイを要約している。
Spannerの配置は、データセンターを跨いだ複数の「ゾーン」を管理する2,3の管理サーバーから成る。「ゾーンマスター」と一組の「ロケーションプロキシ」が Spannerデータベースにおける大部分の仕事を実行する何百、何千の「spanサーバー」を管理する。 spanサーバーは、「ディレクトリ」と呼ばれるデータ群を格納し、これらのデータ群のそれぞれがタブレットと呼ばれるものの上に Paxosステートマシンを実装している。spanサーバーは、複合キーを使ってタイムスタンプと値と一緒にBツリーでデータを格納しているCloudant Labsは、彼らのブログ記事でSpannerに欠けている2つの領域を指摘している。
特に、 Spannerは未だ、二次インデックスの自動処理をサポートしていない。更に遅れた調停による( CouchDB流)「オフライン」アクセスをサポートしていない。
Googleが言うには、 Spannerは最初の地球規模で複製ができ、スケーラブルな、ACIDデータベースであり、一方 NuoDBもまた特許を取得した彼らのソリューションである。その特許明細書によると同じことを達成するように見える。このことがあなたの製品/プロジェクト実装のための、NoSQL対NewSQLをめぐる議論をどのように変えるか?