Az Azure Cosmos DB által az Apache Cassandra számára támogatott Apache Cassandra-funkciók

A KÖVETKEZŐKRE VONATKOZIK: Cassandra

Az Azure Cosmos-adatbázis a Microsoft globálisan elosztott többmodelles adatbázis-szolgáltatása. Az Apache Cassandra-hoz készült Azure Cosmos DB-vel a Cassandra Query Language (CQL) Binary Protocol v4 wire protocol-kompatibilis nyílt forráskódú Cassandra-ügyfélillesztőkkel kommunikálhat.

Az Apache Cassandra-hoz készült Azure Cosmos DB használatával élvezheti az Apache Cassandra API-k előnyeit és az Azure Cosmos DB által biztosított vállalati képességeket. A vállalati képességek magukban foglalják a globális terjesztést, az automatikus horizontális felskálázás particionálását, rendelkezésre állási és késési garanciát, az inaktív adatok titkosítását, a biztonsági mentéseket és még sok más.

Cassandra protokoll

Az Apache Cassandra-hoz készült Azure Cosmos DB kompatibilis a Cassandra Query Language (CQL) v3.11 API-val (visszamenőlegesen kompatibilis a 2.x verzióval). A támogatott CQL-parancsok, -eszközök, -korlátozások és -kivételeket alább láthatók. Az ezeket a protokollokat ismerő ügyfélillesztőknek csatlakozniuk kell az Apache Cassandra-hoz készült Azure Cosmos DB-hez.

Felügyelt Azure-példány az Apache Cassandrához

Egyes ügyfelek számára a Cassandra API-hoz való alkalmazkodás kihívást jelenthet a viselkedés és/vagy a konfiguráció különbségei miatt, különösen az átemeléses migrálások esetében. Ha az alkalmazás szempontjából kritikus fontosságú funkciók az alábbiakban nem támogatottak, fontolja meg az Apache Cassandra felügyelt Azure-példányának használatát. Ez egy első féltől származó Azure-szolgáltatás, amely tiszta nyílt forráskódú Apache Cassandra-fürtöket üzemeltet és tart fenn 100%-os kompatibilitással.

Cassandra-illesztőprogram

A Cassandra-illesztőprogramok alábbi verzióit támogatja az Azure Cosmos DB az Apache Cassandra-hoz:

CQL-adattípusok

Az Apache Cassandra-hoz készült Azure Cosmos DB a következő CQL-adattípusokat támogatja:

Type Támogatott
ascii Igen
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 Igen

A statikus adattípus-deklaráció támogatott.

CQL-függvények

Az Apache Cassandra-hoz készült Azure Cosmos DB a következő CQL-függvényeket támogatja:

Parancs Támogatott
Token * Igen
ttl *** Yes
writetime *** Yes
cast ** Igen

Megjegyzés:

* A Cassandra API támogatja a tokent kivetítésként/választóként, és csak a token(pk) használatát engedélyezi a hol záradék bal oldalán. Például támogatott, WHERE token(pk) > 1024 de WHERE token(pk) > token(100)nem támogatott.
** A cast() függvény nem ágyazható be a Cassandra API-ban. Például támogatott, SELECT cast(count as double) FROM myTable de SELECT avg(cast(count as double)) FROM myTablenem támogatott.
A beállítással USING megadott egyéni időbélyegek és TTL-ek sorszinten vannak alkalmazva (és nem cellánként).

Összesítő függvények:

Parancs Támogatott
avg Igen
count Yes
min Yes
max Yes
sum Igen

Megjegyzés:

Az összesítő függvények normál oszlopokon működnek, de a fürtözési oszlopok összesítése nem támogatott.

Blobkonvertálási függvények:

Parancs Támogatott
typeAsBlob(value) Igen
blobAsType(value) Igen

UUID és timeuuid függvények:

Parancs Támogatott
dateOf() Igen
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) Igen

CQL-parancsok

Az Azure Cosmos DB az alábbi adatbázis-parancsokat támogatja a Cassandra-fiókok API-ján.

Parancs Támogatott
ALLOW FILTERING Igen
ALTER KEYSPACE N/A (PaaS szolgáltatás, belsőleg felügyelt replikáció)
ALTER MATERIALIZED VIEW Igen
ALTER ROLE No
ALTER TABLE Yes
ALTER TYPE No
ALTER USER Nem
BATCH Igen (csak a nem megjelölt köteg)
COMPACT STORAGE N/A (PaaS szolgáltatás)
CREATE AGGREGATE Nem
CREATE CUSTOM INDEX (SASI) Nem
CREATE INDEX Igen (beleértve a nevesített indexeket , de a teljes FROZEN gyűjtemény nem támogatott)
CREATE FUNCTION Nem
CREATE KEYSPACE (a replikációs beállítások figyelmen kívül hagyva) Igen
CREATE MATERIALIZED VIEW Yes
CREATE TABLE Yes
CREATE TRIGGER No
CREATE TYPE Yes
CREATE ROLE Nem
CREATE USER (Elavult a natív Apache Cassandra) Nem
DELETE Yes
DISTINCT No
DROP AGGREGATE No
DROP FUNCTION No
DROP INDEX Igen
DROP KEYSPACE Yes
DROP MATERIALIZED VIEW Yes
DROP ROLE No
DROP TABLE Yes
DROP TRIGGER No
DROP TYPE Igen
DROP USER (Elavult a natív Apache Cassandra) Nem
GRANT No
INSERT Yes
LIST PERMISSIONS No
LIST ROLES Nem
LIST USERS (Elavult a natív Apache Cassandra) Nem
REVOKE No
SELECT Igen
UPDATE Yes
TRUNCATE Yes
USE Igen

Egyszerűsített tranzakciók (LWT)

Komponens Támogatott
DELETE IF EXISTS Igen
DELETE conditions Yes
INSERT IF NOT EXISTS Yes
UPDATE IF EXISTS Yes
UPDATE IF NOT EXISTS Yes
UPDATE conditions Igen

Megjegyzés:

Az egyszerűsített tranzakciók jelenleg nem támogatottak olyan fiókok esetében, amelyek többrégiós írási funkcióval rendelkeznek.

CQL Shell-parancsok

Az Azure Cosmos DB az alábbi adatbázis-parancsokat támogatja a Cassandra-fiókok API-ján.

Parancs Támogatott
CAPTURE Igen
CLEAR Igen
CONSISTENCY * N/A
COPY Nem
DESCRIBE Yes
cqlshExpand No
EXIT Igen
LOGIN N/A (A CQL függvény USER nem támogatott, ezért LOGIN redundáns)
PAGING Igen
SERIAL CONSISTENCY * N.A.
SHOW Igen
SOURCE Igen
TRACING N/A (a Cassandra API-t az Azure Cosmos DB készíti el – a hibaelhárításhoz használja a diagnosztikai naplózást )

Megjegyzés:

A konzisztencia másképp működik az Azure Cosmos DB-ben, további információt itt talál.

JSON-támogatás

Parancs Támogatott
SELECT JSON Igen
INSERT JSON Yes
fromJson() No
toJson() Nem

Api a Cassandra korlátaihoz

Az Apache Cassandra-hoz készült Azure Cosmos DB nem korlátozza a táblában tárolt adatok méretét. Több száz terabájtnyi vagy petabájtnyi adat tárolható, ha biztosítva van a partíciókulcs korlátainak betartása. Hasonlóképpen, minden entitás vagy sor megfelelője nem korlátozza az oszlopok számát. Az entitás teljes mérete azonban nem haladhatja meg a 2 MB-ot. A partíciókulcsonkénti adatok nem haladhatják meg a 20 GB-ot, mint az összes többi API-ban.

Tools

Az Azure Cosmos DB for Apache Cassandra egy felügyelt szolgáltatásplatform. A platform nem igényel felügyeleti többletterhelést vagy segédprogramokat, például a Garbage Collectort, a Java Virtual Machine-t (JVM) és a nodetool-t a fürt kezeléséhez. A bináris CQLv4-kompatibilitást használó cqlsh-eszközök támogatottak.

  • Az Azure Portal adatkezelője, a metrikák, a naplódiagnosztikák, a PowerShell és a parancssori felület a fiók kezelésére szolgáló egyéb támogatott mechanizmusok.

CQL-rendszerhéj

A Cassandra API-hoz az Azure Cosmos DB-ben a helyi gépen telepített CQLSH használatával csatlakozhat. Az Apache Cassandra 3.11-et használja, és a környezeti változók beállításával a dobozon kívül működik. Az alábbi szakaszok a Cassandra API-hoz való telepítésre, konfigurálásra és csatlakozásra vonatkozó utasításokat tartalmazzák az Azure Cosmos DB-ben, Windowson vagy Linuxon a CQLSH használatával.

Figyelmeztetés:

Csatlakozás Azure Cosmos DB for Apache Cassandra nem fog működni a DataStax Enterprise (D Standard kiadás) és a Cassandra 4.0 CQLSH-verziók esetében. Győződjön meg arról, hogy csak a CQLSH Apache Cassandra nyílt forráskód 3.11-es verzióját használja a Cassandra API-hoz való csatlakozáskor.

Windows:

  1. A Python 3 telepítése
  2. A PIP telepítése
    1. A PIP telepítése előtt töltse le a get-pip.py fájlt.
    2. Nyisson meg egy parancssort, ha még nincs megnyitva. Ehhez nyissa meg a Windows keresősávot, írja be a parancsot, és válassza ki az ikont.
    3. Ezután futtassa a következő parancsot a get-pip.py fájl letöltéséhez:
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. A PIP telepítése Windows rendszeren
python get-pip.py
  1. Ellenőrizze a PIP telepítését (keressen egy üzenetet a 3. lépésben, amely megerősíti, hogy a PIP melyik mappába lett telepítve, majd keresse meg a mappát, és futtassa a parancs pip súgóját).
  2. A CQLSH telepítése PIP használatával
pip3 install cqlsh==5.0.3
  1. A Python 2 telepítése
  2. Futtassa a CQLSH-t a hitelesítési mechanizmussal.

Megjegyzés:

A környezeti változókat úgy kell beállítania, hogy a Python 2 mappára mutasson.

Telepítés Unix/Linux/Mac rendszeren:

# 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

Csatlakozás Unix/Linux/Mac rendszeren:

# 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

Csatlakozás a Dockerrel:

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

A CQL v4-kompatibilis SDK-n keresztül végrehajtott CRUD-műveletek minden további információt adnak vissza a felhasznált hibákról és kérelemegységekről. A DELETE és AZ UPDATE parancsokat az erőforrás-szabályozás figyelembevételével kell kezelni a kiosztott átviteli sebesség leghatékonyabb használatának biztosítása érdekében.

  • Ügyeljen arra, hogy a gc_grace_seconds értékének nullának kell lennie, ha meg van adva.
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}"); 
        } 

Konzisztencialeképezés

Az Apache Cassandra-hoz készült Azure Cosmos DB számos konzisztenciát biztosít az olvasási műveletekhez. A konzisztencialeképezést itt találja.

Engedély- és szerepkörkezelés

Az Azure Cosmos DB támogatja az Azure szerepköralapú hozzáférés-vezérlését (Azure RBAC) a kulcsok kiépítéséhez, elforgatásához, a metrikák megtekintéséhez, valamint az Azure Portalon beszerezhető írásvédett és írásvédett jelszavakhoz/kulcsokhoz. Az Azure Cosmos DB nem támogatja a CRUD-tevékenységek szerepköreit.

Keyspace és Table options

A "Kulcstér létrehozása" parancs régiónevének, osztályának, replication_factor és adatközpontjának beállításait a rendszer jelenleg figyelmen kívül hagyja. A rendszer a mögöttes Azure Cosmos DB globális terjesztési replikációs módszerével adja hozzá a régiókat. Ha szüksége van az adatok régiók közötti jelenlétére, engedélyezheti azokat fiókszinten a PowerShell, parancssori felület vagy portál használatával. További információt a régiók hozzáadásáról szóló cikkben talál. Durable_writes nem lehet letiltani, mert az Azure Cosmos DB biztosítja, hogy minden írás tartós legyen. Az Azure Cosmos DB minden régióban replikálja az adatokat a replikakészleten, amely négy replikából áll, és ez a replikakészlet konfigurációja nem módosítható.

A tábla létrehozásakor az összes beállítás figyelmen kívül lesz hagyva, kivéve gc_grace_seconds, amelynek nullára kell állítania. A Keyspace és a tábla rendelkezik egy "cosmosdb_provisioned_throughput" nevű további lehetőséggel, amelynek minimális értéke 400 RU/s. A Kulcstér átviteli sebessége lehetővé teszi az átviteli sebesség több tábla közötti megosztását, és olyan helyzetekben hasznos, amikor az összes tábla nem használja a kiosztott átviteli sebességet. Az Alter Table paranccsal módosíthatja a kiosztott átviteli sebességet a régiók között.

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 ;

Másodlagos index

A Cassandra API támogatja a másodlagos indexeket az összes adattípuson, kivéve a befagyasztott gyűjteménytípusokat, a decimális és a variánstípusokat.

A Cassandra csatlakozási újrapróbálkozásra vonatkozó szabályzatának használata

Az Azure Cosmos DB egy erőforrás által szabályozott rendszer. A műveletek által felhasznált kérelemegységek alapján bizonyos számú műveletet hajthat végre egy adott másodpercben. Ha egy alkalmazás egy adott másodpercben túllépi ezt a korlátot, a kérelmek korlátozottak, és kivételeket kapnak. Az Azure Cosmos DB Cassandra API-ja ezeket a kivételeket a Cassandra natív protokoll túlterhelt hibáira fordítja. Annak érdekében, hogy az alkalmazás sebességkorlátozás esetén elfoghassa és újrapróbálkozhassa a kéréseket, a spark és a Java-bővítmények biztosítottak. Az Azure Cosmos DB-ben a Cassandra API-hoz való csatlakozáskor tekintse meg a 3. és a 4. verziójú Datastax-illesztőprogramok Java-kódmintáit is. Ha más SDK-kkal fér hozzá a Cassandra API-hoz az Azure Cosmos DB-ben, hozzon létre újrapróbálkozési szabályzatot a kivételek újrapróbálkozásához. Másik lehetőségként engedélyezze a kiszolgálóoldali újrapróbálkozást a Cassandra API-hoz.

Következő lépések