MemSQL

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:41, 1 марта 2019.
MemSQL
fraimed
Разработчики: MemSQL, Inc.
Выпущена: 23 апреля 2013
Постоянный выпуск: 6.7 / Ноябрь 2018
Написана на: C++
Операционная система: Linux
Платформа: x64
Локализация: Английский
Тип ПО: RDBMS
Лицензия: Проприетарное
Веб-сайт http://www.memsql.com

MemSQL — распределенная, реляционная база данных реального времени для одновременных транзакций и аналитики.[1]. MemSQL совместима с MySQL. Приложения могут подключаться к MemSQL через стандарты ODBC / JDBC, а также через драйверы и пользователей MySQL.[2] MemSQL предлагает улучшения в области производительности записи и чтения, а также в значительной степени облегчает процесс разработки и поддержки приложений. Предлагая очень знакомый и понятный интерфейс, MemSQL наделяет разработчиков технологией, которую можно применять в крупных веб-компаниях, чтобы избежать проблем, сопутствующих росту трафика и проекта. В 2016 году MemSQL получила $36M инвестиций раунда С. [3]

Технология

MemSQL построена с использованием технологий, специально предназначенных для распределенной в памяти архитектуры. С точки зрения производительности, эти функции установлены MemSQL отдельно от других предложений в памяти.[4]

Кодогенерация и скомпилированные планы запросов

Ввиду отсутствия узких мест в виде операций ввода/вывода, скорость выполнения запросов напрямую зависит от динамической интерпретации SQL. MemSQL решает эту проблему путем интерпретации SQL запросов и компилирования плана выполнения запроса.

В каждом новом запросе MemSQL автоматически удаляет параметры и генерирует план выполнения, написанный на C++, который компилируется в машинный код. MemSQL сохраняет скомпилированные планы запросов в хранилище, называемое кэшем планов. Когда очередной запрос совпадает с существующим шаблоном параметризованного плана запроса, MemSQL минует генерацию кода и выполняет запрос немедленно, используя кэшированный план. Выполнение скомпилированных планов запроса гораздо быстрее интерпретации SQL ввиду низкоуровневой оптимизации и очевидному преимуществу в производительности при выполнении скомпилированного кода по сравнению с интерпретируемым.

Скомпилированные планы запросов обеспечивают высокую производительность во время смешанной рабочей нагрузки по чтению и записи. Некоторые компании используют слой кэширования поверх их СУБД, как правило, в виде словаря с операторами SQL в качестве ключей и результатами запроса в виде значений. Эта стратегия может повысить производительность запросов на неизменных наборах данных, но этот подход сталкивается с проблемами на часто обновляемых данных. При изменении набора данных, кэш должен быть обновлен с результатами обновленного запроса, скорость процесса при этом ограничивается основной базой данных. В дополнение к снижению производительности, синхронизация состояния между несколькими хранилищами данных является сложной инженерной задачей. Планирование запросов в MemSQL обеспечивает преимущество путем выполнения запроса к базе данных в оперативной памяти напрямую, не извлекая кэшированных результатов. Это помогает MemSQL поддерживать замечательную производительность запросов даже при часто меняющихся данных.

Безблокировочная структура и мультиверсионность

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

Функционал

Функционал MemSQL:

  • Мониторинг производительности и емкости. Быстрый просмотр и диагностика узких мест в производительности запросов и вычислительных ресурсов для обеспечения оптимальной производительности и доступности;
  • Развертывание через API. Ускорение и упрощение развертывания и настройки кластера с помощью команд на основе API;
  • Высокая доступность. MemSQL содержит избыточную копию данных для защиты от потери данных. Онлайн репликация обеспечивает согласованность данных;
  • Масштабируемая мульти-аренда. Возможность поставить тысячи мультитенантных экземпляров базы данных для облачных приложений, обеспечивая превосходную изоляцию данных и производительность при минимальных ресурсах;
  • Управление кластером. Автоматизация и упрощение общих задачи, включая запуск, остановку, восстановление, резервное копирование кластеров;
  • Резервное копирование и масштабирование. Управление репликацией данных, резервное копирование, в том числе в облачные хранилища, и быстрое восстановление без ущерба для производительности приложений или перехода в автономный режим;
  • Перекрестная репликация центров обработки данных. Возможность синхронизировать один кластер с другим через широкое сетевое соединение;
  • Совместимость инструментов. Легко подключается к существующим инструментам devops и шаблонам формирования облаков.

Производительность

Распределенная система с высокой масштабируемостью обеспечивает балансирование данных и запросов в кластере облачных экземпляров или стандартном оборудовании для обеспечения максимальной производительности, параллелизма и доступности.

Технологии, используемые для производительности системы:

  • Распределенное хранилище. Возможность хранить и обрабатывать данные на кластерах компьютеров для максимальной устойчивости и производительности, используя память и дисковую инфраструктуру;
  • Большая емкость данных. Возможность хранить петабайты данных на недорогом дисковом и облачном хранилище для требований к архивам, одновременно поддерживая мгновенный поиск для быстрого глубокого анализа;
  • Массивно и параллельно. Архитектура масштабирования без разделения ресурсов обеспечивает надежный механизм параллельного выполнения для запросов на чтение и запись, обеспечивая сверхбыструю производительность;
  • Полная стойкость к диску. Запись транзакций непосредственно на диск или запись в память с полным сохранением данных и архивирования;
  • Таблицы в памяти или на диске. Возможность использовать память для транзакционных рабочих нагрузок и очистки при использовании диска для исторических данных и анализа;
  • Сжатые таблицы на диске. Сжатие дисков хранилища столбцов оптимизирует ресурсы для хранения до петабайт данных.

Безопасность

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

Технологии информационной безопасности:

  • Управление доступом на основе ролей (RBAC). Возможность эффективно управлять простыми или надежными конфигурациями безопасности по ролям пользователей и группам, сохраняя при этом максимальную производительность;
  • Аудиторская проверка. Ведение журнала базы данных записывает все действия в безопасное внешнее местоположение для поддержки задач информационной безопасности, таких как отслеживание доступа пользователей;
  • Аутентификация. Возможность управлять доступом к существующей учетной записи с помощью PAM и поддержки аутентификации SAML.

Форматы строк и столбцов

MemSQL может хранить таблицы базы данных как хранилища строк или столбцов. Используемый формат определяется пользователем во время DDL (т. е. при создании таблицы). Данные для всех таблиц хранилища строк хранятся полностью в памяти, а моментальные снимки и журналы транзакций сохраняются на диске. Данные для всех таблиц columnstore хранятся на диске с использованием структуры, похожей на rowstore, для обработки входящих вставок в columnstore.

Таблицы Rowstore и columnstore отличаются не только используемым носителем данных. Rowstores, как следует из названия, хранят информацию в формате строк, который является традиционным форматом данных, используемым системами RDBMS. Rowstores оптимизированы для одиночных или небольших запросов на вставку, обновление или удаление и наиболее тесно связаны с OLTP (транзакционными) вариантами использования. Склады столбцов оптимизированы для сложных запросов выбора, обычно связанных со случаями использования OLAP (аналитика). Например, большой набор клинических данных для анализа данных лучше всего хранить в столбчатом формате, поскольку запросы, выполняемые к нему, обычно представляют собой специальные запросы, в которых агрегаты вычисляются для большого количества похожих элементов данных.

Надежность

Несмотря на хранение данных в памяти, MemSQL обеспечивает надёжность благодаря внедрению журнала операций, обновляемым до записи данных, и создания снимков файловой системы (по аналогии с контрольной точкой). По умолчанию, после подтверждения транзакции в памяти, транзакция будет записана на диск со скоростью, предоставляемой жёстким диском[5].

Репликация

MemSQL поддерживает собственный протокол репликации, который поставляет его транзакционный журнал в устройства. MemSQL в настоящее время поддерживает репликацию “главный — подчиненный”. [6]

Распределенная архитектура

MemSQL это распределенная база данных, которая работает по концепции агрегаторов и листовых узлов[7]. Агрегатор несет ответственность за разделение запроса по соответствующим конечным узлам и объединение результатов клиенту. Листовой узел представляет собой базу данных MemSQL. MemSQL использует хэш функцию для распространения данных равномерно по всем листовым узлам[8]. 23 апреля 2013 года был выпущен дистрибутив MemSQL[9], доступный для скачивания с официального сайта[10].

Интеграция с Apache Spark

Начиная с MemSQL 4.1, запущенной в сентябре 2015 года, MemSQL дает пользователям возможность установить Apache Spark как часть кластера MemSQL и использовать Spark в качестве инструмента ETL для импорта данных в MemSQL. Apache Spark устанавливается и настраивается в интерактивном режиме с использованием MemSQL Ops. Затем пользователи Ops могут определить фазы извлечения, преобразования и загрузки своего конвейера данных для импорта данных в MemSQL. Управление и мониторинг работающих конвейеров данных могут быть выполнены в пользовательском интерфейсе Ops.

История версий

  • MemSQL 1b - выпущена в свободный доступ в июне 2012 года
  • MemSQL 1c - незначительное обновление предыдущей версии, выпущена в июле 2012 года.
  • MemSQL 1.8 - репликация и расширенные возможности SQL, выпущена в декабре 2012
  • MemSQL 2.0 - свободный доступ распределенной системы.[11] Первый релиз операционной панели MemSQL Watch. [12]
  • MemSQL 2,5 - добавлен JSON
  • MemSQL 3.0 - столбчатое хранилище данных
  • MemSQL 3.1 - представления, репликация между датацентрами[13]
  • MemSQL 3.2 - улучшения в колоночном движке[14]
  • MemSQL 4.0 - геопространственная поддержка, распределенные join'ы[15]
  • MemSQL 4.1 - интеграция с системой СПАРК, CTE[16]
  • MemSQL 5.0 - новая архитектура кодогенерации в MemSQL, оконные функции, выпущенные в марте 2016[17]

Свойства системы

Описание Проводная распределенная СУБД MySQL, сочетающая в себе ориентированную на строки и ориентированную на диски систему хранения
Модель первичной базы данных Реляционная СУБД
Web-сайт memsql.com
Техническая документация docs.memsql.com
Разработчик MemSQL Inc.
Первый выпуск 2013
Лицензия Коммерческая
Язык реализации C++
Серверные операционные системы Linux
Предопределенные типы данных Есть
Поддержка XML Нет
SQL Есть, но без триггеров и внешних ключей
API и другие методы доступа ODBC и JDBC
Серверные скрипты Есть
Методы разделения Sharding
Методы репликации Ведущий — ведомый
MapReduce Нет
Концепции согласованности Немедленная согласованность, только внутри каждого узла
Концепции транзакций ACID


Начало работы

Системные требования

  • 64-bit Linux
  • Идеально подходит для машин с многоядерными процессорами и 8 Гб оперативной памяти
  • Минимальные версии OS: Amazon AMI (2012.03), CentOS (6.0), Debian (6.0), Fedora (15), OpenSUSE (11.1), Red Hat (6.1), Ubuntu (10.04)

Установка

После ввода имени и email адреса на странице загрузки, пользователь получает лицензию[18].

Для подключения к БД MemSQL должен быть установлен клиент. Например: MySQL client. Установить его можно так:

$ sudo apt-get install mysql-client

Для загрузки дистрибутива можно воспользоваться инструкцией:

$ wget download.memsql.com/3678fc4a65244b83a200911ef0e936f4/memsqlbin_amd64.tar.gz
$ tar -xzf memsqlbin_amd64.tar.gz
$ cd memsqlbin
$ chmod +x check_system
$ ./check_system
$ ./memsqld --port 3307

Размер архива ~120 Мб.

По-умолчанию MemSQL запускает на порту 3306 (как у MySQL). В примере указан 3307 чтобы избежать возможных конфликтов с возможно запущенным MySQL.

Работа с базой данных

Для работы с MemSQL можно использовать mysql:

$ mysql -u root -h 127.0.0.1 -P 3307 --prompt="memsql> "

Для завершения работы:

$ killall memsqld

Источники

  1. Официальный сайт MemSQL // memsql [2013-2019]. URL: https://www.memsql.com/ (дата обращения: 22.02.2019)
  2. MemSQL Википедия // wikipedia [2001-2019]. Дата обновления: 25.01.2015. URL: https://ru.wikipedia.org/wiki/MemSQL (дата обращения: 22.02.2019)
  3. MemSQL Wikipedia // wikipedia [2001-2019]. Дата обновления: 06.12.2018. URL: https://en.wikipedia.org/wiki/MemSQL (дата обращения: 22.02.2019)
  4. MemSQL System Properties // db-engines [2019]. URL: https://db-engines.com/en/system/MemSQL (дата обращения: 22.02.2019)

Примечания