Производительность для таблицы HBase с большим количеством версий на строку?
Мы реализуем механизм хранения HBase, в котором будет одна таблица, в которой будет использоваться (строка) ключ строки и (длинная) временная метка для поддержки нескольких версий одной строки. Это основная особенность HBase, и она будет очень полезна для нас.
В большинстве случаев строки будут иметь только дюжину или около того версий, и каждая версия должна иметь размер всего несколько килобайт во всех ячейках. Однако существует крайний случай, когда строка может иметь сотни версий, каждая с разной временной отметкой, и неясно, будут ли какие-либо затраты на производительность или масштабирование для установки максимального количества версий в строке (только для этой таблицы).) до "1000" (тысяча).
С точки зрения шаблонов доступа, когда мы извлекаем данные, это будет одним из:
- Вытащите "последнюю" версию строки, учитывая ключ строки
- Вытащить указанную версию строки, учитывая ключ строки и метку времени
- Вытащите одну ячейку (называемую "ts"), содержащую long из каждой версии строки, учитывая ключ строки
Последнее, в 3), позволяет нам узнать, какие версии существуют для каждой строки, без необходимости извлекать все версии строки. Худший вариант; в итоге мы получили бы обратно 1000 (одну тысячу) длин в запросе HBase Get. Это было бы 64 Кб. У нас никогда не будет необходимости запрашивать каждую ячейку в каждой версии строки в одном запросе Get.
Внутри команды было высказано предположение, что это может вызвать проблемы с производительностью, однако мы не можем найти разъяснения в руководстве HBase.
Итак, учитывая вышесказанное, у меня вопрос: есть ли какие-либо издержки производительности для нас, имея таблицу с (потенциально) 1000 версиями в строке?
1 ответ
Кортеж {row, column, version} точно определяет ячейку в HBase. Можно иметь неограниченное количество ячеек, в которых строка и столбец одинаковы, но адрес ячейки отличается только размером своей версии.
Хотя строки и ключи столбцов выражаются в байтах, версия указывается с использованием длинного целого числа...... ссылки
Как вы видите, HBase имеет максимальную версию Integer.MAX_VALUE, но если вы вставите версию, близкую к этому числу, вас может ожидать большой риск.
- Количество версий 37.1. Максимальное количество версий Максимальное количество версий строк для хранения настраивается для семейства столбцов с помощью HColumnDescriptor. Значение по умолчанию для максимальных версий - 1. Это важный параметр, поскольку, как описано в разделе "Модель данных", HBase не перезаписывает значения строк, а скорее сохраняет различные значения для каждой строки по времени (и квалификатор). Лишние версии удаляются во время крупных уплотнений. Число максимальных версий может потребоваться увеличить или уменьшить в зависимости от потребностей приложения.
Не рекомендуется устанавливать максимальное количество версий max (например, сотни и более), если только эти старые значения не очень дороги вам, потому что это значительно увеличит размер StoreFile.
Из официального документа мы можем получить некоторую информацию по вашему вопросу
Во-первых, в компактном виде, скорее всего, не хватает памяти.
Во-вторых, область одной строки не будет разделена.