Spanner: Google's globally-distributed database
James C. Corbett(Google (United States)), Jay B. Dean(Google (United States)), Michael Epstein(Google (United States)), Andrew Fikes(Google (United States)), Christopher Frost(Google (United States)), J. J. Furman(Google (United States)), Sanjay Ghemawat(Google (United States)), Andrey Gubarev(Google (United States)), Christopher Heiser(Google (United States)), Peter Hochschild(Google (United States)), Wilson C. Hsieh(Google (United States)), Sebastian Kanthak(Google (United States)), Eugene Kogan(Google (United States)), Hongyi Li(Google (United States)), Alexander Lloyd(Google (United States)), Sergey Melnik(Google (United States)), David Mwaura(Google (United States)), David F. Nagle(Google (United States)), Sean Quinlan(Google (United States)), Rajesh Rao(Google (United States)), Lindsay Rolig(Google (United States)), Yasushi Saitō(Google (United States)), Michal Szymaniak(Google (United States)), Christopher M. Taylor(Google (United States)), Ruth Wang(Google (United States)), Dale Woodford(Google (United States))
Cited by 827
Abstract
Spanner is Google’s scalable, multi-version, globallydistributed, and synchronously-replicated database. It is the first system to distribute data at global scale and support externally-consistent distributed transactions. This paper describes how Spanner is structured, its feature set, the rationale underlying various design decisions, and a novel time API that exposes clock uncertainty. This API and its implementation are critical to supporting external consistency and a variety of powerful features: nonblocking reads in the past, lock-free read-only transactions, and atomic schema changes, across all of Spanner. 1