Spanner — географічно розподілена масштабована багатоваріантна база даних з підтримкою розподілених транзакцій. Сховище було розроблено інженерами Google для внутрішніх сервісів корпорації. Spanner є еволюційним розвитком NoSQL-попередника — Google Bigtable. Сам же c Spanner відносять до сімейства NewSQL-рішень. У research paper[1] заявляється, що дизайн Spanner дозволяє системі масштабуватись на мільйони обчислювальних вузлів через сотні дата-центрів і працювати з трильйонами рядків даних. Spanner використовується в соціальній мережі Google+ та в поштовому сервісі GMail

Базові принципи ред.

Spanner є новим типом БД (NewSQL), який об'єднує в собі два світи SQL та NoSQL. Крім наявності NoSQL можливостей, Spanner також володіє складно реалізованими в розподілених системах властивостями :

  • підтримка розподілених транзакцій;
  • глобальна узгодженість операцій читання між географічно розподіленими ДЦ, таким чином дані, які повертають операції читання з різних ДЦ, завжди узгоджені і несуперечливі;
  • не заблокованого читання даних «з минулого» (in past);
  • відсутність блокувань для read-only транзакцій;
  • атомарне змінення схеми таблиць даних;
  • синхронна реплікація;
  • автоматична обробка відмов як обчислювальних вузлів, так і ДЦ;
  • автоматична міграція даних як між обчислювальними вузлами, так і між ДЦ.

Недоліки ред.

  • Ключі таблиці не можуть змінюватися. Не можна додавати key column до існуючої таблиці або видалити з існуючої таблиці. Це означає, що якщо потрібно змінити PK таблиці, то доведеться видалити та створити заново цю таблицю;
  • Рекомендується використовувати interleaved table[2] для каскадного оновлення та видалення.

Переваги ред.

  • Надається можливість для обробки величезної кількості транзакцій;
  • Гарантується цілісність даних з можливістю їх розподілення по всьому світі без обмежень розміром сховища.

Об'єкти для зберігання даних в 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 + + -
Узгодженість сильна сильна кінцева
Доступність висока відмовостійкість висока
Масштабованість горизонтальна вертикальна горизонтальна
Реплікація автоматична налаштована налаштована

Примітки ред.

  1. James C. Corbett, Jeffrey Dean, Michael Epstein, Andrew Fikes, Christopher Frost, JJ Furman, et al.
  2. Архівована копія. Архів оригіналу за 8 серпня 2019. Процитовано 29 квітня 2019.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)

Джерела ред.