Compartir a través de


Características de Apache Cassandra admitidas por Azure Cosmos DB for Apache Cassandra

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:

Tipos de datos CQL

Azure Cosmos DB for Apache Cassandra admite los siguientes tipos de datos CQL:

Tipo Compatible
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

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 *
ttl ***
writetime ***
cast **

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 myTableno 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
count
min
max
sum

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)
blobAsType(value)

Funciones UUID y timeuuid:

Get-Help Compatible
dateOf()
now()
minTimeuuid()
unixTimestampOf()
toDate(timeuuid)
toTimestamp(timeuuid)
toUnixTimestamp(timeuuid)
toDate(timestamp)
toUnixTimestamp(timestamp)
toTimestamp(date)
toUnixTimestamp(date)

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
ALTER KEYSPACE N/A (servicio PaaS, replicación administrada internamente)
ALTER MATERIALIZED VIEW
ALTER ROLE No
ALTER TABLE
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)
CREATE MATERIALIZED VIEW
CREATE TABLE
CREATE TRIGGER No
CREATE TYPE
CREATE ROLE No
CREATE USER (en desuso en Apache Cassandra nativo) 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 (en desuso en Apache Cassandra nativo) No
GRANT No
INSERT
LIST PERMISSIONS No
LIST ROLES No
LIST USERS (en desuso en Apache Cassandra nativo) No
REVOKE No
SELECT
UPDATE
TRUNCATE
USE

Transacciones ligeras (LWT)

Componente Compatible
DELETE IF EXISTS
DELETE conditions
INSERT IF NOT EXISTS
UPDATE IF EXISTS
UPDATE IF NOT EXISTS
UPDATE conditions

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
CLEAR
CONSISTENCY * N/D
COPY No
DESCRIBE
cqlshExpand No
EXIT
LOGIN N/A (no se admite la función USER CQL; por lo tanto LOGIN , es redundante)
PAGING
SERIAL CONSISTENCY * N/D
SHOW
SOURCE
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
INSERT JSON
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:

  1. Instale Python 3.

  2. Instale PIP.

    1. Antes de instalar PIP, descargue el archivo get-pip.py .
    2. 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.
    3. 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 
    
  3. Instale PIP en Windows:

    python get-pip.py
    
  4. 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.

  5. Instale CQLSH mediante PIP:

    pip3 install cqlsh==5.0.3
    
  6. Instale Python 2.

  7. Ejecute CQLSH mediante el mecanismo de autenticación.

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