Существует много различий в структуре таблиц Hbase и реляционных баз данных. Основная причина заключается в том, что Hbase имеет несколько новых концепций, таких как Rowkey, семейство столбцов и временная метка. Очень важно, как спроектировать структуру таблицы.
Создайте
Hbase определяет строку данных с помощью временной метки семейства столбцов Rowkey таблицы.
Это полностью отличается от реляционных баз данных:
Атрибуты |
HBase |
RDBMS |
---|---|---|
тип данных | только строки |
Богатые типы данных |
манипуляция данными | Простой CRUD не поддерживает соединение | Различные функции и соединения таблиц |
режим хранения | Хранилище на основе столбцов |
На основе структуры таблицы и хранения строк |
защита данных | После обновления остается старая версия |
заменять |
Масштабируемость | Легко добавлять узлы, высокая совместимость |
Требует среднего уровня, жертвуя функциональностью |
Итак, факторы, которые необходимо учитывать Hbase:
1. Сколько семейств столбцов должно быть в этой таблице?
2. Какие данные использует семейство столбцов?
3. Сколько столбцов в семействе столбцов
4. Какое имя столбца?
5. Какие данные должен хранить модуль?
6. Сколько временных версий хранится в каждом блоке
7. Что такое структура Rowkey и какую информацию она должна содержать
Обратите внимание:
1. Присоединяйтесь
В Hbase нет объединения, поэтому для решения этой проблемы требуется большая структура таблицы для добавления ключевых слов в записи строк.
2. Роки
Дизайн Rowkey очень важен, потому что Hbase упорядочен, необходимо учитывать проблемы с префиксами и суффиксами.
Может быть создан через Hbase Shell и Java Api:
Configuration config = HBaseConfiguration.create();
Admin admin = new Admin(conf);
TableName table = TableName.valueOf("myTable");
admin.disableTable(table);
HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1); // adding new ColumnFamily
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2); // modifying existing ColumnFamily
admin.enableTable(table);
Роуки Дизайн
Rowkeys — это неделимые массивы байтов, которые лексикографически хранятся в таблице.
Rowkey сильно влияет на производительность Hbase, потому что: Регион предоставляет услуги для строк в диапазоне на основе Rowkey HFile хранит упорядоченные строки на жестком диске.
Rowkey — это индекс, если вы не знаете Rowkey, вы можете просканировать только всю таблицу, тогда производительность сильно снизится.
Вот пример рейтинга видео:
1. Rowkey лексикографически от большого к меньшему
Собственный Hbase поддерживает только сортировку от меньшего к большему.Чтобы добиться порядка от большего к меньшему, вы можете использовать метод Rowkey=Integer.MAX_VALUE-Rowkey, а затем переключиться обратно на прикладной уровень для выполнения требований.
2. Rowkey хэширует как можно больше
Rowkey должен быть максимально хеширован, чтобы гарантировать, что данные не находятся в регионе, что позволяет избежать концентрации операций чтения и записи.
Например, мы можем спроектировать userid_videoid для объединения строк, чтобы пользователи были неодинаковыми.
Есть три способа решить эту проблему: инвертировать идентификатор пользователя, хешировать идентификатор пользователя, взять модуль идентификатора пользователя и выполнить шифрование MD5, а также добавить первые 6 цифр к идентификатору пользователя.
3. Длина ключевого ключа должна быть как можно короче.
Если Rowkey слишком длинный, накладные расходы на хранение будут большими.
Если Rowkey слишком длинный, использование памяти будет уменьшено, что уменьшит количество попаданий в индекс.
семейство столбцов
Семейство столбцов — это набор столбцов. Все элементы семейства столбцов имеют одинаковый префикс. Например, курсы: история и курсы: математика являются членами семейства столбцов курсов. Двоеточие является разделителем. Префиксы семейства столбцов должны быть выходными символами, а столбцы могут состоять из произвольных массивов байтов.
Семейство столбцов должно быть объявлено при создании таблицы, и столбец не нужно специально объявлять, и пользователь может создать новый столбец в любое время.
Практическое правило:
- Цель состоит в том, чтобы ограничить размер регионов от 10 до 50 ГБ.
- Цель состоит в том, чтобы ограничить размер ячейки до 10 МБ или 50 МБ, если вы используете тип моба. В противном случае рассмотрите возможность сохранения данных ячейки в HDFS и хранения указателя на эти данные в HBase.
- Типичная схема содержит от 1 до 3 семейств столбцов на таблицу. Дизайн таблицы HBase не должен быть похож на дизайн таблицы RDBMS.
- Для таблиц с 1 или 2 семействами столбцов подходит 50-100 регионов. Помните, что регион — это непрерывный сегмент семейства столбцов.
- Названия семейств столбцов должны быть как можно короче. Каждое значение хранит имя семейства столбцов (без учета кодировки префикса). Они не должны быть самодокументируемыми, описательными именами, как типичная СУБД.
- Если вы храните машинные данные или информацию журнала на основе времени, а ключ строки основан на идентификаторе устройства или идентификаторе службы + время, вы столкнетесь с ситуацией, когда более старые области данных никогда не будут иметь дополнительных записей. В этом случае вы получите небольшое количество активных регионов и большое количество регионов, в которые больше не будет производиться запись. Для этого случая допустимо большее количество регионов, так как потребление ресурсов зависит только от активного региона.
- Если часто записывается только одно семейство столбцов, то только это семейство столбцов занимает память. Обратите внимание на режим записи при распределении ресурсов.
Пример
Магазин и товары
Товар в магазине — это отношение «многие ко многим»
Структура таблицы РСУБД:
Магазин стол:
имя столбца |
значение столбца |
---|---|
id |
первичный ключ |
name |
название магазина |
address | место расположения |
regdate | Дата регистрации |
Список товаров:
имя столбца |
значение столбца |
---|---|
id |
первичный ключ |
name |
наименование товара |
price |
цена |
details | информация о продукте |
title |
показать имя |
Реляционные таблицы:
имя столбца |
значение столбца |
---|---|
shop_id | хранить ключ |
item_id | товарный ключ |
type |
Тип ассоциации |
Структура таблицы Hbase:
Список магазинов:
Список товаров:
Пользователи и поклонники Weibo
Пользователи и фанаты — один ко многим
Структура таблицы РСУБД:
пользовательская таблица:
имя столбца |
значение столбца |
---|---|
id |
первичный ключ |
nickname | имя пользователя |
Таблица соответствия болельщиков:
имя столбца |
значение столбца |
---|---|
user_id | Идентификатор пользователя |
fans_id | идентификатор болельщика |
Структура таблицы Hbase:
Больше вычислений в реальном времени, Hbase, Flink, Kafka и других связанных технических сообщений в блогах, добро пожаловать, чтобы обратить внимание на потоковые вычисления в реальном времени.