Bigtable
Система распределенного хранения структурированных данных
Bigtable - это распределенное хранилище
система (построенная Google) для управления структурированными данными
который предназначен для масштабирования до очень
большой размер: петабайты данных через
тысячи товарных серверов.
Многие проекты в Google хранят данные в
Bigtable, включая веб-индексацию,
Google Планета Земля и Google Финансы.
Эти приложения размещают очень
разные требования к Bigtable, как в
условия размера данных (от URL до сети)
страниц к спутниковым снимкам) и
требования к задержке (от бэкэнда
массовая обработка данных в реальном времени
выступающий).
Несмотря на это
требует, Bigtable успешно
обеспечил гибкость, высокую производительность
решение для всех этих Google
продукты.
Некоторые функции
- быстрая и чрезвычайно масштабная СУБД
- разреженная, распределенная многомерная отсортированная карта, совместно использующая характеристики как ориентированных на строки, так и ориентированных на столбцы баз данных.
- предназначен для масштабирования в петабайтный диапазон
- работает на сотнях или тысячах машин
- легко добавить больше машин в систему и автоматически начать использовать эти ресурсы без какой-либо реконфигурации
- каждая таблица имеет несколько измерений (одно из которых является полем для времени, позволяющего управлять версиями)
- оптимизированы для GFS (файловой системы Google), поскольку они разбиты на несколько планшетов - сегменты таблицы разделены по выбранной строке так, что размер планшета составит ~ 200 мегабайт.
Архитектура
BigTable не является реляционной базой данных. Он не поддерживает объединения и не поддерживает расширенные SQL-подобные запросы. Каждая таблица представляет собой многомерную разреженную карту. Таблицы состоят из строк и столбцов, и каждая ячейка имеет метку времени. Может быть несколько версий ячейки с разными отметками времени. Отметка времени позволяет выполнять такие операции, как «выбрать 'n' версии этой веб-страницы» или «удалить ячейки, которые старше определенной даты / времени».
Чтобы управлять огромными таблицами, Bigtable разделяет таблицы по границам строк и сохраняет их как планшеты. Планшет занимает около 200 МБ, а каждая машина экономит около 100 планшетов. Эта настройка позволяет распределять планшеты из одной таблицы между многими серверами. Это также учитывает мелкозернистую балансировку нагрузки. Если одна таблица получает много запросов, она может сбросить другие планшеты или перенести занятую таблицу на другой компьютер, который не так занят. Кроме того, если компьютер выходит из строя, планшет может быть распределен по многим другим серверам, так что влияние на производительность любого компьютера будет минимальным.
Таблицы хранятся в виде неизменяемых таблиц SST и хвостов журналов (по одному журналу на машину). Когда машине не хватает системной памяти, она сжимает некоторые планшеты, используя собственные методы сжатия Google (BMDiff и Zippy). Незначительные уплотнения включают только несколько планшетов, в то время как крупные уплотнения затрагивают всю систему таблиц и восстанавливают пространство на жестком диске.
Расположение планшетов Bigtable хранится в клетках. Поиск любого конкретного планшета обрабатывается трехуровневой системой. Клиенты получают точку в таблице META0, из которых только одна. Таблица META0 отслеживает многие планшеты META1, которые содержат местоположения просматриваемых планшетов. И META0, и META1 интенсивно используют предварительную выборку и кэширование, чтобы минимизировать узкие места в системе.
Осуществление
BigTable построен на Файловая система Google (GFS), которая используется в качестве резервного хранилища для файлов журналов и данных. GFS обеспечивает надежное хранилище для SSTables, проприетарного формата файлов Google, используемого для сохранения табличных данных.
Еще одна услуга, которую BigTable интенсивно использует, - это Chubby , высокодоступная, надежная служба распределенной блокировки. Chubby позволяет клиентам захватить блокировку, возможно, связав ее с некоторыми метаданными, которые он может обновить, отправив сообщения о том, что они активны, обратно в Chubby. Блокировки хранятся в иерархической структуре именования в виде файловой системы.
Существует три основных типа серверов , представляющих интерес для системы Bigtable:
- Главные серверы: назначайте планшеты планшетным серверам, отслеживайте расположение планшетов и перераспределяйте задачи по мере необходимости.
- Планшетные серверы: обрабатывают запросы на чтение / запись для планшетов и разделенных планшетов, когда они превышают лимиты размера (обычно 100–200 МБ). Если происходит сбой планшетного сервера, то на 100 планшетных серверах каждый забирает 1 новый планшет, и система восстанавливается.
- Блокировка серверов: экземпляры службы распределенной блокировки Chubby. Множество действий в BigTable требует приобретения замков, включая открытие планшетов для записи, обеспечение того, чтобы одновременно было не более одного активного мастера, и проверку контроля доступа.
Пример из исследовательской работы Google:
![alt text](https://i.stack.imgur.com/oN41X.png)
фрагмент таблицы с примерами
хранит веб-страницы. Имя строки
обратный URL . Столбец содержимого
семейство содержит содержимое страницы и
семейство якорных столбцов содержит
текст любых якорей , которые ссылаются на
стр. На главную страницу CNN ссылаются
И Спорт Иллюстрированный и
MY-посмотрите домашние страницы, поэтому строка
содержит столбцы с именем
anchor:cnnsi.com
и
anchor:my.look.ca
. Каждая якорная клетка
имеет одну версию ; столбец содержимого
имеет три версии , в метках времени
t3
, t5
и t6
.
API
Типичными операциями для BigTable являются создание и удаление таблиц и семейств столбцов, запись данных и удаление столбцов из строки. BigTable предоставляет эти функции разработчикам приложений в API. Транзакции поддерживаются на уровне строк, но не для нескольких ключей строк.
Вот ссылка на PDF исследовательской работы .
И здесь вы можете найти видео, показывающее Джеффа Дина из Google на лекции в Университете Вашингтона , где обсуждается система хранения контента Bigtable, используемая в бэкэнде Google.