к оглавлению

Распределенная СУБД корпорации Google "BigTable"

Введение

BigTable - это распределенная проприетарная, то есть не распространяемая, система для управления большими объемами данных. Она была создана Google и используется более чем в 60 проектах. Такие сервисы предъявляют различные требования к функциональности базы данных - начиная от разницы в размерах хранимой информации до скорости доступа к данным.

BigTable построена на основе собственной специализированной файловой системы - Google File System (GFS), использующей технологию Chubby Lock Service и некоторые другие продукты Google. В настоящий момент она не распространяется и не используется за пределами Google, хотя Google предлагает использовать её как часть Google App Engine, предоставляя пользователям лишь ограниченные привилегии клиентов.

Работа над BigTable была начата в 2004 году и сейчас СУБД используется в различного рода приложениях Google, таких как MapReduce, которое часто используется для создания и модификации данных хранящихся в BigTable, Google Reader, Google Maps, Google Book Search, Search_History, Google Earth, Google Analytics, Blogger.com, Google Code hosting, Orkut и YouTube. Причины, побудившие Google к созданию собственной базы данных – масштабируемость, высокая производительность и живучесть.

На основе BigTable в 2009 году была создана Google Fusion Tables - экспериментальная СУБД для управления данными в облаке.

Внутри Google функционирует более 500 экземпляров (cells) BigTable , крупнейший из которых насчитывает более 3 тысяч машин, хранящих свыше 6 петабайт данных. Наиболее загруженные экземпляры BigTable обслуживают в круглосуточном режиме более 500 тысяч запросов в секунду.

Общее техническое описание

BigTable – многоразмерная (multidimentional) и многоядерная (multimap) СУБД. Данные в ней хранятся в виде простых строк. Ключами для доступа к данным являются три строки:

Таким образом, получаем (string, string, int64) ->> (string);

Ключ строки (row key)

Строки в базе данных отсортированы по этому ключу. Все данные делятся на некоторые диапазоны значений данного ключа, которые динамически изменяются. Диапазон значений называется таблеткой (tablet) и именно он является единицей балансировки нагрузки. Клиент может указать какие данные должны храниться в непосредственной близости друг от друга, и соответственно этим добиться удобного и быстрого доступа к данным. То есть связанная информация будет храниться в одном месте.

Ключ столбца (column key)

Относительно этого ключа данные делятся на семейства столбцов (column families). Обычно в них хранится информация одного типа. Они являются единицей доступа к данным и имеют наименование: family.qualifier.

Временная метка (timestamp)

Для каждой сохраненной строчки имеется несколько версий. Они различаются временной меткой, причем в базе они хранятся сортированными, начиная от самых новых, заканчивая самыми старыми, для того, чтобы доступ к последней версии был максимально быстрым. Также в BigTable существует сборщик мусора (garbage-collector). В настройках базы можно указать, сколько версий будет храниться для каждой ячейки.

API

Bigtable позволяет:

Дополнительно BigTable может выполнять более сложные операции, такие как

Используемые продукты

BigTable основана на

Также в ней используются многие технологии и алгоритмы, например, секретный алгоритм сжатия (Zippy) для уменьшения объема данных.

Реализация

В общем, структура BigTable состоит из:

Каждый сервер управляет некоторым набором таблеток (от ~10 до 1000 штук), причем каждая единица информации занимает примерно 100-200 Мб.

Заключение

BigTable - это система управления большими объемами данных. Она является проприетарной, то есть используется только в Google. Доступ к ней некоторым образом предоставляет Google App Engine.

Существуют некоторые аналоги, которые основаны на выложенной в сети информации о том, как работает BigTable. Такими аналогами являются

HyperTable - система предназначена для управления хранением данных и обработки информации в больших кластерах серверов;

HBase - система написана на Java, добавляет поддержку Bigtable в ядро Hadoop;

Cassandra - распределённая система хранения данных Facebook, основанная на модели данных Bigtable;

Project Voldemort - распределённая система хранения данных используемая LinkedIn;

Neptune - система написана на Java, использует компоненты Hadoop, ZooKeeper и HDFS;

KDI — клон BigTable созданный в Kosmix.

к оглавлению