Funkce Apache Cassandra podporované službou Azure Cosmos DB pro Apache Cassandra
PLATÍ PRO: Cassandra
Azure Cosmos DB je celosvětově rozšířená vícemodelová databázová služba společnosti Microsoft. S azure Cosmos DB for Apache Cassandra můžete komunikovat prostřednictvím opensourcových klientských ovladačů Cassandra Query Language (CQL) binárního protokolu v4 kompatibilního s opensourcovými klientskými ovladači Cassandra.
Pomocí služby Azure Cosmos DB pro Apache Cassandra můžete využívat výhody rozhraní API Apache Cassandra a podnikových funkcí, které poskytuje azure Cosmos DB. Mezi podnikové funkce patří globální distribuce, automatické dělení škálování na více systémů, záruky dostupnosti a latence, šifrování při nečinnosti, zálohování a mnoho dalšího.
Protokol Cassandra
Azure Cosmos DB pro Apache Cassandra je kompatibilní s rozhraním API CQL (Cassandra Query Language) v3.11 (zpětně kompatibilní s verzí 2.x). Podporované příkazy CQL, nástroje, omezení a výjimky najdete níže. Každý klientský ovladač, který těmto protokolům rozumí, by měl být schopný se připojit ke službě Azure Cosmos DB pro Apache Cassandra.
Azure Managed Instance for Apache Cassandra
Pro některé zákazníky může být přizpůsobení rozhraní API pro Cassandru výzvou kvůli rozdílům v chování nebo konfiguraci, zejména pro migrace metodou lift and shift. Pokud je funkce, která je pro vaši aplikaci důležitá, uvedena jako nepodporovaná níže, zvažte použití služby Azure Managed Instance for Apache Cassandra. Jedná se o prvotřídní službu Azure pro hostování a údržbu čistě opensourcových clusterů Apache Cassandra s 100% kompatibilitou.
Ovladač Cassandra
Azure Cosmos DB pro Apache Cassandra podporuje následující verze ovladačů Cassandra:
Datové typy CQL
Azure Cosmos DB pro Apache Cassandra podporuje následující datové typy CQL:
Typ | Podporováno |
---|---|
ascii |
Ano |
bigint |
Ano |
blob |
Ano |
boolean |
Ano |
counter |
Ano |
date |
Ano |
decimal |
Ano |
double |
Ano |
float |
Ano |
frozen |
Ano |
inet |
Ano |
int |
Ano |
list |
Ano |
set |
Ano |
smallint |
Ano |
text |
Ano |
time |
Ano |
timestamp |
Ano |
timeuuid |
Ano |
tinyint |
Ano |
tuple |
Ano |
uuid |
Ano |
varchar |
Ano |
varint |
Ano |
tuples |
Ano |
udts |
Ano |
map |
Yes |
Statická je podporována pro deklaraci datového typu.
Funkce CQL
Azure Cosmos DB pro Apache Cassandra podporuje následující funkce CQL:
Příkaz | Podporováno |
---|---|
Token * |
Ano |
ttl *** |
Ano |
writetime *** |
Ano |
cast ** |
Ano |
Poznámka:
* Rozhraní API pro Cassandra podporuje token jako projekci/selektor a povoluje tokeny (pk) pouze na levé straně klauzule where. Podporuje se napříkladWHERE token(pk) > 1024
, ale WHERE token(pk) > token(100)
nepodporuje se.
** Funkce cast()
není vnořená v rozhraní API pro Cassandra. Podporuje se napříkladSELECT cast(count as double) FROM myTable
, ale SELECT avg(cast(count as double)) FROM myTable
nepodporuje se.
Vlastní časová razítka a hodnota TTL zadaná s USING
možností se použijí na úrovni řádku (a ne na buňku).
Agregační funkce:
Příkaz | Podporováno |
---|---|
avg |
Ano |
count |
Ano |
min |
Ano |
max |
Ano |
sum |
Ano |
Poznámka:
Agregační funkce fungují na běžných sloupcích, ale agregace na sloupcích clusteringu se nepodporují .
Funkce převodu objektů blob:
Příkaz | Podporováno |
---|---|
typeAsBlob(value) |
Ano |
blobAsType(value) |
Yes |
UUID a funkce timeuuid:
Příkaz | Podporováno |
---|---|
dateOf() |
Ano |
now() |
Ano |
minTimeuuid() |
Ano |
unixTimestampOf() |
Ano |
toDate(timeuuid) |
Ano |
toTimestamp(timeuuid) |
Ano |
toUnixTimestamp(timeuuid) |
Ano |
toDate(timestamp) |
Ano |
toUnixTimestamp(timestamp) |
Ano |
toTimestamp(date) |
Ano |
toUnixTimestamp(date) |
Yes |
Příkazy CQL
Azure Cosmos DB podporuje následující databázové příkazy pro účty API pro Cassandra.
Příkaz | Podporováno |
---|---|
ALLOW FILTERING |
Ano |
ALTER KEYSPACE |
Není k dispozici (služba PaaS, replikace spravovaná interně) |
ALTER MATERIALIZED VIEW |
Yes |
ALTER ROLE |
Ne |
ALTER TABLE |
Ano |
ALTER TYPE |
No |
ALTER USER |
Ne |
BATCH |
Ano (pouze nelogovaná dávka) |
COMPACT STORAGE |
Není k dispozici (služba PaaS) |
CREATE AGGREGATE |
No |
CREATE CUSTOM INDEX (SASI) |
Ne |
CREATE INDEX |
Ano (včetně pojmenovaných indexů , ale úplná kolekce FROZEN se nepodporuje) |
CREATE FUNCTION |
No |
CREATE KEYSPACE (nastavení replikace ignorováno) |
Ano |
CREATE MATERIALIZED VIEW |
Ano |
CREATE TABLE |
Ano |
CREATE TRIGGER |
Ne |
CREATE TYPE |
Ano |
CREATE ROLE |
No |
CREATE USER (Zastaralé v nativní službě Apache Cassandra) |
No |
DELETE |
Ano |
DISTINCT |
No |
DROP AGGREGATE |
No |
DROP FUNCTION |
No |
DROP INDEX |
Ano |
DROP KEYSPACE |
Ano |
DROP MATERIALIZED VIEW |
Ano |
DROP ROLE |
Ne |
DROP TABLE |
Ano |
DROP TRIGGER |
Ne |
DROP TYPE |
Ano |
DROP USER (Zastaralé v nativní službě Apache Cassandra) |
No |
GRANT |
No |
INSERT |
Ano |
LIST PERMISSIONS |
No |
LIST ROLES |
Ne |
LIST USERS (Zastaralé v nativní službě Apache Cassandra) |
No |
REVOKE |
No |
SELECT |
Ano |
UPDATE |
Ano |
TRUNCATE |
Ano |
USE |
Yes |
Zjednodušené transakce (LWT)
Komponenta | Podporováno |
---|---|
DELETE IF EXISTS |
Ano |
DELETE conditions |
Ano |
INSERT IF NOT EXISTS |
Ano |
UPDATE IF EXISTS |
Ano |
UPDATE IF NOT EXISTS |
Ano |
UPDATE conditions |
Ano |
Poznámka:
U účtů s povolenými zápisy do více oblastí se v současné době nepodporují zjednodušené transakce.
Příkazy prostředí CQL
Azure Cosmos DB podporuje následující databázové příkazy pro účty API pro Cassandra.
Příkaz | Podporováno |
---|---|
CAPTURE |
Ano |
CLEAR |
Yes |
CONSISTENCY * |
– |
COPY |
No |
DESCRIBE |
Ano |
cqlshExpand |
Ne |
EXIT |
Ano |
LOGIN |
Není k dispozici (funkce USER CQL není podporovaná, proto LOGIN je redundantní) |
PAGING |
Yes |
SERIAL CONSISTENCY * |
– |
SHOW |
Ano |
SOURCE |
Yes |
TRACING |
Není k dispozici (rozhraní API pro Cassandra je podporováno službou Azure Cosmos DB – k řešení potíží použijte diagnostické protokolování ). |
Poznámka:
Konzistence ve službě Azure Cosmos DB funguje jinak. Další informace najdete tady .
Podpora JSON
Příkaz | Podporováno |
---|---|
SELECT JSON |
Ano |
INSERT JSON |
Ano |
fromJson() |
No |
toJson() |
Ne |
Omezení rozhraní API pro Cassandra
Azure Cosmos DB pro Apache Cassandra nemá žádná omezení velikosti dat uložených v tabulce. Když se dodrží limity klíče oddílu, je možné uložit stovky terabajtů nebo petabajtů dat. Podobně každá entita nebo ekvivalent řádku nemá žádné omezení počtu sloupců. Celková velikost entity by ale neměla překročit 2 MB. Data na klíč oddílu nesmí překročit 20 GB, stejně jako ve všech ostatních rozhraních API.
Nástroje
Azure Cosmos DB for Apache Cassandra je platforma spravované služby. Platforma nevyžaduje žádné režijní náklady na správu ani nástroje, jako je uvolňování paměti, Java Virtual Machine (JVM) a nodetool ke správě clusteru. Podporují se nástroje, jako je cqlsh, které využívají kompatibilitu Binary CQLv4.
- Průzkumník dat webu Azure Portal, metriky, diagnostika protokolů, PowerShell a rozhraní příkazového řádku jsou další podporované mechanismy pro správu účtu.
Prostředí CQL
Ke službě API pro Cassandra ve službě Azure Cosmos DB se můžete připojit pomocí CQLSH nainstalovaného na místním počítači. Dodává se s Apache Cassandra 3.11 a funguje mimo ni nastavením proměnných prostředí. Následující části obsahují pokyny k instalaci, konfiguraci a připojení k rozhraní API pro Cassandra ve službě Azure Cosmos DB ve Windows nebo Linuxu pomocí CQLSH.
Upozorňující
Připojení ke službě Azure Cosmos DB pro Apache Cassandra nebudou fungovat s verzemi CQLSH (DataStax Enterprise) ani Cassandra 4.0. Ujistěte se, že při připojování k rozhraní API pro Cassandra používáte pouze opensourcové verze Apache Cassandra pro CQLSH verze 3.11.
Windows:
- Instalace Pythonu 3
- Instalace PIP
- Před instalací PIP stáhněte soubor get-pip.py.
- Pokud ještě není otevřený, spusťte příkazový řádek. Uděláte to tak, že otevřete panel hledání ve Windows, zadáte cmd a vyberete ikonu.
- Potom spuštěním následujícího příkazu stáhněte soubor get-pip.py:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- Instalace PIP ve Windows
python get-pip.py
- Ověřte instalaci PIP (vyhledejte zprávu z kroku 3, abyste potvrdili, ve které složce pip byla nainstalovaná, a pak přejděte do této složky a spusťte nápovědu pro příkaz pip).
- Instalace CQLSH pomocí PIP
pip3 install cqlsh==5.0.3
Poznámka:
Proměnné prostředí byste museli nastavit tak, aby odkazovaly na složku Python 2.
Instalace v systémech 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
Připojení se systémem 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
Připojení pomocí Dockeru:
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
Všechny operace CRUD, které se provádějí prostřednictvím sady SDK kompatibilní s CQL v4, vrátí další informace o spotřebovaných jednotkách chyb a žádostí. Příkazy DELETE a UPDATE by se měly zpracovávat s ohledem na zásady správného řízení prostředků, aby se zajistilo nejúčinnější využití zřízené propustnosti.
- Poznámka: Pokud je zadaná hodnota gc_grace_seconds, musí být nulová.
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}");
}
Mapování konzistence
Azure Cosmos DB pro Apache Cassandra poskytuje konzistenci operací čtení. Tady je podrobně popsáno mapování konzistence.
Správa oprávnění a rolí
Azure Cosmos DB podporuje řízení přístupu na základě role Azure (Azure RBAC) pro zřizování, obměny klíčů, zobrazování metrik a hesel a hesel a klíčů jen pro čtení a jen pro čtení, které je možné získat prostřednictvím webu Azure Portal. Azure Cosmos DB nepodporuje role pro aktivity CRUD.
Klávesové zkratky a možnosti tabulky
Možnosti názvu oblasti, třídy, replication_factor a datacentra v příkazu Create Keyspace se v současné době ignorují. Systém k přidání oblastí používá základní metodu globální replikace distribuce služby Azure Cosmos DB. Pokud potřebujete informace o přítomnosti dat mezi oblastmi, můžete je povolit na úrovni účtu pomocí PowerShellu, rozhraní příkazového řádku nebo portálu , kde najdete další informace v článku o přidávání oblastí . Durable_writes nejde zakázat, protože Azure Cosmos DB zajišťuje odolnost každého zápisu. Azure Cosmos DB v každé oblasti replikuje data napříč sadou replik, která se skládá ze čtyř replik, a tuto konfiguraci sady replik není možné upravit.
Při vytváření tabulky jsou ignorovány všechny možnosti s výjimkou gc_grace_seconds, které by měly být nastaveny na nulu. Keyspace a tabulka mají další možnost s názvem "cosmosdb_provisioned_throughput" s minimální hodnotou 400 RU/s. Propustnost Keyspace umožňuje sdílet propustnost mezi více tabulkami a je užitečná pro scénáře, kdy všechny tabulky nevyužívají zřízenou propustnost. Příkaz Alter Table umožňuje změnit zřízenou propustnost napříč oblastmi.
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ární index
Rozhraní API pro Cassandra podporuje sekundární indexy pro všechny datové typy s výjimkou zamrzlých typů kolekcí, desetinných míst a variant.
Používání zásad opakování připojení Cassandra
Azure Cosmos DB je systém, který se řídí prostředky. V dané sekundě můžete provádět určitý počet operací na základě jednotek žádostí spotřebovaných operacemi. Pokud aplikace překročí tento limit v dané sekundě, požadavky jsou omezené rychlostí a výjimky budou vyvolány. Rozhraní API pro Cassandra ve službě Azure Cosmos DB tyto výjimky překládá na přetížené chyby v nativním protokolu Cassandra. Aby se zajistilo, že vaše aplikace může zachycovat a opakovat požadavky v případě omezení rychlosti, poskytne se spark a rozšíření Java . Projděte si také ukázky kódu Java pro ovladače Datastax verze 3 a 4 , když se připojujete k rozhraní API pro Cassandra ve službě Azure Cosmos DB. Pokud pro přístup k rozhraní API pro Cassandra ve službě Azure Cosmos DB použijete jiné sady SDK, vytvořte zásadu opakování pro opakování těchto výjimek. Alternativně povolte opakování na straně serveru pro rozhraní API pro Cassandra.
Další kroky
- Začínáme s vytvářením rozhraní API pro účet Cassandra, databázi a tabulku pomocí aplikace v Javě