Презентацию к лекции 26 Вы можете скачать здесь.
Колоночные базы данных: общий подход
Колоночные базы данных противопоставляются реляционным по принципу работы с данными. Если реляционные СУБД оперируют строками, то колоночные — столбцами. Для понимания их логики используется абстракция очень большой таблицы.
Внутри каждой ячейки могут храниться структурированные данные. К множеству атрибутов этих данных можно получить доступ. Атрибуты представляются колонками в табличном виде. Колонки могут быть сгруппированы в семейства колонок (Column Families). Это логическое объединение дает локализацию по атрибутам.
Семейства определяются заранее, но внутри них можно добавлять новые колонки в процессе накопления данных. Масштабирование таких баз основано на репликации и автоматическом шардировании (automatic sharding) — добавлении или удалении серверов хранения без остановки работы.
Подобные системы оптимизированы для записи. Чтение происходит медленнее. Поэтому основная сфера их применения — это системы с высоким потоком данных, требующие глубокого, но не сиюминутного анализа:
- Ленты активности и очереди сообщений.
- Кеширование.
- Аналитические системы.
- Поисковая индексация.
Ярким представителем таких баз является HBase. Он входит в экосистему Apache Hadoop и создавался как клон Google BigTable по опубликованным Google материалам.
Абстракция «Разреженной таблицы»
Ключевая идея HBase — это разреженная таблица (Sparse Table). Она подразумевает, что в базе могут быть не только миллиарды строк, но и миллионы столбцов. Такая модель отлично подходит для сценариев, где данные об объектах поступают из разных источников с разными наборами атрибутов.
В классической реляционной модели это привело бы к огромному количеству пустых ячеек. HBase решает эту проблему: если у объекта нет какого-либо атрибута, соответствующая колонка для него просто не создается и не занимает места на диске.
Этот механизм позволяет хранить тысячи версий ячеек и распределять данные по тысячам серверов, достигая объемов в петабайты.
Отказ от принципов реляционных СУБД
При переходе на HBase важно отказаться от части опыта работы с реляционными базами данных. HBase — не всегда замена вашей текущей СУБД.
Переезд на HBase не требуется, если:
- Ваши данные хорошо структурированы, а схема меняется редко.
- Для вас критична транзакционность и строгая согласованность данных в любой момент времени.
При использовании HBase данные, как правило, становятся ненормализованными. Возможно наличие очень большого числа столбцов, многие из которых окажутся пустыми для части объектов. Система может не сообщить об ошибке в названии столбца, а просто создать новый или посчитать, что вы обращаетесь к уже существующему.
Структура хранения данных в HBase
Данные в HBase хранятся как наборы из пяти элементов: ключ строки (Row Key), семейство колонок (Column Family), колонка (Column), временная метка (Timestamp) и значение (Value).
- Ключ строки — это обычное строковое значение. По нему строится первичный индекс. Ключи могут индексироваться нетривиальным способом.
- Колонки — это атрибуты, которые вы хотите индексировать. Они группируются в семейства по логическому признаку (например, по источнику данных).
- Значение — внутри ячейки может лежать что угодно, включая документы любой сложности. Содержимое ячейки не индексируется.
Версионность — важная особенность HBase. Каждая ячейка может хранить множество версий значения. Простейший способ обозначить версию — добавить временную метку. При обновлении данные не перезаписываются, а складываются с новой меткой. Это помогает разрешать конфликты при распределенном хранении и синхронизации. Количество хранимых версий ячейки — настраиваемый параметр.
Регионы данных
Совокупность строк и семейств колонок образует регион данных. Это единица хранения в HBase.
Регионы отображаются на файлы в распределенной файловой системе HDFS (Hadoop Distributed File System). Каждый регион — это конкретный блок для обработки. Параллельная обработка данных через механизм MapReduce использует целый регион как единицу. Поэтому размер региона важно адаптировать под конкретную задачу.
HBase против реляционных СУБД
Сравнение необходимо для принятия решения о смене архитектуры.
| Критерий |
Реляционная СУБД |
HBase |
| Модель данных |
Строки и колонки с фиксированной схемой |
Разреженная матрица без фиксированных колонок и типов |
| Транзакции |
Поддерживаются |
Только на уровне единичной записи |
| Язык запросов |
Гибкий SQL |
Простые операции: get, put, scan |
| Индексы |
Разнообразные |
Только по ключам строк и колонкам |
| Масштабируемость |
Ограниченная (в основном вертикальная) |
Отличная горизонтальная, линейная |
| Производительность |
Падает на сверхбольших объемах |
Высокая на огромных данных за счет MapReduce |
Для работы с данными HBase можно также использовать технологию Hive. Она не является частью HBase, но входит в платформу Hadoop и позволяет работать с теми же данными через язык запросов, похожий на SQL.
Преимущества HBase
- Горизонтальная масштабируемость: производительность растет линейно с добавлением серверов.
- Автоматическое шардирование: система сама распределяет и перебалансирует данные.
- Отказоустойчивость: автоматическое восстановление после сбоев серверов.
- Высокая согласованность и целостность данных внутри строки.
- Эффективность для разреженных, слабоструктурированных данных.
Краткие итоги
Колоночные базы данных, рассмотренные через призму HBase, представляют собой принципиально иной подход к организации хранения информации, нежели традиционные реляционные системы. Их фундаментальная идея заключается в отказе от жесткой схемы в пользу гибкой модели разреженной таблицы. Это позволяет эффективно работать с данными, структура которых может отличаться от объекта к объекту. Вместо того чтобы резервировать место под пустые ячейки, система хранит только реально существующие атрибуты.
Практическая ценность такого подхода раскрывается в условиях высоких потоков слабоструктурированных данных. Возможность линейного горизонтального масштабирования за счет автоматического шардирования и распределенных вычислений MapReduce делает HBase подходящим инструментом для аналитических систем, где объем данных является критическим фактором. Механизмы версионирования и хранения данных в виде пар «ключ-значение» с временными метками обеспечивают отказоустойчивость и целостность на уровне отдельных записей.
Ключевым выводом является осознание того, что HBase не является универсальной заменой реляционных СУБД. Выбор между этими технологиями требует анализа требований конкретной задачи. Если приложению необходима строгая транзакционность, сложные запросы и стабильная структура данных, реляционные базы остаются более предпочтительными. Переход на колоночную архитектуру обоснован только тогда, когда главными приоритетами становятся гибкость схемы, способность обрабатывать огромные массивы разреженных данных и горизонтальная масштабируемость.
Введение в колоночные базы данных
Колоночные базы данных отличаются от реляционных тем, что оптимизированы для работы со столбцами, а не строками. Ключевая модель для их понимания — очень большая таблица. Атрибуты данных представляются колонками, которые группируются в семейства колонок для логической локализации.
Схема таких баз гибкая: можно добавлять колонки «на лету».
Масштабирование достигается за счет автоматического шардирования и репликации. Такие системы оптимизированы для записи, а чтение медленнее. Они подходят для лент активности, очередей сообщений, аналитических систем и кеширования.
HBase — яркий представитель этого класса, клон Google BigTable, входящий в экосистему Apache Hadoop.
Ключевая концепция: Разреженная таблица
Главная идея HBase — это разреженная таблица (Sparse Table). Она может содержать миллиарды строк и миллионы столбцов.
Это удобно, когда данные об объектах приходят из разных источников с разным набором атрибутов. В отличие от реляционной БД, где пришлось бы резервировать место под пустые ячейки, HBase просто не хранит пустые значения. Если у объекта нет атрибута, колонка для него не создается и не занимает место.
Когда HBase не нужна
HBase — не универсальная замена реляционным СУБД. Переезд не требуется, если:
- Ваши данные строго структурированы, и схема меняется редко.
- Вам критически важны ACID-транзакции и строгая согласованность данных.
При работе с HBase данные обычно денормализуются. В системе может быть много столбцов, многие из которых пустые. HBase может не сообщить об ошибке в имени колонки, а просто создать новую.
Модель данных и версионность
Данные хранятся как набор: ключ строки (Row Key), семейство колонок (Column Family), колонка (Column), временная метка (Timestamp), значение (Value).
- Ключ строки — строка для индексации.
- Колонки — индексируемые атрибуты.
- Значение — может быть любым (например, JSON-документ). Содержимое не индексируется.
Версионность важна. Каждая ячейка хранит множество версий. При обновлении данные не перезаписываются, а складываются с новой меткой. Это помогает разрешать конфликты при распределенном хранении и синхронизации. Количество хранимых версий ячейки — настраиваемый параметр.
Архитектура: Регионы и MapReduce
Строки и семейства колонок образуют регион данных — единицу хранения. Регионы отображаются на файлы в HDFS. Параллельная обработка через MapReduce использует регион как цельный блок. Поэтому размер региона важно настраивать под задачу.
Сравнение с реляционными СУБД
| Критерий |
Реляционная СУБД |
HBase |
| Модель |
Фиксированная схема |
Разреженная матрица, гибкая схема |
| Транзакции |
Полные ACID |
На уровне одной строки |
| Запросы |
Гибкий SQL |
Простые get, put, scan |
| Индексы |
Разные |
Только по ключам строк и колонкам |
| Масштабирование |
Вертикальное |
Линейное горизонтальное |
Для SQL-подобных запросов к данным HBase можно использовать технологию Hive.
Итоговые преимущества
HBase — это распределенная, отлично масштабируемая база данных с автоматическим шардированием и восстановлением после сбоев. Её сильные стороны: линейная масштабируемость, низкая задержка на запись, высокая согласованность внутри строки и эффективная работа с разреженными данными.
1. Колоночные базы данных вроде HBase хранят данные по столбцам, а не по строкам, что оптимизирует аналитические запросы.
2. HBase реализует абстракцию разреженной таблицы, исключая хранение пустых ячеек для неоднородных данных.
3. Схема данных в HBase не является фиксированной: колонки можно добавлять динамически внутри заранее определенных семейств.
4. Данные в ячейках версионируются с помощью временных меток, что упрощает разрешение конфликтов в распределенной системе.
5. HBase оптимизирована для операций записи, в то время как чтение происходит медленнее.
6. Основная единица хранения и параллельной обработки — регион данных, который отображается на файлы в HDFS.
7. Транзакции в HBase поддерживаются лишь на уровне единичной записи (строки).
8. Индексация в HBase возможна только по ключам строк и колонкам, что ограничивает гибкость запросов.
9. HBase обеспечивает линейную горизонтальную масштабируемость за счет автоматического шардирования.
10. Переход на HBase нецелесообразен для задач со стабильной схемой и строгими требованиями к согласованности.
11. Данные при использовании HBase часто денормализуются, что является осознанной платой за масштабируемость.
12. HBase — это не всегда замена реляционной СУБД, а специализированный инструмент для определенного класса задач.
1. В чем состоит ключевое различие между моделью данных HBase и реляционных СУБД?
2. Какую роль играют семейства колонок в организации данных?
3. Каким образом разреженная структура таблицы экономит дисковое пространство?
4. Для каких сценариев использования HBase подходит лучше всего и почему?
5. Объясните механизм версионирования данных в ячейках и его назначение.
6. Что такое регион данных и как он связан с распределенной обработкой в Hadoop?
7. Какие ограничения накладываются на поддержку транзакций в HBase?
8. Перечислите основные операции для работы с данными в HBase.
9. Какие факторы указывают на то, что переезд на HBase не является оправданным?
10. Как в HBase решается проблема конфликтов при распределенном хранении и сбоях?