Spanner — географічно розподілена масштабована багатоваріантна база даних з підтримкою розподілених транзакцій. Сховище було розроблено інженерами Google для внутрішніх сервісів корпорації. Spanner є еволюційним розвитком NoSQL-попередника — Google Bigtable. Сам же c Spanner відносять до сімейства NewSQL-рішень. У research paperJames C. Corbett, Jeffrey Dean, Michael Epstein, Andrew Fikes, Christopher Frost, JJ Furman, et al. заявляється, що дизайн Spanner дозволяє системі масштабуватись на мільйони обчислювальних вузлів через сотні дата-центрів і працювати з трильйонами рядків даних. Spanner використовується в соціальній мережі Google+ та в поштовому сервісі GMail
Базові принципи Spanner є новим типом БД (NewSQL), який об'єднує в собі два світи SQL та NoSQL. Крім наявності NoSQL можливостей, Spanner також володіє складно реалізованими в розподілених системах властивостями :
підтримка розподілених транзакцій; глобальна узгодженість операцій читання між географічно розподіленими ДЦ, таким чином дані, які повертають операції читання з різних ДЦ, завжди узгоджені і несуперечливі; не заблокованого читання даних «з минулого» (in past); відсутність блокувань для read-only транзакцій; атомарне змінення схеми таблиць даних; синхронна реплікація; автоматична обробка відмов як обчислювальних вузлів, так і ДЦ; автоматична міграція даних як між обчислювальними вузлами, так і між ДЦ.
Недоліки Ключі таблиці не можуть змінюватися. Не можна додавати key column до існуючої таблиці або видалити з існуючої таблиці. Це означає, що якщо потрібно змінити PK таблиці, то доведеться видалити та створити заново цю таблицю; Рекомендується використовувати interleaved table для каскадного оновлення та видалення. Переваги Надається можливість для обробки величезної кількості транзакцій; Гарантується цілісність даних з можливістю їх розподілення по всьому світі без обмежень розміром сховища.
Об'єкти для зберігання даних в Cloud Spanner Для роботи з даними в Spanner існує два типи об'єктів: ключ таблиці і індекси. Призначення даних типів схоже з аналогами в традиційних реляційних базах. Приклад визначення таблиці: CREATE TABLE Persons ( PersonId INT64 NOT NULL; FirstName STRING (32); LastName STRING (32), PRIMARY KEY (PersonId)).
Порівняння з реляційними і не реляційними БД В якості керованої реляційної хмарної бази даних Google Cloud Spanner є альтернативою іншим базам даних Google Cloud Spanner Реляційні БД Не реляційні БД Схема + + - SQL + + - Узгодженість сильна сильна кінцева Доступність висока відмовостійкість висока Масштабованість горизонтальна вертикальна горизонтальна Реплікація автоматична налаштована налаштована
Примітки
Джерела https://ru.bmstu.wiki/Google_Cloud_Spanner http://molodyvcheny.in.ua/files/journal/2018/10/65.pdf https://habr.com/ru/post/207082/ https://dou.ua/lenta/articles/google-cloud-spanner-review/