Поделиться через


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

Область применения: Кассандра

Azure Cosmos DB — это многомодельная служба базы данных от Microsoft, распространяемая по всему миру. Вы можете взаимодействовать с Azure Cosmos DB для Apache Cassandra с помощью драйверов клиентов Cassandra Query Language (CQL) Binary Protocol версии 4, совместимых с клиентскими драйверами 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

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

Типы данных CQL

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

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

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

Функции CQL

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

Команда Поддерживается
Token * Да
ttl *** Да
writetime *** Да
cast ** Да

Примечание.

* 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 — нет.
*** Пользовательские метки времени и срок жизни, заданный с помощью параметра USING, применяются на уровне строк (а не ячеек).

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

Команда Поддерживается
avg Да
count Да
min Да
max Да
sum Да

Примечание.

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

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

Команда Поддерживается
typeAsBlob(value) Да
blobAsType(value) Да

Функции UUID и timeuuid

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

Команды CQL

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

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

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

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

Примечание.

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

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

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

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

Примечание.

В Azure Cosmos DB согласованность действует иначе, дополнительные сведения об этом см. здесь.

Поддержка JSON

Команда Поддерживается
SELECT JSON Да
INSERT JSON Да
fromJson() No
toJson() No

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

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

Инструменты

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

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

Оболочка 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.

Windows:

  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
  1. Проверьте установку PIP (найдите сообщение из шага 3, чтобы проверить, в какую папку был установлен PIP, а затем перейдите в эту папку и выполните команду pip help).
  2. Установите CQLSH с помощью PIP
pip3 install cqlsh==5.0.3
  1. Установите Python 2
  2. Запустите 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 и центра обработки данных в команде "Создать пространство ключей" в настоящее время игнорируются. Для добавления регионов система использует базовый метод репликации глобального распространения Azure Cosmos DB. Если необходимо присутствие данных между регионами, вы можете включить их на уровне учетной записи с помощью PowerShell, интерфейса командной строки или портала. Дополнительные сведения см. в статье Добавление регионов. Невозможно отключить Durable_writes, потому что Azure Cosmos DB гарантирует длительность каждой записи. В каждом регионе Azure Cosmos DB реплицирует данные по набору реплик, который состоит из 4 реплик. Конфигурацию этого набора реплик невозможно изменить.

При создании таблицы игнорируются все параметры, кроме gc_grace_seconds, для которого должно быть задано значение ноль. Пространство ключей и таблица имеют дополнительную опцию с именем "cosmosdb_provisioned_throughput" с минимальным значением 400 единиц запроса/секунду. Пропускная способность пространства ключей позволяет разделять пропускную способность между несколькими таблицами, и это полезно для сценариев, когда не все таблицы используют предоставленную пропускную способность. Команда "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.

Следующие шаги