Открыть сервис

Bigtable

Bigtable — это распределённая система управления базами данных, разработанная компанией Google для хранения и обработки больших объёмов структурированных данных. Относится к классу NoSQL-систем и использует модель хранения «ключ-значение» с поддержкой многомерных временных меток. Bigtable спроектирована для работы на кластерах из тысяч обычных серверов, обеспечивая высокую производительность, отказоустойчивость и масштабируемость. Система лежит в основе многих сервисов Google, включая поиск, карты, YouTube и Gmail.

История

Разработка Bigtable началась в 2004 году внутри Google как ответ на необходимость обработки растущих объёмов данных, которые не могли эффективно обрабатываться традиционными реляционными базами данных. Ключевыми авторами системы стали Джеффри Дин и Санджай Гемават, которые ранее работали над файловой системой Google File System (GFS). В 2006 году они опубликовали статью «Bigtable: A Distributed Storage System for Structured Data», в которой подробно описали архитектуру и принципы работы системы.

Первоначально Bigtable использовалась для индексации веб-страниц в поисковом движке Google. Со временем система была адаптирована для других проектов, таких как Google Earth, Google Finance и Google Analytics. В 2015 году Google представила облачную версию Bigtable под названием Cloud Bigtable, доступную через платформу Google Cloud Platform. Эта версия стала коммерческим продуктом, ориентированным на внешних разработчиков.

Архитектура

Bigtable построена на трёх основных компонентах: файловой системе Google File System (GFS), распределённом координаторе Chubby и собственном механизме управления таблицами.

Модель данных

Данные в Bigtable организованы в виде многомерной карты, где каждая запись идентифицируется тройкой: ключ строки, ключ столбца и временная метка. Ключи строк и столбцов представляют собой произвольные строки байтов, а временная метка — 64-битное целое число, обычно соответствующее времени записи данных. Такая модель позволяет хранить несколько версий одного значения, что полезно для аудита и восстановления.

Структура хранения

Bigtable разбивает таблицы на таблеты (tablets) — горизонтальные фрагменты данных, соответствующие диапазону ключей строк. Каждый таблет хранится в виде набора SSTable-файлов (Sorted String Table) на GFS. SSTable — это неизменяемый отсортированный файл, который содержит пары «ключ-значение». Для ускорения поиска используются индексы и блоки сжатия.

Управление таблетами

Серверы Bigtable делятся на три типа:

  • Мастер-сервер — отвечает за распределение таблетов между рабочими серверами, балансировку нагрузки и обнаружение сбоев. Мастер не участвует в обработке запросов, что снижает риск его перегрузки.
  • Таблет-серверы — непосредственно обрабатывают запросы на чтение и запись данных. Каждый сервер управляет несколькими таблетами.
  • Серверы Chubby — обеспечивают согласованность и координацию. Chubby — это распределённая система блокировок, используемая для выбора мастера, хранения метаданных и обнаружения серверов.

Процесс записи

При записи данных таблет-сервер сначала сохраняет операцию в журнал предзаписи (write-ahead log) на GFS для обеспечения отказоустойчивости. Затем данные помещаются в оперативную память (memtable). Когда размер memtable достигает порога, она преобразуется в SSTable и записывается на диск. Периодически запускается процесс компакции (compaction), объединяющий несколько SSTable в один для уменьшения фрагментации и освобождения места.

Процесс чтения

При чтении данных таблет-сервер проверяет memtable (для последних изменений) и затем последовательно просматривает SSTable-файлы, используя индексы. Для ускорения поиска применяется блочный кэш, который хранит часто запрашиваемые блоки данных в оперативной памяти.

Ключевые характеристики

Масштабируемость

Bigtable способна обрабатывать петабайты данных на кластерах из тысяч серверов. Горизонтальное масштабирование достигается за счёт динамического разделения и перераспределения таблетов. При добавлении новых серверов мастер автоматически переносит часть таблетов на них, выравнивая нагрузку.

Производительность

Система обеспечивает низкую задержку при чтении и записи. По данным Google, в 2006 году Bigtable обрабатывала до 200 000 запросов в секунду на одном кластере. Современные версии, особенно Cloud Bigtable, могут достигать миллионов запросов в секунду при использовании SSD-накопителей.

Отказоустойчивость

Bigtable использует репликацию данных на уровне GFS: каждый блок данных хранится в трёх копиях на разных серверах. При сбое таблет-сервера мастер перераспределяет его таблеты на другие серверы. Журналы предзаписи позволяют восстановить данные после сбоя без потерь.

Ограничения

Bigtable не поддерживает реляционные операции, такие как JOIN, транзакции с несколькими строками или сложные запросы. Она также не предоставляет встроенных механизмов для обеспечения целостности ссылок. Модель данных ориентирована на простые операции чтения и записи по ключу.

Применение

Bigtable используется в широком спектре задач, требующих высокой производительности и масштабируемости:

  • Поисковые системы — хранение индексов веб-страниц и метаданных.
  • Геоинформационные системы — обработка данных Google Maps и Google Earth.
  • Финансовые сервисы — анализ исторических данных в Google Finance.
  • Аналитика — сбор и обработка данных в Google Analytics.
  • Социальные сети — хранение профилей и сообщений (например, в Google+).

Сравнение с другими системами

Bigtable стала основой для многих NoSQL-систем, таких как Apache HBase (открытая реализация, использующая Hadoop Distributed File System) и Apache Cassandra. В отличие от Cassandra, которая использует модель «в конечном счёте согласованная» (eventual consistency), Bigtable обеспечивает строгую согласованность для операций с одной строкой. По сравнению с MongoDB, Bigtable не поддерживает документо-ориентированную модель и сложные запросы, но превосходит её в производительности при работе с большими объёмами данных.

Интересные факты

  • Bigtable была одной из первых систем, реализовавших концепцию «таблетов» (tablets), которая позже была заимствована другими проектами, включая Apache HBase.
  • В 2006 году Google опубликовала статью о Bigtable, которая стала одной из самых цитируемых в области распределённых систем.
  • Cloud Bigtable, запущенная в 2015 году, поддерживает интеграцию с Apache Hadoop, Apache Spark и другими инструментами больших данных.
  • Система использует сжатие данных на основе алгоритмов LZO и Snappy, что позволяет сократить объём хранимых данных в 2–5 раз.

Источники

  • Dean, J., & Ghemawat, S. (2006). Bigtable: A Distributed Storage System for Structured Data. Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation.
  • Google Cloud Documentation. Cloud Bigtable Overview.
  • Chang, F., et al. (2008). Bigtable: A Distributed Storage System for Structured Data. ACM Transactions on Computer Systems, 26(2), 1–26.
  • Apache HBase Reference Guide. Comparison with Bigtable.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →