Начало работы с Hbase (4) — Дизайн структуры таблицы — RowKey

Большие данные

file

Существует много различий в структуре таблиц Hbase и реляционных баз данных. Основная причина заключается в том, что Hbase имеет несколько новых концепций, таких как Rowkey, семейство столбцов и временная метка. Очень важно, как спроектировать структуру таблицы.

file

Создайте

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:

Список магазинов:

file

Список товаров:file

Пользователи и поклонники Weibo

Пользователи и фанаты — один ко многим

Структура таблицы РСУБД:

пользовательская таблица:

имя столбца
значение столбца
id
первичный ключ
nickname имя пользователя

Таблица соответствия болельщиков:

имя столбца
значение столбца
user_id Идентификатор пользователя
fans_id идентификатор болельщика

Структура таблицы Hbase:

file

Больше вычислений в реальном времени, Hbase, Flink, Kafka и других связанных технических сообщений в блогах, добро пожаловать, чтобы обратить внимание на потоковые вычисления в реальном времени.

file