Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНЯЕТСЯ К:
Кассандра
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.
Виндоус:
Установите Python 3.
Установите PIP.
- Перед установкой PIP скачайте файл get-pip.py .
- Запустите окно командной строки, если оно еще не открыто. Для этого откройте строку поиска Windows, введите cmd и выберите значок.
- Затем выполните следующую команду, чтобы скачать файл get-pip.py :
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.pyУстановите PIP в Windows:
python get-pip.pyПроверьте установку PIP. Найдите сообщение из шага 3, чтобы подтвердить, в какой папке была установлена папка PIP. Затем перейдите в эту папку и выполните команду pip help.
Установите CQLSH с помощью PIP:
pip3 install cqlsh==5.0.3Установите Python 2.
Замечание
Необходимо задать переменные среды, чтобы указать папку 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.
Дальнейшие действия
- Начните с создания API для учетной записи Cassandra, базы данных и таблицы с использованием Java-приложения.