MapR-DB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:58, 5 июня 2020.

MapR-DB – это высокопроизводительная NoSQL[1] система управления базами данных, встроенная в платформу данных MapR. Это многомодельная база данных с высокой степенью масштабируемости.


MapR-DB
fraimed
Разработчики: MapR Company
Постоянный выпуск: MapR 6.1 / 24 September 2018 года; 21 months ago (2018-09-24)
Состояние разработки: Активное
Операционная система: Linux
Локализация: Английский язык
Тип ПО: NoSQL СУБД
Веб-сайт Официальный сайт MapR-DB

Преимущества NoSQL базы данных

NoSQL-базы оптимизированы для приложений, которые должны быстро, с низкой временной задержкой обрабатывать большой объем данных с разной структурой. Современное понимание NoSQL-СУБД возникло в начале 2000-х годов, в рамках создания параллельно работающих распределённых систем для масштабируемых интернет-приложений, таких как онлайн-поисковики. С ростом объёмов данных актуальной проблемой стало - масштабирование. Реляционные базы данных хорошо подходят для работы со строго структурированными наборами данных с предсказуемым размером. База данных MapR была разработана с учётом эффективного масштабирования и для работы в составе распределенной кластерной архитектуры, которую традиционные SQL базы данных не могут предоставить. По сравнению с другими базами данных NoSQL база данных MapR имеет несколько преимуществ:

  • Предсказуемая низкая задержка и стабильно высокая пропускная способность (см. рисунок 1)[Источник 1];
  • Разделение данных в кластере по ключу выполняется автоматически и быстро;
  • Продвинутая модель согласованности и репликации устраняет риски возможного отказа;
  • Мгновенное восстановление происходит без потери данных.
Рисунок 1 – Сравнение производительности MapR-DB с другими БД

Масштабирование MapR-DB

В базе данных MapR таблица автоматически разбивается внутри кластера (см. рисунок 2) по диапазону ключей, а каждый сервер хранит в себе подмножество таблицы, обеспечивая масштабируемое и быстрое чтение и запись по ключу строки. Данная операция происходит автоматически. Это значительно повышает производительность за счет распределенной обработки базы данных по кластеру. Совместно используемые данные хранятся вместе в денормализованном виде, например в документах JSON [2], что ускоряет горизонтальное масштабирование.

Рисунок 2 – Схема горизонтального масштабирования MapR-DB

Особенности файловой архитектуры MapR-DB

Apache HBase [3] и Apache Cassandra [4] работают в файловой системе, подразумевающей только добавление файлов, что приводит к невозможности обновить файлы при изменении данных. Уникальность MapR заключается в том, что таблицы MapR-DB, файлы MapR интегрированы в надежное, глобальнораспределенное хранилище данных MapR-XD. MapR-XD реализует файловую систему чтения-записи, изначально встроенную в C++ и напрямую обращается к дискам, что позволяет MapR-DB выполнять эффективные обновления файлов вместо постоянной записи в новые неизменяемые файлы. MapR-DB не имеет лишних слоев абстракции(см. рисунок 3) [Источник 2], через которые данные перемещаются при выполнении операций записи, чтения. Она работает внутри процесса MFS, который читает и записывает на диски информацию напрямую. Подход, принятый в MapR-DB, устраняет, дублирующее кэширование и ненужные абстракции, что приводит к оптимизации операций ввода-вывода с данными.

Рисунок 3 – Особенности файловой архитектуры Mapr-DB

Разделы в кластерах

В MapR – DB в кластере можно создавать разделы. Таким образом, можно изолировать конфиденциальные данные или приложения и даже использовать разнородное оборудование в кластере для определенных рабочих задач. Например, можно разместить данные для хранения личной информации на узлах с зашифрованными дисками или для хранения таблиц MapR-DB на узлах с твердотельными накопителями. Также можно изолировать рабочие среды для разных пользователей или для различных приложений. В качестве примера на приведенном ниже рисунке изображена таблица кластера MapR. Кластер имеет три отдельных раздела, смонтированных в каталогах /user/john, /user/dave и /project/ads. Как показано на рисунке 4, каждый каталог содержит файлы и таблицы, логически сгруппированные вместе. Поскольку каждый из этих каталогов расположен на разных разделах, данные в каждом каталоге могут иметь различные правила и разрешения. Например, /user/john имеет разрешение на использование диска, а с /user/dave переодически снимается резервная копия. Кроме того, два каталога /user/dave и /project/ads скопированы на носители, находящиеся за пределами данного кластера, тем самым обеспечивая доступ только для чтения к данным с высоким трафиком. Зеркалирование - это параллельная операция, копирования данных непосредственно с узлов одного кластера MapR на узлы в удаленном кластере. Содержимое раздела постоянно доступно, даже если файлы раздела записываются или удаляются.

Рисунок 4 – Схема 3-х разделов, имеющих разные разрешения

Функции снимка раздела

Снимок раздела фиксирует состояние каталогов раздела, таблиц MapR-DB и файлов в определенный момент времени. Вы можете использовать их для:

  • Отката из – за возникших ошибок. Ошибки приложения или непреднамеренные ошибки пользователя могут по ошибке удалить данные или изменить данные непредвиденным образом. С помощью моментальных снимков разделов вы можете откатить таблицы MapR-DB до известного, четко определенного состояния;
  • Создания резервных копий во время работы кластера. Возможность создавать резервные копии таблиц на лету для проверки целостности или управления данными;
  • Машинное обучение. Среды машинного обучения, такие как Apache Mahout, могут использовать моментальные снимки для процесса обучения модели. Снимки позволяют при обучении работать с сохраненным изображением тренировочных данных, сохранённых в точно определённый момент времени. В большинстве случаев использование снимков не требует дополнительного места в хранилище, и снимки делаются менее чем за одну секунду;

Моментальные снимки базы данных не связаны с резервным копированием путем создания моментальных снимков и с репликацией.

Запись данных в кластер MapR-DB

В обычных условиях кластеру необходимо как можно быстрее записывать и реплицировать входящие данные. Когда файл записывается в кластер MapR, он сначала разбивается на части, называемые "чанками". Каждый "чанк" записывается в контейнер как последовательность блоков по 8 Кбайт (см. рисунок 5)[Источник 3]. Как только блок записан, он реплицируется дальше по узлам кластера. Это повторяется для каждого "чанка", пока весь файл не будет записан. MapR гарантирует, что каждая запись, на которую был дано подтверждение о записи, переживет сбой.

Рисунок 5 – Процесс записи файла в узлы кластера MapR-DB

Модели данных, хранящиеся в MapR-DB

В MapR-DB могут хранится следующие модели данных:

  • Хранилище документов;
  • Столбчатое хранилище;

Хранилище документов управляет набором значений именованных строковых полей и данных объекта. Данные в этих хранилищах содержатся в виде документов JSON. Каждое значение поля может представлять собой скалярный элемент, например число, или сложный объект, например список или коллекция типа "родитель — потомок". Как правило, документ содержит все данные одной сущности. Например, сущность может содержать сведения о клиенте, заказе или и те, и другие. Один документ может содержать сведения, которые в реляционной СУБД обычно распределяются по нескольким реляционным таблицам. Хранилище документов не обязывает использовать одинаковую структуру для всех документов. Поддержка свободной формы записи обеспечивает большую гибкость. Например, приложения могут хранить в документах разные данные в соответствии с текущими требованиями компании. MapR-DB поддерживает документы OJAI в качестве стандартного файла документо-ориентированного хранилища данных. Таблицы MapR-DB JSON используют модель данных OJAI [5] и поддерживают API OJAI. Документы подобны JSON, но хранятся в эффективной двоичной форме, а не в виде простого текста ASCII. В таблицах JSON каждое значение имеет уникальный ключ (_id), а поля в документе идентифицируются путями, например, address.street)

{
  "_id"   : "row key here",
  "name"  : "bob",
  "photo" : "photo path",
  "address" : {
    "house"   : 123,
    "street"  : "Main",
    "phones"  : [
      {"mobile" : 5551234},
      {"work"   : 11234567890}]
  },
  "hobbies" : ["badminton", "chess"]
}

Использование OJAI в MapR-DB даёт следующие преимущества:

  • Возможность хранения вложенных или иерархических данных;
  • Для обновления отдельных полей или подмножеств полей нет необходимости читать целые документы, изменять их, а затем записывать измененные документы на диск;
  • Возможность фильтровать результаты запроса в MapR-DB, прежде чем результаты будут возвращены клиентским приложениям.

Пример создания JSON таблицы:

public void createJSONTable(String tablePath) throws DBException {
    try (Admin admin = MapRDB.newAdmin()) {
      if (!admin.tableExists(tablePath)) {
          admin.createTable(tablePath).close();
      }
    }
  }

Просмотр таблиц JSON в папке:

public void listTables(String parentFolder) throws DBException {
    try (Admin admin = MapRDB.newAdmin()) {
      for(Path tablePath : admin.listTables(parentFolder)) {
        System.out.println(tablePath);
      }
    }
  }

Удаление JSON таблицы:

public void deleteTable(String tablePath) throws DBException {
    try (Admin admin = MapRDB.newAdmin()) {
      if (admin.tableExists(tablePath)) {
        admin.deleteTable(tablePath).close();
      }
    }
  }

Столбчатое хранилище данных или хранилище семейств столбцов упорядочивает данные по столбцам и строкам. Столбчатое хранилище данных в простейшей форме почти неотличимо от реляционной базы данных, по крайней мере организационно. Настоящее преимущество столбчатого хранилища данных заключается в способности денормализованно структурировать разреженные данные, что связано со столбцово-ориентированным методом хранения данных. Сканирование всей таблицы на совпадения может быть очень трудоемким. Семейства столбцов позволяют группировать связанные наборы данных и ограничивать запросы определенным подмножеством (см. рисунок 6), что приводит к повышению производительности. При разработке семейства столбцов, анализируют, какие типы запросов будут использоваться чаще всего, и соответствующим образом группируют столбцы.В семейство столбцов можно динамически добавить новые столбцы, а строки могут быть разреженными (то есть строки не обязаны иметь значение для каждого столбца). Данные одной сущности имеют одинаковые ключи строк во всех семействах столбцов (см. рисунок 6). Такая структура, в которой строки любого объекта в семействе столбцов могут динамически изменяться, определяет важное преимущество этой категории хранилищ. Семейства столбцов очень хорошо подходят для хранения данных с различными схемами[Источник 4].

Рисунок 6 – Таблица с сгруппированными столбцами

Установка MapR-DB

Для установки MapR-DB необходимо сделать следующие:

  1. Выбрать узел в сети, на котором будет производится установка.
  2. Скачать скрипт-установки mapr-setup.sh.
    wget https://package.mapr.com/releases/installer/mapr-setup.sh -P /tmp
  3. Установить разрешения для исполняемого файла.
    chmod +x /tmp/mapr-setup.sh
  4. Запустить установку.
    sudo bash /tmp/mapr-setup.sh
  5. Продолжить установку в браузере.
    https://<Installer Node hostname/IPaddress>:9443

Installer Node hostname - имя машины, на которую устанавливается MapR-DB.

Источники

  1. ESG Technical Review // Analyzing the Performance of MapR-DB, a NoSQL Database in the MapR Converged Data Platform URL: https://www.esg-global.com/validation/esg-technical-review-analyzing-the-performance-of-mapr-db (дата обращения: 24.05.2020).
  2. Database Comparison // How does MapR Database get predictable low latency? URL: https://mapr.com/blog/database-comparison-an-in-depth-look-at-mapr-db/ (дата обращения: 24.05.2020).
  3. Database Comparison: MapR-DB, Cassandra, HBase, and More // Getting Instant Recovery With Zero Data Loss URL: https://dzone.com/articles/database-comparison-mapr-db-cassandra-hbase-and-mo (дата обращения: 24.05.2020).
  4. Нереляционные данные и базы данных NoSQL // Столбчатые хранилища данных URL: https://docs.microsoft.com/ru-ru/azure/architecture/data-guide/big-data/non-relational-data (дата обращения: 24.05.2020).

Примечания