Apache HBase vs Redis: сходства и различия, варианты использования

архитектура данных, курсы HBase примеры обучение, Apache HBase Hadoop администратор кластера курс, NoSQL курсы примеры обучение, Школа Больших Данных Учебный центр Коммерсант

Сегодня на примере Apache HBase и Redis разберемся со сходствами и отличиями NoSQL-СУБД типа «семейство колонок» и «ключ-значение». Что между ними общего и что выбирать для практического использования в зависимости от сценариев применения.

3 типа NoSQL-хранилищ данных

Apache HBase и Redis являются довольно популярными базами данных среди NoSQL-решений. Однако, они относятся к разным категориям. В частности, Apache HBase является колоночно-ориентированной NoSQL-СУБД, которая работает поверх HDFS и обеспечивает возможности Google BigTable для Hadoop. Хотя иногда для простоты эту базу данных называют key-value хранилищем, это не совсем корректно: на самом деле она реализует модель «семейство колонок» (wide column store).

Хранилища типа wide column store, также называемые расширяемыми хранилищами записей, могут хранить очень много данных благодаря своей колоночной структуре, динамически изменяемой. Поскольку имена столбцов, а также ключи записей не являются фиксированными, а запись может содержать миллиарды столбцов, хранилища wide column store можно рассматривать как двумерные базы типа key-value. Для них характерно отсутствие схемы данных, но по желанию, в том же Apache HBase реализация собственной схемы возможна. Важно отметить, что NoSQL-СУБД типа wide column store не следует путать с колоночной ориентацией хранения данных, которая поддерживается в некоторых реляционных базах. Например, в Greenplum, о чем мы писали здесь и здесь. Это внутренняя концепция повышения производительности реляционных СУБД для аналитических рабочих нагрузок в OLAP-системах, когда данные таблицы хранятся на диске столбец за столбцом.

Хранилища типа ключ-значение имеют более простую модель управления данными: они могут хранить только пары ключей и значений, а также извлекать значения по известному ключу. Считается, что эти примитивные сценарии использования не подходят для сложных приложений и аналитических рабочих нагрузок. Однако, такая простота отлично работает в качестве внутреннего хранилища состояний или как промежуточный слой кэширования. Например, платформа потоковой передачи событий Apache Kafka и фреймворк Flink внутри себя используют key-value СУБД RocksDB для хранения промежуточных вычислений. Подробнее об этом мы рассказывали здесь и здесь.

Справедливости ради стоит отметить, что некоторые базы данных key-value могут сортировать ключи, позволяя выполнять запросы диапазона, а также обрабатывать их упорядоченно, что расширяет их варианты использования. В некоторых NoSQL-СУБД типа «ключ-значение», значения ключей могут быть разного типа данных, что определяет различный набор команд для операций над ними. В частности, именно так устроен Redis, работу которого мы разбирали в статье блога нашей Школы прикладного бизнес-анализа.

Завершая вводную часть про типы баз данных, следует также упомянуть документо-ориентированные СУБД, наиболее известными из которых являются Elasticsearch, MongoDB и CouchDB. Они хранят данные в виде документов со сложными вложенными структурами, например, JSON с массивами объектов, каждый из которых имеет свой набор атрибутов. Пример такой структуры данных и манипуляций над ней в MongoDB мы рассматривали здесь. Вспомнив основные характеристики некоторых категорий NoSQL-СУБД, разберем их на практических примерах.

Apache HBase vs Redis

В отличие от документо-ориентированных СУБД, HBase не имеет собственной концепции иерархических данных, вложенных коллекций или типов данных, как в Redis. Все данные в HBase представляются в виде массива байтов. В HBase также нет встроенных простых методов поиска и фильтрации данных, тем более средствами стандартных SQL-запросов. Частично это решается с помощью инструментов SQL-on-Hadoop, таких как Hive и Apache Phoenix.

Подобно Redis, Apache HBase использует модель ключ-значение, представляя ключ строки и квалификатор столбца. Но пропускная способность чистых key-value СУБД намного выше благодаря более простой модели хранения в виде хэш-таблиц. В HBase, если блок данных еще не кэширован в куче регионального сервера, скорость обработки данных снижается из-за открытия соединения с базовым узлом данных Hadoop и последующего чтения блока данных из HDFS, с передачей информации по TCP/IP. В резидентной Redis, ключи и значения хранятся в оперативной памяти, поэтому обращения к данным выполняются очень быстро.

Дополнительным фактором, замедляющим работу Apache HBase, является язык разработки этой СУБД. Будучи написанным на Java, это NoSQL-хранилище сильно зависит от JVM, включая особенности сборки мусора. В случае с HBase при большом количестве поступающих мелких операций записи, хранящихся в памяти и сбрасываемых, а затем большом кэше в куче можно столкнуться с частыми паузами на несколько секунд, что делает время чтения данных непредсказуемым. В Redis, написанной на языке C, подобная проблема отсутствует.

Также стоит помнить про особенности хранения данных в Apache HBase: поскольку ключи строк сортируются в лексикографическом порядке, то схемы ключей строк, которые обычно целесообразны для сканирования данных, часто оказываются неэффективными. Например, данные с отметкой времени: если timestamp является первым компонентом ключей строк, очень легко сканировать диапазоны времени, но все новые вставки идут в конце таблицы. Это приводит к возникновению горячих точек, когда много данных обрабатывается только одним региональным сервером, а остальная часть кластера простаивает. Пример такой ситуации с Apache HBase мы разбирали здесь. Для Redis такая проблема не характерна.

Подводя итог сравнению рассматриваемых NoSQL-хранилищ данных, оценим их по следующим критериям:

  • краткое описание;
  • модель хранения данных;
  • зрелость (год выпуска);
  • открытость исходного кода;
  • язык реализации;
  • поддерживаемые операционные системы;
  • поддерживаемые языки разработки;
  • схема и типизация данных;
  • поддержка ANSI SQL;
  • язык запросов, API и протоколы доступа к данным;
  • поддержка хранимых процедур и триггеров;
  • методы партиционирования и репликации данных;
  • поддержка вычислительной модели MapReduce;
  • поддержка внешних ключей;
  • индексация данных;
  • поддержка ACID-требованиям к транзакциям и методы обеспечения консистентности данных;
  • хранение данных в оперативной памяти;
  • политики безопасности;
  • варианты использования.

Оформим это сравнение в виде таблицы.

Критерий

Apache HBase

Redis

краткое описание

Проект фонда Apache Software Foundation, колоночно-ориентированная NoSQL-СУБД, которая работает поверх HDFS и обеспечивает возможности Google BigTable для Hadoop

Проект компании Redis, резидентная NoSQL-СУБД типа key-value. Акроним от Redis (REmote DIctionary Server).

модель хранения данных

Wide column store

Key-value: все данные хранятся в виде словаря, где ключи связаны со своими значениями

зрелость (год выпуска)

2008

2009

открытость исходного кода

Открытый исходный код (лицензия open source от Apache 2.0)

Открытый исходный код и коммерческие лицензии для Enterprise-версии

язык реализации

Java

C

поддерживаемые операционные системы

Linux, Unix и Windows с Cygwin (UNIX-подобная среда и CLI для интеграции приложений, данных и ресурсов Windows с приложениями, данными и ресурсами UNIX)

BSD, Linux, OS X и Windows

поддерживаемые языки разработки

C, C#, C++, Groovy, Java, PHP, Python, Scala

C, C#, C++, Clojure, Crystal, D, Dart, Elixir, Erlang, Fancy, Go, Haskell, Haxe, Java, JavaScript (Node.js), Lisp, Lua, MatLab, Objective-C, OCaml, Pascal, Perl, PHP, Prolog, Pure Data, Python, R, Rebol, Ruby, Rust, Scala, Scheme, Smalltalk, Swift, Tcl, Visual Basic

схема и типизация данных

Изначально нет схемы, возможна поддержка пользовательской схемы данных. Можно реализовать собственные типы данных и AVRO (бинарный строковый формат)

Нет схемы данных. В отличие от других хранилищ данных в Redis значения ключей могут быть разного типа данных (строки, хэши, списки, множества) с разным набором команд для операций над ними

поддержка ANSI SQL

нет

нет

язык запросов, API и протоколы доступа к данным

Собственный язык запросов, Java API, RESTful HTTP API, Thrift

Собственный язык запросов, протокол RESP (REdis Serialization Protocol)

поддержка хранимых процедур и триггеров

Да, хранимые процедуры в виде Java-сопроцессоров

Да, каналы публикации/подписки предоставляют некоторые триггерные функции. Есть декларативный движок RedisGears, который поддерживает транзакционную, пакетную и управляемую событиями обработку данных в Redis

методы партиционирования и репликации данных

Шардирование, репликация с несколькими источниками и репликация источник-реплика

Шардирование на основе хэшей с поддержкой хэш-тегов, репликация с несколькими источниками и репликация источник-реплика

поддержка вычислительной модели MapReduce

Да

С применением движка RedisGears

поддержка внешних ключей

нет

нет

индексация данных

Нет вторичной индексации

Вторичная индексация возможна с модулем RediSearch

поддержка ACID-требованиям к транзакциям и методы обеспечения консистентности данных

Согласованность данных в конечном счете, ACID на уровне строки (в миллионах столбцов), о чем мы писали здесь

Атомарное выполнение командных блоков и скриптов и оптимистическая блокировка. Доступ к данным сериализуется сервером. Настраиваемые механизмы сохранения данных с помощью моментальных снимков и журналов операций

хранение данных в оперативной памяти

поддерживается

Да, изначально в ОЗУ, но данные также можно сохранить на жесткий диск

политики безопасности

ACL-списки, RBAC и ABAC с помощью Apache Ranger

ACL-списки, RBAC и LDAP в Enterprise-версии, аутентификация Mutual TLS и Password-based

варианты использования

Управление системами обмена сообщениями, хранение огромных объемов быстро изменяющихся данных. Подходит для аналитики больших данных в реальном времени

В качестве промежуточного слоя, кэша между приложениями реального времени и большой, но не очень быстрой базой данных, например, PostgreSQL. Хранение кэшей результатов запросов к постоянному хранилищу, пользовательских сессий, веб‑страниц, метаданных и других часто используемых объектов.

Сравнение показывает, что Apache HBase и Redis есть определенные сходства, хотя, конечно, это совершенно разные категории NoSQL-хранилищ, каждое из которых имеет собственные сценарии использования, обусловленные архитектурой и принципами работы этих СУБД. А чем Redis Streams и Pub/Sub похожи с Apache Kafka, читайте в нашей новой статье.

Узнайте больше подробностей про администрирование и эксплуатацию Apache HBase и других компонентов экосистемы Hadoop для хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://www.dynamicyield.com/article/apache-hbase-for-the-win/
  2. https://db-engines.com/en/system/HBase%3BRedis
Поиск по сайту