Функции Apache Cassandra, поддерживаемые Azure Cosmos DB для Apache Cassandra

ПРИМЕНЯЕТСЯ К: Кассандра

Important

Вы ищете решение для баз данных для крупномасштабных сценариев с соглашением об уровне обслуживания (SLA) с доступностью 99,999%, мгновенным автомасштабированием и автоматическим переключением на резервные ресурсы в нескольких регионах? Рассмотрим Azure Cosmos DB для NoSQL.

Вы хотите перенести существующее приложение Apache Cassandra? Рассмотрим управляемый экземпляр Azure для Apache Cassandra.

Azure Cosmos DB представляет собой распределенную по всему миру многомодельную службу баз данных компании Microsoft. Вы можете взаимодействовать с Azure Cosmos DB для Apache Cassandra с помощью двоичного протокола CQL версии 4, используя совместимые с wire protocol драйверы клиента Cassandra с открытым исходным кодом.

Используя Azure Cosmos DB для Apache Cassandra, вы можете воспользоваться преимуществами API Apache Cassandra и корпоративными возможностями, предоставляемыми Azure Cosmos DB. Корпоративные возможности включают глобальное распределение, масштабирование с автоматическим секционированием, гарантии доступности и низкой задержки, шифрование данных в состоянии покоя и резервное копирование.

Протокол Cassandra

Azure Cosmos DB для Apache Cassandra совместим с API языка запросов Cassandra версии 3.11. Он обратно совместим с версией 2.x. Поддерживаемые команды CQL, средства, ограничения и исключения перечислены далее в этой статье. Любой драйвер клиента, который понимает эти протоколы, должен иметь возможность подключаться к Azure Cosmos DB для Apache Cassandra.

Управляемый экземпляр Azure для Apache Cassandra

Для некоторых клиентов адаптация к API для Cassandra может быть проблемой из-за различий в поведении и конфигурации, особенно для миграции лифтов и смен. Если компонент, критически важный для приложения, указан как не поддерживаемый далее в этой статье, рассмотрите возможность использования Azure Управляемый экземпляр для Apache Cassandra. Эта служба от компании Azure предназначена для размещения и обслуживания полностью открытых кластеров Apache Cassandra с 100% совместимостью.

Драйвер для базы данных Cassandra

Azure Cosmos DB для Apache Cassandra поддерживает следующие версии драйверов Cassandra:

Типы данных CQL

Azure Cosmos DB для Apache Cassandra поддерживает следующие типы данных CQL:

Тип Поддерживается
ascii Yes
bigint Yes
blob Yes
boolean Yes
counter Yes
date Yes
decimal Yes
double Yes
float Yes
frozen Yes
inet Yes
int Yes
list Yes
set Yes
smallint Yes
text Yes
time Yes
timestamp Yes
timeuuid Yes
tinyint Yes
tuple Yes
uuid Yes
varchar Yes
varint Yes
tuples Yes
udts Yes
map Yes

Static поддерживается для объявления типа данных.

Функции CQL

Azure Cosmos DB для Apache Cassandra поддерживает следующие функции CQL:

Command Поддерживается
Token * Yes
ttl *** Yes
writetime *** Yes
cast ** Yes

Замечание

* API для Cassandra поддерживает токен в виде проекции или селектора и разрешает использовать только токен(pk) в левой части условия where. Например, WHERE token(pk) > 1024 поддерживается, но WHERE token(pk) > token(100) — нет. ** Функция cast() не вложена в API для Cassandra. Например, SELECT cast(count as double) FROM myTable поддерживается, но SELECT avg(cast(count as double)) FROM myTable — нет. Пользовательские метки времени и TTL, указанные параметром USING , применяются на уровне строки (а не для каждой ячейки).

Агрегатные функции:

Command Поддерживается
avg Yes
count Yes
min Yes
max Yes
sum Yes

Замечание

Агрегатная функция работает с обычными столбцами, но агрегирование для кластеризованных столбцов не поддерживается.

Функции преобразования больших двоичных объектов

Command Поддерживается
typeAsBlob(value) Yes
blobAsType(value) Yes

Функции UUID и timeuuid

Command Поддерживается
dateOf() Yes
now() Yes
minTimeuuid() Yes
unixTimestampOf() Yes
toDate(timeuuid) Yes
toTimestamp(timeuuid) Yes
toUnixTimestamp(timeuuid) Yes
toDate(timestamp) Yes
toUnixTimestamp(timestamp) Yes
toTimestamp(date) Yes
toUnixTimestamp(date) Yes

Команды CQL

Azure Cosmos DB поддерживает следующие команды базы данных в API для учетных записей Cassandra.

Command Поддерживается
ALLOW FILTERING Yes
ALTER KEYSPACE н/р (сервис PaaS, репликация управляется внутренне)
ALTER MATERIALIZED VIEW Yes
ALTER ROLE нет
ALTER TABLE Yes
ALTER TYPE нет
ALTER USER нет
BATCH Да (только в нелогированном пакете)
COMPACT STORAGE Н/д (служба PaaS)
CREATE AGGREGATE нет
CREATE CUSTOM INDEX (SASI) нет
CREATE INDEX Да (включая именованные индексы, но полная коллекция FROZEN не поддерживается)
CREATE FUNCTION нет
CREATE KEYSPACE (параметры репликации игнорируются) Yes
CREATE MATERIALIZED VIEW Yes
CREATE TABLE Yes
CREATE TRIGGER нет
CREATE TYPE Yes
CREATE ROLE нет
CREATE USER (не рекомендуется в собственном Apache Cassandra) нет
DELETE Yes
DISTINCT нет
DROP AGGREGATE нет
DROP FUNCTION нет
DROP INDEX Yes
DROP KEYSPACE Yes
DROP MATERIALIZED VIEW Yes
DROP ROLE нет
DROP TABLE Yes
DROP TRIGGER нет
DROP TYPE Yes
DROP USER (не рекомендуется в собственном Apache Cassandra) нет
GRANT нет
INSERT Yes
LIST PERMISSIONS нет
LIST ROLES нет
LIST USERS (не рекомендуется в собственном Apache Cassandra) нет
REVOKE нет
SELECT Yes
UPDATE Yes
TRUNCATE Yes
USE Yes

Упрощенные транзакции (LWT)

Компонент Поддерживается
DELETE IF EXISTS Yes
DELETE conditions Yes
INSERT IF NOT EXISTS Yes
UPDATE IF EXISTS Yes
UPDATE IF NOT EXISTS Yes
UPDATE conditions Yes

Замечание

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

Команды оболочки CQL

Azure Cosmos DB поддерживает следующие команды базы данных в API для учетных записей Cassandra.

Command Поддерживается
CAPTURE Yes
CLEAR Yes
CONSISTENCY * N/A
COPY нет
DESCRIBE Yes
cqlshExpand нет
EXIT Yes
LOGIN N/A (функция USER CQL не поддерживается, поэтому LOGIN является избыточной)
PAGING Yes
SERIAL CONSISTENCY * N/A
SHOW Yes
SOURCE Yes
TRACING N/A (API для Cassandra поддерживается Azure Cosmos DB — используйте diagnostic log для устранения неполадок)

Замечание

Согласованность работает по-разному в Azure Cosmos DB. Дополнительные сведения см. в разделе Apache Cassandra и Azure Cosmos DB о уровнях согласованности Apache Cassandra.

Поддержка JSON

Command Поддерживается
SELECT JSON Yes
INSERT JSON Yes
fromJson() нет
toJson() нет

Ограничения API для Cassandra

Azure Cosmos DB для Apache Cassandra не ограничивает размер данных, хранящихся в таблице. Возможно хранение сотен терабайт или петабайт данных с соблюдением ограничений для ключей секций. Аналогичным образом каждый эквивалент сущности или строки не имеет никаких ограничений на количество столбцов. Общий размер сущности не должен превышать 2 МБ. Данные на ключ раздела не могут превышать 20 ГБ, как и во всех остальных API.

Поведение строкового диапазонного запроса в текстовых столбцах

Операторы диапазона (>, >=, <<=), примененные к строковым (текстовым) столбцам, не выполняют поиск префикса или подстроки. Это поведение следует семантике языка запросов Cassandra (CQL) и соответствует поведению Apache Cassandra. Поведение Azure Cosmos DB для Apache Cassandra проводит диапазонные сравнения строк с использованием лексикографического (байт-байтового) упорядочивания. При сравнении строкового значения с частичной строкой сравнение выполняется по символам, а не как префикс или сопоставление шаблонов. Рассмотрим пример.

"ABCD" > "ABC" → возвращает значение true "ABZ" > "ABC" → возвращает значение true "AB" > "ABC" → возвращает значение false (более короткие строки лексикографически меньше)

Последствие

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

Tools

Azure Cosmos DB для Apache Cassandra — это управляемая платформа служб. Платформа не требует дополнительных затрат на управление или служебных программ, таких как сборщик мусора, виртуальная машина Java (JVM) и средство узла для управления кластером. Поддерживаются такие средства, как cqlsh, которые используют совместимость с Binary CQLv4.

  • Обозреватель данных портала Azure, метрики, диагностика журналов, PowerShell и CLI — это другие поддерживаемые механизмы управления учетной записью.

Оболочка CQL

Вы можете подключиться к API для Cassandra в Azure Cosmos DB с помощью CQLSH, установленного на локальном компьютере. Она входит в состав Apache Cassandra 3.11 и работает без дополнительной настройки, задавая переменные среды. В следующих разделах приведены инструкции по установке, настройке и подключению к API для Cassandra в Azure Cosmos DB в Windows или Linux с помощью CQLSH.

Предупреждение

Подключения к Azure Cosmos DB для Apache Cassandra не работают с версиями DataStax Enterprise (DSE) или Cassandra 4.0 CQLSH. Убедитесь, что вы используете только версии 3.11 открытого исходного кода Apache Cassandra CQLSH при подключении к API Cassandra.

Виндоус:

  1. Установите Python 3.

  2. Установите PIP.

    1. Перед установкой PIP скачайте файл get-pip.py .
    2. Запустите окно командной строки, если оно еще не открыто. Для этого откройте строку поиска Windows, введите cmd и выберите значок.
    3. Затем выполните следующую команду, чтобы скачать файл get-pip.py :
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. Установите PIP в Windows:

    python get-pip.py
    
  4. Проверьте установку PIP. Найдите сообщение из шага 3, чтобы подтвердить, в какой папке была установлена папка PIP. Затем перейдите в эту папку и выполните команду pip help.

  5. Установите CQLSH с помощью PIP:

    pip3 install cqlsh==5.0.3
    
  6. Установите Python 2.

  7. Запустите CQLSH, используя механизм проверки подлинности.

Замечание

Необходимо задать переменные среды, чтобы указать папку Python 2.

Установите в Unix/Linux/Mac:

# Install default-jre and default-jdk
sudo apt install default-jre
sudo apt-get update
sudo apt install default-jdk

# Import the Baltimore CyberTrust root certificate:
curl https://cacert.omniroot.com/bc2025.crt > bc2025.crt
keytool -importcert -alias bc2025ca -file bc2025.crt

# Install the Cassandra libraries in order to get CQLSH:
echo "deb https://downloads.apache.org/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra=3.11.13

Подключение с помощью Unix/Linux/Mac:

# Export the SSL variables:
export SSL_VERSION=TLSv1_2
export SSL_VALIDATE=false

# Connect to Azure Cosmos DB for Apache Cassandra:
cqlsh <YOUR_ACCOUNT_NAME>.cassandra.cosmosdb.azure.com 10350 -u <YOUR_ACCOUNT_NAME> -p <YOUR_ACCOUNT_PASSWORD> --ssl --protocol-version=4

Подключение к Docker:

docker run -it --rm -e SSL_VALIDATE=false -e SSL_VERSION=TLSv1_2 cassandra:3.11 cqlsh <account_name>.cassandra.cosmos.azure.com 10350 -u <YOUR_ACCOUNT_NAME> -p <YOUR_ACCOUNT_PASSWORD> --ssl

Все операции CRUD, выполняемые через совместимый пакет SDK для CQL версии 4, возвращают дополнительные сведения об ошибках и единицах запросов, используемых. Чтобы обеспечить наиболее эффективное использование подготовленной пропускной способности, команды DELETE и UPDATE должны обрабатываться с учетом управления ресурсами.

Замечание

Значение gc_grace_seconds должно быть равно нулю, если указано.

var tableInsertStatement = table.Insert(sampleEntity); 
var insertResult = await tableInsertStatement.ExecuteAsync(); 
 
foreach (string key in insertResult.Info.IncomingPayload) 
        { 
            byte[] valueInBytes = customPayload[key]; 
            double value = Encoding.UTF8.GetString(valueInBytes); 
            Console.WriteLine($"CustomPayload:  {key}: {value}"); 
        } 

Карты согласованости

Azure Cosmos DB для Apache Cassandra предоставляет выбор согласованности для операций чтения. Дополнительные сведения см. в разделе "Сопоставление уровней согласованности".

Управление разрешениями и ролями

Azure Cosmos DB поддерживает управление доступом на основе ролей Azure (Azure RBAC) для управления, смены ключей, просмотра метрик, а также для получения паролей и ключей с правами чтения и записи или только для чтения через портал Azure. Azure Cosmos DB не поддерживает роли для операций CRUD.

Параметры пространства ключей и таблицы

В настоящее время параметры имени региона, класса, replication_factor и центра обработки данных в команде CREATE KEYSPACE игнорируются. Система использует базовый метод репликации Azure Cosmos DB global distribution для добавления регионов. Если требуется наличие данных между регионами, его можно включить на уровне учетной записи с помощью PowerShell, CLI или портала Azure. Дополнительные сведения см. в разделе "Добавление регионов" в учетную запись базы данных.

Durable_writes нельзя отключить, так как Azure Cosmos DB гарантирует устойчивость каждой записи. В каждом регионе Azure Cosmos DB реплицирует данные по набору реплик, который состоит из 4 реплик. Конфигурацию этого набора реплик невозможно изменить.

Все параметры игнорируются при создании таблицы, за исключением gc_grace_secondsтого, что должно быть равно нулю. Пространство ключей и таблица имеют дополнительный параметр cosmosdb_provisioned_throughput с минимальным значением 400 RU/с. Пропускная способность пространства ключей позволяет распределять пропускную способность между несколькими таблицами. Это полезно для сценариев, когда все таблицы не используют подготовленную пропускную способность. Эта ALTER TABLE команда позволяет изменять подготовленную пропускную способность в разных регионах.

CREATE KEYSPACE sampleks WITH REPLICATION = {  'class' : 'SimpleStrategy'} AND cosmosdb_provisioned_throughput=2000;  

CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=2000; 

ALTER TABLE gks1.t1 WITH cosmosdb_provisioned_throughput=10000 ;

Вторичный индекс

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

Использование политики повторных подключений Cassandra

Azure Cosmos DB — это система, управляемая ресурсами. Некоторые операции можно выполнять в заданной секунде на основе единиц запросов, потребляемых операциями. Если приложение превышает это ограничение в определенной секунде, запросы ограничиваются скоростью и возникают исключения. API для Cassandra в Azure Cosmos DB преобразует эти исключения в перегруженные ошибки в собственном протоколе Cassandra.

Чтобы убедиться, что приложение может перехватывать и повторять запросы при наличии ограничения скорости, предоставляются расширения spark и Java. См. также примеры кода Java для драйверов Datastax версии 3 и версии 4 при подключении к API для Cassandra в Azure Cosmos DB. Если вы используете другие пакеты SDK для доступа к API Cassandra в Azure Cosmos DB, создайте политику повторных попыток, чтобы повторно выполнять операции при возникновении этих исключений. В качестве альтернативы, включите повторные попытки на стороне сервера для API Cassandra.

Дальнейшие действия