Перейти к основному содержимому

Шпаргалка по запросам Cassandra

· 9 мин. чтения

1. Введение

Иногда нам нужно краткое справочное руководство, чтобы начать наш путь обучения. В частности, шпаргалка — это документ, содержащий всю важную информацию.

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

2. Кассандра с первого взгляда

Apache Cassandra — это NoSQL- распределенная система хранения данных с открытым исходным кодом . Это означает, что вместо того, чтобы жить только на одном сервере, он распространяется на несколько серверов. Он также известен своей высокой доступностью и устойчивостью к разделам.

Иными словами, дизайн базы данных Cassandra вдохновлен «AP» теоремы CAP .

Кроме того, Cassandra представляет собой архитектуру без мастеров, масштабируемую и, прежде всего, обеспечивающую простоту обнаружения и устранения сбоев .

3. Типы данных

Как правило, Cassandra поддерживает широкий набор типов данных . К ним относятся собственные типы, типы коллекций, пользовательские типы и кортежи, а также пользовательские типы.

3.1. Собственные типы

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

Начнем с того, что строка — очень популярный тип данных в мире программирования.

CQL предлагает четыре различных типа данных для строк:

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| ascii | `нить` | Строка символов ASCII |
| инет | `нить` | Строка адреса IPv4 или IPv6 |
| текст | `нить` | Строка в кодировке UTF8 |
| варчар | `нить` | Строка в кодировке UTF8 |

Логическое значение имеет одно из двух возможных значений: true или false :

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| логический | `логический` | `правда` или `ложь` |

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

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| капля | `капля` | Произвольные байты |

Длительность — это целое число с тремя знаками, представляющее месяцы, дни и наносекунды:

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| продолжительность | `продолжительность` | Значение продолжительности |

Cassandra предлагает широкий спектр типов данных для целочисленных данных:

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| крошечный | `целое число` | 8-битное целое со знаком |
| малыйинт | `целое число` | 16-битное целое со знаком |
| инт | `целое число` | 32-битное целое со знаком |
| большойинт | `целое число` | 64-битная длинная подпись |
| вариант | `целое число` | Целое число произвольной точности |
| прилавок | `целое число` | Столбец счетчика (64-битный со знаком) |

Для целых чисел и чисел с плавающей запятой у нас есть три типа данных:

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| десятичный | `целое число, число с плавающей запятой` | Десятичная переменная точности |
| двойной | `целое число, число с плавающей запятой` | 64-битный с плавающей запятой |
| плавать | `целое число, число с плавающей запятой` | 32-битный с плавающей запятой |

Для нужд, связанных с датой и временем, Cassandra предоставляет три типа данных:

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| свидание | `целое число, строка` | Значение даты (без времени) |
| время | `целое число, строка` | Значение времени (без даты) |
| отметка времени | `целое число, строка` | Отметка времени (с датой и временем) |

Как правило, мы должны избегать коллизий при использовании команд INSERT или UPDATE:

   | **Тип данных**    | **Поддерживаемые константы**    | **Описание**   | 
| UUID | `UUID` | UUID (любая версия) |
| timeuuid | `UUID` | UUID версии 1 |

3.2. Типы коллекций

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

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

Давайте быстро рассмотрим эти типы:

  • set – уникальные значения; хранится как неупорядоченный
  • список – может содержать повторяющиеся значения; порядок имеет значение
  • map — хранилища данных в виде пар ключ-значение

3.3. Пользовательские типы

Пользовательские типы дают нам возможность добавлять несколько полей данных в один столбец:

CREATE TYPE student.basic_info (
birthday timestamp,
race text,
weight text,
height text
);

3.4. Тип кортежа

Кортеж — это альтернатива определяемому пользователем типу. Он создан с использованием угловых скобок и разделителя-запятой для разделения типов содержащихся в нем элементов.

Вот команды для простого кортежа:

-- create a tuple
CREATE TABLE subjects (
k int PRIMARY KEY,
v tuple<int, text, float>
);

-- insert values
INSERT INTO subjects (k, v) VALUES(0, (3, 'cs', 2.1));

-- retrieve values
SELECT * FROM subjects;

4. CQL-команды Cassandra

Давайте рассмотрим несколько категорий команд CQL.

4.1. Клавишные команды

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

Давайте посмотрим на связанные команды:

   | **Команда**    | **Пример**    | **Описание**   | 
| СОЗДАТЬ пространство ключей | CREATE KEYSPACE keyspace_name `WITH`

replication = {'class':'SimpleStrategy', 'replication_factor' : 2}; | Чтобы создать пространство ключей. | | ОПИСАТЬ пространство ключей | ОПИСАТЬ КЛЮЧЕВЫЕ ПРОСТРАНСТВА; | В нем будут перечислены все ключевые пробелы. | | ИСПОЛЬЗОВАТЬ ключевое пространство | USE keyspace_name ; | Эта команда подключает сеанс клиента к пространству ключей. | | ALTER ключевое пространство | ALTER KEYSPACE keyspace_name WITH

REPLICATION = {'class': 'SimpleStrategy',

'replication_factor': 3} AND DURABLE_WRITES = false; | Чтобы изменить ключевое пространство. | | DROP ключевое пространство | DROP KEYSPACE keyspace_name ; | Чтобы удалить ключевое пространство. |

4.2. Табличные команды

В Cassandra таблица также называется семейством столбцов . Мы уже знаем о важности первичного ключа. Однако при создании таблицы необходимо определить первичный ключ.

Давайте рассмотрим эти команды:

   | **Команда**    | **Пример**    | **Описание**   | 
| СОЗДАТЬ таблицу | CREATE TABLE `имя_таблицы` ( `имя столбца` UUID PRIMARY KEY, `текст` имени `столбца` , текст имени столбца, `отметка` времени имени столбца ); | Для создания таблицы. |
| ИЗМЕНИТЬ таблицу | ALTER TABLE `имя_таблицы` ADD `имя_столбца` int; | Он добавит новый столбец в таблицу. |
| ИЗМЕНИТЬ таблицу | ALTER TABLE `имя_таблицы` ALTER `имя_столбца` TYPE `тип данных` ; | Мы можем изменить тип данных существующего столбца. |
| ИЗМЕНИТЬ таблицу | ALTER TABLE `table_name` WITH caching = {'keys' : 'NONE', 'rows_per_partition' : '1' }; | Эта команда помогает изменить свойства таблицы. |
| DROP таблица | УДАЛИТЬ ТАБЛИЦУ `имя_таблицы` ; | Опустить стол. |
| ОБРЕЗАТЬ таблицу | TRUNCATE `имя_таблицы` ; | Используя это, мы можем удалить все данные навсегда. |

4.3. Индексные команды

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

Посмотрим на команды:

   | **Команда**    | **Пример**    | **Описание**   | 
| СОЗДАТЬ индекс | CREATE INDEX `имя_индекса` на `имя_таблицы` ( `имя_столбца` ); | Для создания индекса. |
| УДАЛИТЬ индекс | УДАЛИТЬ ИНДЕКС, ЕСЛИ `СУЩЕСТВУЕТ index_name` ; | Чтобы удалить индекс. |

4.4. Основные команды

Эти команды используются для чтения и управления значениями таблицы:

   | **Команда**    | **Пример**    | **Описание**   | 
| ВСТАВЛЯТЬ | ВСТАВИТЬ В `имя_таблицы` ( `имя_столбца1` , `имя_столбца2` ) VALUES( `значение1` , `значение2` ); | Для вставки записи в таблицу. |
| ВЫБРАТЬ | SELECT * FROM `имя_таблицы` ; | Команда используется для получения данных из определенной таблицы. |
| КУДА | SELECT * FROM `имя_таблицы` ГДЕ `имя_столбца` = `значение` ; | Он отфильтровывает записи по предикату. |
| ОБНОВИТЬ | UPDATE `имя_таблицы` SET `имя_столбца2` = `значение2` ГДЕ `имя_столбца1` = `значение1` ; | Используется для редактирования записей. |
| УДАЛИТЬ | УДАЛИТЬ `идентификатор` FROM `имя_таблицы` ГДЕ `условие` ; | Этот оператор удаляет значение из таблицы. |

4.5. Другие команды

Cassandra имеет два разных типа ключей: ключ раздела и ключ кластеризации. Ключ раздела указывает узлы, на которых хранятся данные.

Для сравнения, ключ кластеризации определяет порядок данных в ключе раздела:

   | **Команда**    | **Пример**    | **Описание**   | 
| СОРТИРОВАТЬ ПО | SELECT * FROM `table_name` WHERE `column_name1` = `value` ORDER BY `cloumn_name2` ASC; | Для этого ключ раздела должен быть определен в предложении WHERE. Кроме того, предложение ORDER BY представляет столбец кластеризации, используемый для упорядочения. |
| ГРУППА ПО | ВЫБРАТЬ `имя_столбца` ИЗ имя_таблицы `ГРУППИРОВАТЬ` ПО `условие1` , `условие2` ; `` | Это предложение поддерживается только с ключом раздела или ключом раздела и ключом кластеризации. |
| ПРЕДЕЛ | SELECT * FROM имя_таблицы LIMIT 3; | Для большой таблицы ограничьте количество извлекаемых строк. |

5. Операторы

Cassandra поддерживает как арифметические, так и условные операторы. Под арифметическими операторами у нас есть +, -, *, /, % и - (унарный) для сложения, вычитания, умножения, деления, напоминания и отрицания соответственно.

Предложение WHERE имеет большое значение в Cassandra. Условные операторы используются в этом пункте с определенными сценариями и ограничениями . Это операторы CONTAINS, CONTAINS KEY, IN, =, >, >=, < и <=.

6. Общие функции

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

Давайте посмотрим на эти функции:

  • Функции преобразования BLOB-объектов
  • Функции UUID и Timeuuid
  • Функция токена
  • Функция ВРЕМЯ ЗАПИСИ
  • Функция ТТЛ
  • ЖЕЛЕЗНАЯ функция
  • МИН(), МАКС(), СУММ(), СРЕДН()

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

7. Заключение

В этой короткой статье мы рассмотрели строительные блоки языка запросов Cassandra. Во-первых, мы изучили поддерживаемые им типы данных и способы их определения. Затем мы рассмотрели общие команды для выполнения операций с базой данных. Наконец, мы обсудили операторы и функции языка.