Apache Cassandra-funktioner som stöds av Azure Cosmos DB för Apache Cassandra
GÄLLER FÖR: Kassandra
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
Anslutningar 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 apache Cassandra-versioner med öppen källkod med öppen källkod av CQLSH när du ansluter till API för Cassandra.
Windows:
- Installera Python 3
- Installera PIP
- Ladda ned get-pip.py-filen innan du installerar PIP.
- 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.
- 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
- Installera PIP på Windows
python get-pip.py
- 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).
- Installera CQLSH med PIP
pip3 install cqlsh==5.0.3
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
- Kom igång med att skapa ett API för Cassandra-konto, databas och en tabell med hjälp av ett Java-program