Spec-Zone.ru › MariaDB

Обзор хранилища Cassandra

CassandraSE больше не активно развивается и был удалён в MariaDB 10.6. См. MDEV-23024.

Установка

MariaDB начиная с 10.0.1

Двигатель хранения Cassandra входит в состав MariaDB 10.0, начиная с MariaDB 10.0.1.

Двигатель хранения Cassandra включён, но не установлен/активирован по умолчанию.

При использовании репозиториев YUM на Fedora, Red Hat или CentOS, сначала установите пакет двигателя хранения Cassandra с помощью:

yum install MariaDB-cassandra-engine

При использовании репозиториев Debian или Ubuntu плагин Cassandra находится в основном пакете сервера MariaDB.

Для установки/активации движка хранения в MariaDB выполните следующую команду:

install soname 'ha_cassandra.so'; 

Двигатель хранения также можно активировать, используя команду --plugin-load при запуске сервера.

MariaDB 5.5.27

Также был релиз-превью на базе MariaDB 5.5 с исходным tar-архивом и x86_64 бинарниками для Ubuntu 12.04 Precise Pangolin. Он доступен здесь:

  • Бинарный Tar-архив,
  • Исходный Tar-архив.

Двигатель хранения Cassandra не входит в стандартные релизы MariaDB 5.5.

Введение

Двигатель хранения Cassandra позволяет получить доступ к данным в кластере Cassandra из MariaDB. Общая архитектура показана на рисунке ниже и аналогична архитектуре движка хранения кластера NDB.

cassandra-se-overview

Вы можете получить доступ к одному и тому же кластеру Cassandra из нескольких экземпляров MariaDB, при условии, что каждый из них использует двигатель хранения Cassandra:

mariadb-and-cassandra

Основной целью Cassandra SE (двигателя хранения) является интеграция данных между SQL и NoSQL мирами. Вам когда-нибудь нужно было:

  • получить некоторые данные Cassandra из вашего веб-фронта или SQL запроса?
  • вставить несколько записей в Cassandra из какой-то части вашего приложения?

Теперь это легко возможно. Cassandra SE предоставляет семейства столбцов Cassandra как таблицы в MariaDB, в которые можно вставлять, обновлять и выбирать данные. Вы можете писать соединения против этой таблицы, возможно соединять данные, хранящиеся в MariaDB, с данными, хранящимися в Cassandra.

Версии в MariaDB

Версия Cassandra SE Введено Стадия зрелости
Cassandra SE 1.8 MariaDB 10.0.1 Экспериментальная

Что насчёт CQL?

Язык запросов Cassandra (CQL) — лучший способ работы с Cassandra. На первый взгляд он напоминает SQL, однако сходство очень поверхностное. Запросы CQL тесно связаны с тем, как Cassandra внутренне обращается к своим данным. Например, у вас не может быть даже самого простого соединения. Фактически, добавление даже самого маленького ... AND non_indexed_column=1 в WHERE предложение уже является невалидным CQL.

Наша цель — позволить работать в SQL вместо того, чтобы постоянно переключаться между CQL и SQL.

Превращает ли это Cassandra в SQL базу данных?

Нет. Cassandra SE не подходит для выполнения аналитических запросов, которые просматривают огромные объёмы данных в кластере Cassandra. Для этой задачи лучше подойдут инструменты на базе Hadoop, такие как Apache Pig или Apache Hive. Cassandra SE скорее является «окном» из SQL среды в NoSQL.

Отображение данных

Давайте уточним. Чтобы получить доступ к данным Cassandra из MariaDB, необходимо создать таблицу с engine=cassandra. Таблица будет представлять вид семейства столбцов в Cassandra, и её определение будет выглядеть так:

set cassandra_default_thrift_host='192.168.0.10' -- Cassandra's address. It can also
                                                 -- be specified as startup parameter
                                                 -- or on per-table basis

create table cassandra_tbl      -- table name can be chosen at will
(
  rowkey  type PRIMARY KEY,     -- represents Column Family's rowkey. Primary key
                                -- must be defined over this column.

  column1 type,                 -- Cassandra's static columns can be mapped to 
  column2 type,                 -- regular SQL columns.

  dynamic_cols blob DYNAMIC_COLUMN_STORAGE=yes -- If you need to access Cassandra's
                                               -- dynamic columns, you can define
                                               -- a blob which will receive all of 
                                               -- them, packed as MariaDB's dynamic
                                               -- columns.
) engine=cassandra
  keyspace= 'cassandra_key_space'        -- Cassandra's keyspace.columnFamily we  
  column_family='column_family_name';    -- are accessing.

Имя таблицы может быть произвольным. Однако первичный ключ, имена столбцов и типы должны «соответствовать» тем, что в Cassandra.

Ключ строки Cassandra

Таблица должна определять столбец, соответствующий ключу строки семейства столбцов.

  • Если у Cassandra rowkey есть псевдоним (или имя), то столбец MariaDB должен иметь то же имя.
    • В противном случае он должен называться «rowkey».
  • Тип столбца MariaDB должен соответствовать validation_class ключа строки Cassandra (соответствие типов данных рассматривается более подробно ниже).

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

Статические столбцы Cassandra

Cassandra позволяет определять «статическое семейство столбцов», где метаданные столбцов определяются в заголовке семейства столбцов и выполняются всеми записями.

Эти «статические» столбцы могут быть отображены в обычные столбцы в MariaDB. Статический столбец с именем 'foo' в Cassandra должен иметь соответствующий столбец с именем 'foo' в MariaDB. Типы также должны совпадать, они рассматриваются ниже.

Динамические столбцы Cassandra

Cassandra также позволяет отдельным строкам иметь свои наборы столбцов. Другими словами, каждая строка может иметь свои уникальные столбцы.

К этим столбцам можно получить доступ через функцию «Динамические столбцы» MariaDB. Для этого необходимо определить столбец:

  • с произвольным именем
  • типа blob
  • с атрибутом DYNAMIC_COLUMN_STORAGE=yes

Вот пример:

dynamic_cols blob DYNAMIC_COLUMN_STORAGE=yes

После определения, к отдельным столбцам можно получить доступ с помощью новой версии функций «Динамических столбцов», которые теперь поддерживают строковые имена (раньше поддерживались только целые числа).

Суперстолбцы

Суперстолбцы Cassandra не поддерживаются, и в настоящее время нет планов по их поддержке.

Типы данных

Нет прямого взаимно однозначного соответствия между типами данных Cassandra и MySQL/MariaDB. Кроме того, ограничения размера Cassandra часто более гибкие, чем в MySQL/MariaDB. Например, ограничение длины ключа строки Cassandra составляет около 2 ГБ, в то время как MySQL ограничивает длину уникального ключа примерно до 1,5 КБ.

Типы должны отображаться следующим образом:

Cassandra MariaDB
blob BLOB, VARBINARY(n)
ascii BLOB, VARCHAR(n), используйте charset=latin1
text BLOB, VARCHAR(n), используйте charset=utf8
varint VARBINARY(n)
int INT
bigint BIGINT, TINY, SHORT (выберите тот, который подойдёт для реальных данных)
uuid CHAR(36), UUID будет представлен в текстовой форме со стороны MariaDB
timestamp TIMESTAMP (точность до секунд), TIMESTAMP(6) (точность до микросекунд), BIGINT (получает непосредственно 64-битные миллисекунды-с-эпохи от Cassandra)
boolean BOOL
float FLOAT
double DOUBLE
decimal VARBINARY(n)
counter BIGINT, поддерживается только чтение

Для типов, таких как «VARBINARY(n)», n нужно выбрать достаточно большой размер, чтобы вместить все данные, которые встречаются в таблице.

Сопоставление команд

Вставка

Cassandra не предоставляет практического способа сделать INSERT отличным от UPDATE. Поэтому INSERT работает как INSERT-или-UPDATE, он перепишет данные, если необходимо.

INSERT ... SELECT и многострочные INSERT будут пытаться записывать данные порциями. Размер порции контролируется переменной cassandra_insert_batch_size, которая задаёт максимальный размер порции в столбцах.

Переменные статуса Cassandra_row_inserts и Cassandra_row_insert_batches позволяют увидеть, действительно ли вставки выполняются порциями.

Обновление

UPDATE работает так, как вы ожидаете, что должна работать команда UPDATE SQL (т.е. изменение значения первичного ключа приведёт к удалению старой записи и вставке новой записи)

Удаление

  • DELETE FROM cassandra_table сопоставляется с вызовом truncate(column_family).
  • Удаление с предложением WHERE будет выполнять удаление по каждой строке.

Выбор

В целом, все операторы SELECT работают так, как вы ожидаете от SQL. Условия в формате primary_key=... позволяют серверу создавать планы запросов, которые обращаются к строкам Cassandra с помощью поиска по ключу.

Полный просмотр таблицы

Полный просмотр таблицы выполняется с высокой эффективностью памяти. Cassandra SE выполняет полный просмотр таблицы как серию порций, каждая из которых считывает не более cassandra_rnd_batch_size записей.

Поддержка доступа по ключу в виде порций

Cassandra поддерживает доступ по ключу в виде порций в режиме без объединения. Это означает, что ему требуется, чтобы SQL уровень выполнял хеширование, что означает, что требуются следующие настройки:

  • optimizer_switch='join_cache_hashed=on'
  • join_cache_level=7|8

Cassandra SE в настоящее время не может использовать пространство в буфере объединения (размер которого контролируется #join_buffer_size). Вместо этого он будет ограничивать чтение порциями, читая не более cassandra_multiget_batch_size за раз, и память будет выделена в куче.

Обратите внимание, что буфер #join_buffer_size всё ещё необходим SQL слою, поэтому его значение всё равно следует увеличивать, если вы хотите читать большими порциями.

Можно отслеживать количество прочитанных партий, сколько ключей было найдено и сколько результатов было получено с помощью следующих переменных состояния:

Имя переменной Значение
Cassandra_multiget_reads 0
Cassandra_multiget_keys_scanned 0
Cassandra_multiget_rows_read 0

Системные и переменные состояния

Доступны следующие системные переменные:

Имя переменной Описание
cassandra_default_thrift_host Хост для подключения, если не указан на уровне таблицы
cassandra_failure_retries Количество попыток повторного подключения при таймаутах/недоступности
cassandra_insert_batch_size Размер пакета INSERT
cassandra_multiget_batch_size Размер пакета для доступа к ключам
cassandra_rnd_batch_size Размер пакета для сканирования всей таблицы
cassandra_read_consistency Консистентность при чтении
cassandra_write_consistency Консистентность при записи

Доступны следующие переменные состояния:

Имя переменной Описание
Cassandra_row_inserts Количество вставленных строк
Cassandra_row_insert_batches Количество выполненных партий вставки
Cassandra_multiget_reads Количество операций чтения
Cassandra_multiget_keys_scanned Количество ключей, по которым проведены запросы
Cassandra_multiget_rows_read Количество фактически прочитанных строк
Cassandra_timeout_exceptions Количество исключений Timeout, полученных от Cassandra
Cassandra_unavailable_exceptions Количество исключений Unavailable, полученных от Cassandra

Примечание о Cassandra 1.2

В Cassandra 1.2 немного изменилась модель данных, как описано в http://www.datastax.com/dev/blog/thrift-to-cql3. Это привело к тому, что некоторые клиенты на основе Thrift больше не работают (например, у Pig возникла проблема: CASSANDRA-5234).

В настоящее время Cassandra SE может получать доступ только к семействам столбцов Cassandra 1.2, которые были определены WITH COMPACT STORAGE атрибутом.

См. также

  • Слайды с выступления на Percona Live 2013: MariaDB Cassandra Interoperability
  • MDEV-431 - задача JIRA для работы Cassandra SE
  • Инструкции по созданию бинарного файла tarball в MariaDB 5.5
  • Cassandra Storage Engine — Планы на будущее
  • Cassandra Storage Engine — Пример использования
  • Cassandra Storage Engine — Проблемы
  • HBase Storage Engine
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/cassandra-storage-engine-overview/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API