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. Во-первых, мы изучили поддерживаемые им типы данных и способы их определения. Затем мы рассмотрели общие команды для выполнения операций с базой данных. Наконец, мы обсудили операторы и функции языка.