Bigtable
Эндрю Файкс и Вильсон Се
Система Bigtable [] разрабатывается для хранения в Google структурированных и полуструктурированных данных. (В тех случаях, когда приемлемым является интерфейс файловой системы, используется Google File System [].) На системном уровне можно считать, что Bigtable – это распределенная, не реляционная база данных. На алгоритмическом уровне можно представлять Bigtable как распределенное многоуровневое отображение. Наконец, на реализационном уровне можно относиться к Bigtable как к некоторому варианту распределенного B-дерева. В Google Bigtable используется для хранения данных во многих разных проектах, например, в проектах индексации Web, Google Earth и Orkut.
Bigtable активно разрабатывается с конца 2003 г., и первое производственное внедрение системы было произведено в середине 2005 г. В последние несколько лет объем использования Bigtable постоянно возрастает. К январю 2008 г. в Google имелось более 600 кластеров Bigtable, и в наиболее крупном кластере содержалось более 2000 машин. В самых крупных ячейках храниться более 700 терабайт данных, и в наиболее загруженных ячейка выполняется до 100 тысяч операций в секунду.
Кроме повседневной работы по «сопровождению» системы (повышение производительности, исправление ошибок, подготовка пользователей, создание документации, совершенствование управляемости) разработчики продолжают добавлять в систему Bigtable новые возможности. Кроме того, продолжается доработка различных частей системы, поскольку пользователи применяют все более крупные кластеры Bigtable. Вот краткое описание некоторых проблем, над решением которых в настоящее время ведется работа:
• Отказоустойчивость. Программное обеспечение Bigtable выполняется на большом количестве машин, достаточно большом, чтобы можно было почти гарантировать присутствие дефектной аппаратуры (одной из наиболее распространенных проблем является неисправная основная память). Исследуются более совершенные способы решения этих проблем, не слишком сильно вредящие производительности.
• Совместное использование машин пользователями. Хотя в интерфейсе Bigtable имеются средства поддержки нескольких пользователей, в реализации пока еще не обеспечивается достаточная изоляция пользователей. Продолжается работа по развитию возможностей Bigtable управления ресурсами и изоляции пользователей.
• Репликация между центрами данных. В настоящее время пользователи Bigtable могут установить режим отложенной (lazy) репликации своих таблиц (которые могут размещаться в разных центрах данных). Эта система репликации гарантирует уровень согласованности, достаточный для многих пользователей. Однако для некоторых клиентов (в частности, тех, которые создают продукты для конечных пользователей) требуются более строгие гарантии согласованности и доступности данных. Для предоставления таких гарантий разрабатываются дополнительные средства как поверх Bigtable, так и внутри системы.
• Присоединение вычислений к данным. Для поддержки длительных вычислений, в которых требуется доступ к данным в Bigtable, разрабатывается API, позволяющий пользователям выполнять код на тех же машинах, в которых хранятся данные. Хотя в инфраструктуре Map-Reduce [] обеспечивается некоторая поддержка выполнения вычислений поблизости от данных, в ней не предоставляются какие-либо строгие гарантии.
• Более выразительные запросы. В Bigtable не поддерживается SQL. В настоящее время для формулировки запросов используется разработанный в Google язык Sawzall [], позволяющий задавать условия фильтрации данных на стороне сервера. По разным причинам это средство использовать неудобно, и для описания даже простых фильтров требуется изрядный объем работы. В настоящее время реализуется небольшой язык, в котором будет поддерживаться большинство разновидностей фильтров, требуемых пользователям.
• Прямая поддержка индексирования. Многие пользователи хотят хранить в Bigtable индексированные данные. В настоящее время им приходится самим управлять индексами.Ведется работа по встраиванию поддержки индексов непосредственно в Bigtable.
Большинство этих возможностей добавляется прямо в систему Bigtable, но некоторые из них создаются на уровне клиентов поверх Bigtable. Например, в проекте Megastore создаются более общие средства поддержки транзакций, согласованной репликации и DAO (Data Access Objects). Хотя Bigtable не является базой данных, большая часть добавляемых возможностей хорошо знакома сообществу баз данных, что не удивительно, если учитывать полезность этих возможностей. Интересно то, что проектирование и реализация Bigtable заняли всего 1-2 года, и это привело к созданию высокопроизводительной, сильно распределенной системы хранения данных.