Apache Cassandra-funktioner som stöds av Azure Cosmos DB för Apache Cassandra

GÄLLER FÖR: Cassandra

Azure Cosmos DB är Microsofts globalt distribuerade flermodellsdatabastjänst. Du kan kommunicera med Azure Cosmos DB för Apache Cassandra via Cassandra Query Language (CQL) Binary Protocol v4 wire protocol compliant open-source Cassandra client drivers.You can communicate with the Azure Cosmos DB for Apache Cassandra through the Cassandra Query Language (CQL) Binary Protocol v4 wire protocol compliant open-source Cassandra client drivers.

Genom att använda Azure Cosmos DB för Apache Cassandra kan du dra nytta av fördelarna med Apache Cassandra-API:er och de företagsfunktioner som Azure Cosmos DB tillhandahåller. Företagsfunktionerna är global distribution, automatisk partitionering av utskalning, garantier för tillgänglighet och svarstid, vilande kryptering, säkerhetskopior och mycket mer.

Cassandra-protokollet

Azure Cosmos DB för Apache Cassandra är kompatibel med Cassandra Query Language (CQL) v3.11 API (bakåtkompatibel med version 2.x). De CQL-kommandon, verktyg, begränsningar och undantag som stöds anges nedan. Alla klientdrivrutiner som förstår dessa protokoll bör kunna ansluta till Azure Cosmos DB för Apache Cassandra.

Azure Managed Instance för Apache Cassandra

För vissa kunder kan anpassning till API för Cassandra vara en utmaning på grund av skillnader i beteende och/eller konfiguration, särskilt för lift-and-shift-migreringar. Om en funktion som är kritisk för ditt program visas som inte stöds nedan kan du överväga att använda Azure Managed Instance för Apache Cassandra. Det här är en Azure-tjänst från första part för att vara värd för och underhålla rena Apache Cassandra-kluster med öppen källkod med 100 % kompatibilitet.

Cassandra-drivrutinen

Följande versioner av Cassandra-drivrutiner stöds av Azure Cosmos DB för Apache Cassandra:

CQL-datatyper

Azure Cosmos DB för Apache Cassandra stöder följande CQL-datatyper:

Typ Stöds
ascii Ja
bigint Ja
blob Ja
boolean Ja
counter Ja
date Ja
decimal Ja
double Ja
float Ja
frozen Ja
inet Ja
int Ja
list Ja
set Ja
smallint Ja
text Ja
time Ja
timestamp Ja
timeuuid Ja
tinyint Ja
tuple Ja
uuid Ja
varchar Ja
varint Ja
tuples Ja
udts Ja
map Ja

Statisk stöds för datatypsdeklaration.

CQL-funktioner

Azure Cosmos DB för Apache Cassandra stöder följande CQL-funktioner:

Command Stöds
Token * Ja
ttl *** Ja
writetime *** Ja
cast ** Ja

Kommentar

* API för Cassandra stöder token som projektion/väljare och tillåter endast token (pk) till vänster i en where-sats. Stöds till exempel WHERE token(pk) > 1024 , men WHERE token(pk) > token(100) stöds inte .
** Funktionen cast() kan inte kapslas i API:et för Cassandra. Stöds till exempel SELECT cast(count as double) FROM myTable , men SELECT avg(cast(count as double)) FROM myTable stöds inte .
Anpassade tidsstämplar och TTL som anges med USING alternativet tillämpas på radnivå (och inte per cell).

Mängdfunktioner:

Command Stöds
avg Ja
count Ja
min Ja
max Ja
sum Ja

Kommentar

Aggregeringsfunktioner fungerar på vanliga kolumner, men aggregeringar på klustringskolumner stöds inte .

Blobkonverteringsfunktioner:

Command Stöds
typeAsBlob(value) Ja
blobAsType(value) Ja

UUID- och timeuuid-funktioner:

Command Stöds
dateOf() Ja
now() Ja
minTimeuuid() Ja
unixTimestampOf() Ja
toDate(timeuuid) Ja
toTimestamp(timeuuid) Ja
toUnixTimestamp(timeuuid) Ja
toDate(timestamp) Ja
toUnixTimestamp(timestamp) Ja
toTimestamp(date) Ja
toUnixTimestamp(date) Ja

CQL-kommandon

Azure Cosmos DB stöder följande databaskommandon på API för Cassandra-konton.

Command Stöds
ALLOW FILTERING Ja
ALTER KEYSPACE N/A (PaaS-tjänst, replikering som hanteras internt)
ALTER MATERIALIZED VIEW Ja
ALTER ROLE No
ALTER TABLE Ja
ALTER TYPE Nej
ALTER USER Nej
BATCH Ja (endast ologgad batch)
COMPACT STORAGE N/A (PaaS-tjänst)
CREATE AGGREGATE Nej
CREATE CUSTOM INDEX (SASI) Nej
CREATE INDEX Ja (inklusive namngivna index men fullständig FROZEN-samling stöds inte)
CREATE FUNCTION Nej
CREATE KEYSPACE (replikeringsinställningarna ignoreras) Ja
CREATE MATERIALIZED VIEW Ja
CREATE TABLE Ja
CREATE TRIGGER No
CREATE TYPE Ja
CREATE ROLE Nej
CREATE USER (Inaktuell i inbyggda Apache Cassandra) Nej
DELETE Ja
DISTINCT Nej
DROP AGGREGATE Nej
DROP FUNCTION Nej
DROP INDEX Ja
DROP KEYSPACE Ja
DROP MATERIALIZED VIEW Ja
DROP ROLE No
DROP TABLE Ja
DROP TRIGGER No
DROP TYPE Ja
DROP USER (Inaktuell i inbyggda Apache Cassandra) Nej
GRANT Nej
INSERT Ja
LIST PERMISSIONS Nej
LIST ROLES Nej
LIST USERS (Inaktuell i inbyggda Apache Cassandra) Nej
REVOKE Nej
SELECT Ja
UPDATE Ja
TRUNCATE Ja
USE Ja

Lightweight Transactions (LWT)

Komponent Stöds
DELETE IF EXISTS Ja
DELETE conditions Ja
INSERT IF NOT EXISTS Ja
UPDATE IF EXISTS Ja
UPDATE IF NOT EXISTS Ja
UPDATE conditions Ja

Kommentar

Förenklade transaktioner stöds för närvarande inte för konton som har skrivningar i flera regioner aktiverade.

CQL Shell-kommandon

Azure Cosmos DB stöder följande databaskommandon på API för Cassandra-konton.

Command Stöds
CAPTURE Ja
CLEAR Ja
CONSISTENCY * Ej tillämpligt
COPY Nej
DESCRIBE Ja
cqlshExpand No
EXIT Ja
LOGIN N/A (CQL-funktionen USER stöds inte, därför LOGIN är den redundant)
PAGING Ja
SERIAL CONSISTENCY * Ej tillämpligt
SHOW Ja
SOURCE Ja
TRACING N/A (API för Cassandra backas upp av Azure Cosmos DB – använd diagnostikloggning för felsökning)

Kommentar

Konsekvens fungerar annorlunda i Azure Cosmos DB. Mer information finns här .

JSON-support

Command Stöds
SELECT JSON Ja
INSERT JSON Ja
fromJson() Nej
toJson() Nej

API för Cassandra-gränser

Azure Cosmos DB för Apache Cassandra har inga begränsningar för storleken på data som lagras i en tabell. Hundratals terabyte eller petabyte data kan lagras samtidigt om partitionsnyckelgränserna respekteras. På samma sätt har varje entitet eller radekvivalenter inga gränser för antalet kolumner. Entitetens totala storlek får dock inte överstiga 2 MB. Data per partitionsnyckel får inte överstiga 20 GB som i alla andra API:er.

Verktyg

Azure Cosmos DB för Apache Cassandra är en hanterad tjänstplattform. Plattformen kräver inte några hanteringskostnader eller verktyg som skräpinsamlare, Java Virtual Machine (JVM) och nodetool för att hantera klustret. Verktyg som cqlsh som använder binär CQLv4-kompatibilitet stöds.

  • Azure-portalens datautforskare, mått, loggdiagnostik, PowerShell och CLI är andra mekanismer som stöds för att hantera kontot.

CQL-gränssnitt

Du kan ansluta till API:et för Cassandra i Azure Cosmos DB med hjälp av CQLSH som är installerat på en lokal dator. Den levereras med Apache Cassandra 3.11 och fungerar inte genom att ange miljövariablerna. Följande avsnitt innehåller instruktioner för att installera, konfigurera och ansluta till API för Cassandra i Azure Cosmos DB, i Windows eller Linux med CQLSH.

Varning

Anslut ions till Azure Cosmos DB för Apache Cassandra fungerar inte med DataStax Enterprise (DSE) eller Cassandra 4.0-versioner av CQLSH. Se till att du endast använder v3.11 öppen källkod Apache Cassandra-versioner av CQLSH när du ansluter till API för Cassandra.

Windows:

  1. Installera Python 3
  2. Installera PIP
    1. Ladda ned get-pip.py-filen innan du installerar PIP.
    2. Starta en kommandotolk om den inte redan är öppen. Om du vill göra det öppnar du Sökfältet i Windows, skriver cmd och väljer ikonen.
    3. Kör sedan följande kommando för att ladda ned filen get-pip.py:
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. Installera PIP på Windows
python get-pip.py
  1. Kontrollera PIP-installationen (leta efter ett meddelande från steg 3 för att bekräfta vilken mapp PIP installerades i och navigera sedan till den mappen och kör hjälpen med kommandot pip).
  2. Installera CQLSH med PIP
pip3 install cqlsh==5.0.3
  1. Installera Python 2
  2. Kör CQLSH med hjälp av autentiseringsmekanismen.

Kommentar

Du skulle behöva ange miljövariablerna så att de pekar på python 2-mappen.

Installera på 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

Anslut med 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

Anslut med 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

Alla CRUD-åtgärder som körs via en CQL v4-kompatibel SDK returnerar extra information om fel och enheter för begäranden som förbrukas. Kommandona DELETE och UPDATE bör hanteras med hänsyn till resursstyrning för att säkerställa den mest effektiva användningen av det etablerade dataflödet.

  • Observera att gc_grace_seconds-värdet måste vara noll om det anges.
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}"); 
        } 

Mappning av konsekvens

Azure Cosmos DB för Apache Cassandra ger val av konsekvens för läsåtgärder. Konsekvensmappningen beskrivs här.

Behörighets- och rollhantering

Azure Cosmos DB stöder rollbaserad åtkomstkontroll i Azure (Azure RBAC) för etablering, roterande nycklar, visning av mått och skrivskyddade och skrivskyddade lösenord/nycklar som kan hämtas via Azure-portalen. Azure Cosmos DB stöder inte roller för CRUD-aktiviteter.

Alternativ för nyckelrymd och tabell

Alternativen för regionnamn, klass, replication_factor och datacenter i kommandot "Skapa nyckelrymd" ignoreras för närvarande. Systemet använder den underliggande Azure Cosmos DB:s globala distributionsreplikeringsmetod för att lägga till regionerna. Om du behöver förekomsten av data mellan regioner kan du aktivera dem på kontonivå med PowerShell, CLI eller portalen om du vill veta mer, se artikeln om hur du lägger till regioner . Durable_writes kan inte inaktiveras eftersom Azure Cosmos DB säkerställer att varje skrivning är beständig. I varje region replikerar Azure Cosmos DB data i replikuppsättningen som består av fyra repliker och den här replikuppsättningskonfigurationen kan inte ändras.

Alla alternativ ignoreras när du skapar tabellen, förutom gc_grace_seconds, som ska anges till noll. Nyckelutrymmet och tabellen har ett extra alternativ med namnet "cosmosdb_provisioned_throughput" med ett minsta värde på 400 RU/s. Nyckelrymdens dataflöde tillåter delning av dataflöde mellan flera tabeller och det är användbart för scenarier när alla tabeller inte använder det etablerade dataflödet. Med kommandot Alter Table kan du ändra det etablerade dataflödet i regionerna.

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 ;

Sekundärt index

API för Cassandra stöder sekundära index för alla datatyper förutom typer av frysta samlingar, decimaler och varianttyper.

Användning av principen för nytt anslutningsförsök i Cassandra

Azure Cosmos DB är ett resursstyrt system. Du kan utföra ett visst antal åtgärder under en viss sekund baserat på de enheter för begäran som förbrukas av åtgärderna. Om ett program överskrider den gränsen under en viss sekund är begäranden hastighetsbegränsade och undantag utlöses. API:et för Cassandra i Azure Cosmos DB översätter dessa undantag till överlagrade fel i det interna Cassandra-protokollet. För att säkerställa att ditt program kan avlyssna och försöka igen vid hastighetsbegränsning tillhandahålls spark- och Java-tilläggen. Se även Java-kodexempel för datataxdrivrutiner av version 3 och version 4 när du ansluter till API för Cassandra i Azure Cosmos DB. Om du använder andra SDK:er för att komma åt API för Cassandra i Azure Cosmos DB skapar du en återförsöksprincip för att försöka igen med dessa undantag. Du kan också aktivera återförsök på serversidan för API för Cassandra.

Nästa steg