Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
SE APLICA A: Casandra
Azure Cosmos DB es un servicio de base de datos con varios modelos y de distribución global de Microsoft. Puede comunicarse con Azure Cosmos DB for Apache Cassandra mediante el protocolo de conexión Cassandra Query Language (CQL) Binary Protocol v4 compatible con los controladores de código abierto del cliente de Cassandra.
Con Azure Cosmos DB for Apache Cassandra, puede disfrutar de las ventajas de las API de Apache Cassandra y de las funcionalidades empresariales que ofrece Azure Cosmos DB. Las funcionalidades empresariales incluyen la distribución global, la creación de particiones de escalabilidad horizontal automática, la disponibilidad y las garantías de latencia, el cifrado en reposo y las copias de seguridad.
Protocolo Cassandra
Azure Cosmos DB para Apache Cassandra es compatible con cassandra Query Language (CQL) v3.11 API. Es compatible con versiones anteriores con la versión 2.x. Los comandos, herramientas, limitaciones y excepciones de CQL admitidos se enumeran más adelante en este artículo. Cualquier controlador de cliente que reconozca estos protocolos podrá conectarse a Azure Cosmos DB for Apache Cassandra.
Azure Managed Instance para Apache Cassandra
Para algunos clientes, adaptarse a la API para Cassandra puede ser un desafío debido a las diferencias en el comportamiento y la configuración, especialmente para las migraciones mediante lift-and-shift. Si una característica que es fundamental para la aplicación aparece como no se admite más adelante en este artículo, considere la posibilidad de usar Azure Managed Instance para Apache Cassandra. Este servicio es un servicio de Azure de primera entidad para hospedar y mantener clústeres de Apache Cassandra de código abierto puros con compatibilidad del 100 %.
Controlador Cassandra
Azure Cosmos DB para Apache Cassandra admite las siguientes versiones de controladores de Cassandra:
- Java 3.5 y versiones posteriores
- C# 3.5 y versiones posteriores
- Nodejs 3.5 y versiones posteriores
- Python 3.15 y versiones posteriores
- C++ 2.9
- PHP 1.3
- Gocql
Tipos de datos CQL
Azure Cosmos DB for Apache Cassandra admite los siguientes tipos de datos CQL:
Tipo | Compatible |
---|---|
ascii |
Sí |
bigint |
Sí |
blob |
Sí |
boolean |
Sí |
counter |
Sí |
date |
Sí |
decimal |
Sí |
double |
Sí |
float |
Sí |
frozen |
Sí |
inet |
Sí |
int |
Sí |
list |
Sí |
set |
Sí |
smallint |
Sí |
text |
Sí |
time |
Sí |
timestamp |
Sí |
timeuuid |
Sí |
tinyint |
Sí |
tuple |
Sí |
uuid |
Sí |
varchar |
Sí |
varint |
Sí |
tuples |
Sí |
udts |
Sí |
map |
Sí |
Se admite static para la declaración de tipos de datos.
Funciones de CQL
Azure Cosmos DB for Apache Cassandra admite las siguientes funciones de CQL:
Get-Help | Compatible |
---|---|
Token * |
Sí |
ttl *** |
Sí |
writetime *** |
Sí |
cast ** |
Sí |
Nota
* La API para Cassandra admite el token como proyección o selector y solo permite token(pk) en el lado izquierdo de una cláusula WHERE. Por ejemplo, se admite WHERE token(pk) > 1024
, pero WHERE token(pk) > token(100)
no se admite.
** La función cast()
no se puede anidar en la API para Cassandra. Por ejemplo, se admite SELECT cast(count as double) FROM myTable
, pero SELECT avg(cast(count as double)) FROM myTable
no se admite.
***Las marcas de tiempo personalizadas y el TTL especificados con la opción USING
se aplican en un nivel de fila (y no por celda).
Funciones de agregado:
Get-Help | Compatible |
---|---|
avg |
Sí |
count |
Sí |
min |
Sí |
max |
Sí |
sum |
Sí |
Nota
Las funciones de agregación funcionan en columnas normales, pero no se admiten agregados en columnas de agrupación en clústeres.
Funciones de conversión de blobs:
Get-Help | Compatible |
---|---|
typeAsBlob(value) |
Sí |
blobAsType(value) |
Sí |
Funciones UUID y timeuuid:
Get-Help | Compatible |
---|---|
dateOf() |
Sí |
now() |
Sí |
minTimeuuid() |
Sí |
unixTimestampOf() |
Sí |
toDate(timeuuid) |
Sí |
toTimestamp(timeuuid) |
Sí |
toUnixTimestamp(timeuuid) |
Sí |
toDate(timestamp) |
Sí |
toUnixTimestamp(timestamp) |
Sí |
toTimestamp(date) |
Sí |
toUnixTimestamp(date) |
Sí |
Comandos de CQL
Azure Cosmos DB admite los siguientes comandos de base de datos en las cuentas de la API para Cassandra.
Get-Help | Compatible |
---|---|
ALLOW FILTERING |
Sí |
ALTER KEYSPACE |
N/A (servicio PaaS, replicación administrada internamente) |
ALTER MATERIALIZED VIEW |
Sí |
ALTER ROLE |
No |
ALTER TABLE |
Sí |
ALTER TYPE |
No |
ALTER USER |
No |
BATCH |
Sí (solo proceso por lotes no registrado) |
COMPACT STORAGE |
N/A (servicio PaaS) |
CREATE AGGREGATE |
No |
CREATE CUSTOM INDEX (SASI) |
No |
CREATE INDEX |
Sí (incluidos los índices con nombre pero no se admite la colección FROZEN completa) |
CREATE FUNCTION |
No |
CREATE KEYSPACE (configuración de replicación ignorada) |
Sí |
CREATE MATERIALIZED VIEW |
Sí |
CREATE TABLE |
Sí |
CREATE TRIGGER |
No |
CREATE TYPE |
Sí |
CREATE ROLE |
No |
CREATE USER (en desuso en Apache Cassandra nativo) |
No |
DELETE |
Sí |
DISTINCT |
No |
DROP AGGREGATE |
No |
DROP FUNCTION |
No |
DROP INDEX |
Sí |
DROP KEYSPACE |
Sí |
DROP MATERIALIZED VIEW |
Sí |
DROP ROLE |
No |
DROP TABLE |
Sí |
DROP TRIGGER |
No |
DROP TYPE |
Sí |
DROP USER (en desuso en Apache Cassandra nativo) |
No |
GRANT |
No |
INSERT |
Sí |
LIST PERMISSIONS |
No |
LIST ROLES |
No |
LIST USERS (en desuso en Apache Cassandra nativo) |
No |
REVOKE |
No |
SELECT |
Sí |
UPDATE |
Sí |
TRUNCATE |
Sí |
USE |
Sí |
Transacciones ligeras (LWT)
Componente | Compatible |
---|---|
DELETE IF EXISTS |
Sí |
DELETE conditions |
Sí |
INSERT IF NOT EXISTS |
Sí |
UPDATE IF EXISTS |
Sí |
UPDATE IF NOT EXISTS |
Sí |
UPDATE conditions |
Sí |
Nota
Actualmente, no se admiten transacciones livianas para las cuentas que tienen habilitadas varias escrituras regionales.
Comandos de shell de CQL
Azure Cosmos DB admite los siguientes comandos de base de datos en las cuentas de la API para Cassandra.
Get-Help | Compatible |
---|---|
CAPTURE |
Sí |
CLEAR |
Sí |
CONSISTENCY * |
N/D |
COPY |
No |
DESCRIBE |
Sí |
cqlshExpand |
No |
EXIT |
Sí |
LOGIN |
N/A (no se admite la función USER CQL; por lo tanto LOGIN , es redundante) |
PAGING |
Sí |
SERIAL CONSISTENCY * |
N/D |
SHOW |
Sí |
SOURCE |
Sí |
TRACING |
N/D (la API para Cassandra está respaldada por Azure Cosmos DB; use el registro de diagnóstico para solucionar problemas) |
Nota
La coherencia funciona de forma diferente en Azure Cosmos DB. Para más información, consulte Apache Cassandra y Azure Cosmos DB para los niveles de coherencia de Apache Cassandra.
Compatibilidad con JSON
Get-Help | Compatible |
---|---|
SELECT JSON |
Sí |
INSERT JSON |
Sí |
fromJson() |
No |
toJson() |
No |
Límites de la API para Cassandra
Azure Cosmos DB para Apache Cassandra no tiene ningún límite en el tamaño de los datos almacenados en una tabla. Se pueden almacenar cientos de terabytes o petabytes de datos, con la seguridad de que se cumplirán los límites de la clave de partición. Del mismo modo, cada entidad o fila equivalente no tiene ningún límite en el número de columnas. El tamaño total de la entidad no debe superar los 2 MB. Los datos por clave de partición no pueden superar los 20 GB como en todas las demás API.
Herramientas
Azure Cosmos DB for Apache Cassandra es una plataforma de servicio administrada. La plataforma no requiere ninguna sobrecarga de administración ni utilidades como recolector de elementos no utilizados, máquina virtual Java (JVM) y herramienta de nodo para administrar el clúster. Se admiten herramientas como cqlsh
que utilizan la compatibilidad con Binary CQLv4.
- El explorador de datos, las métricas, los diagnósticos de registros, PowerShell y la CLI de Azure Portal son otros mecanismos admitidos para administrar la cuenta.
Shell de CQL
Puede conectarse a la API para Cassandra en Azure Cosmos DB mediante el CQLSH instalado en un equipo local. Viene con Apache Cassandra 3.11, y funciona de serie estableciendo las variables de entorno. En las secciones siguientes se incluyen las instrucciones para instalar, configurar y conectarse a la API para Cassandra en Azure Cosmos DB, en Windows o Linux con CQLSH.
Advertencia
Las conexiones a Azure Cosmos DB para Apache Cassandra no funcionan con DataStax Enterprise (DSE) ni con las versiones de Cassandra 4.0 de CQLSH. Asegúrese de usar solo las versiones v3.11 de Apache Cassandra de código abierto de CQLSH al conectarse a la API para Cassandra.
Windows:
Instale Python 3.
Instale PIP.
- Antes de instalar PIP, descargue el archivo get-pip.py .
- Inicie una ventana del símbolo del sistema, si aún no está abierta. Para ello, abra la barra de búsqueda de Windows, escriba cmd y seleccione el icono.
- A continuación, ejecute el siguiente comando para descargar el archivo get-pip.py :
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
Instale PIP en Windows:
python get-pip.py
Compruebe la instalación de PIP. Busque un mensaje del paso 3 para confirmar en qué carpeta se instaló PIP. A continuación, accede a esa carpeta y ejecuta el comando pip help.
Instale CQLSH mediante PIP:
pip3 install cqlsh==5.0.3
Instale Python 2.
Nota
Debe establecer las variables de entorno para que apunten a la carpeta Python 2.
Instale en 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
Conexión con 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
Conexión con 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
Todas las operaciones CRUD que se ejecutan a través de un SDK compatible con CQL v4 devuelven información adicional sobre las unidades de error y solicitud consumidas. Para garantizar el uso más eficaz del rendimiento aprovisionado, los comandos DELETE y UPDATE deben controlarse con la gobernanza de recursos que se tenga en cuenta.
Nota
El gc_grace_seconds
valor debe ser cero, si se especifica.
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}");
}
Asignación de coherencia
Azure Cosmos DB for Apache Cassandra ofrece opciones de coherencia para las operaciones de lectura. Para obtener más información, consulte Mapeo de niveles de coherencia.
Administración de permisos y roles
Azure Cosmos DB admite el control de acceso basado en rol de Azure para el aprovisionamiento, la rotación de claves, la vista de las métricas y las claves o contraseñas de lectura y escritura y de solo lectura que se pueden obtener a través de Azure Portal. Azure Cosmos DB no admite roles para las actividades CRUD.
Opciones de espacio de claves y de tabla
Actualmente se omiten las opciones de nombre de región, clase, replication_factor y centro de datos en el CREATE KEYSPACE
comando. El sistema utiliza el método de replicación de distribución global subyacente de Azure Cosmos DB para agregar las regiones. Si necesita la presencia entre regiones de los datos, puede habilitarla en el nivel de cuenta con PowerShell, la CLI o Azure Portal. Para obtener más información, consulte Adición de regiones a la cuenta de base de datos.
Durable_writes no se puede deshabilitar porque Azure Cosmos DB garantiza que todas las escrituras son duraderas. En todas las regiones, Azure Cosmos DB replica los datos en el conjunto de réplicas que se compone de cuatro réplicas, y la configuración de este conjunto no se puede modificar.
Todas las opciones se omiten al crear la tabla, excepto gc_grace_seconds
, que debe establecerse en cero.
El espacio de claves y la tabla tienen una opción adicional denominada cosmosdb_provisioned_throughput
con un valor mínimo de 400 RU/s. El rendimiento de Keyspace permite compartir el rendimiento entre varias tablas. Resulta útil para escenarios en los que todas las tablas no usan el rendimiento aprovisionado. El ALTER TABLE
comando permite cambiar el rendimiento aprovisionado entre las regiones.
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 ;
Índice secundario
La API para Cassandra admite índices secundarios en todos los tipos de datos excepto en los tipos de colección inmovilizados, los tipos decimal y variant.
Uso de la directiva de reintentos de conexión de Cassandra
Azure Cosmos DB es un sistema gobernado por recursos. Puede realizar algunas operaciones en un segundo determinado, dependiendo de las unidades de solicitud consumidas por dichas operaciones. Si una aplicación supera ese límite en un segundo determinado, se producen solicitudes limitadas por velocidad y se producen excepciones. La API de Cassandra de Azure Cosmos DB traslada estas excepciones como errores sobrecargados en el protocolo nativo de Cassandra.
Para asegurarse de que la aplicación puede interceptar y reintentar solicitudes si hay una limitación de velocidad, se proporcionan spark y las extensiones de Java . Vea también ejemplos de código de Java para la versión 3 y la versión 4 de los controladores Datastax al conectarse a la API para Cassandra en Azure Cosmos DB. Si usa otros SDK para acceder a la API para Cassandra en Azure Cosmos DB, cree una directiva de reintentos para volver a intentarlo después de estas excepciones. Como alternativa, habilite los reintentos del lado servidor para la API para Cassandra.
Pasos siguientes
- Introducción a la creación de una API para la cuenta, la base de datos y una tabla de Cassandra mediante una aplicación Java