Funkcje bazy danych Apache Cassandra obsługiwane przez usługę Azure Cosmos DB dla systemu Apache Cassandra

DOTYCZY: Cassandra

Azure Cosmos DB to dystrybuowana globalnie, wielomodelowa usługa bazy danych udostępniana przez Microsoft. Możesz komunikować się z usługą Azure Cosmos DB dla systemu Apache Cassandra za pośrednictwem sterowników klienta Cassandra Query Language (CQL) Binary Protocol v4.

Korzystając z usługi Azure Cosmos DB dla systemu Apache Cassandra, możesz korzystać z zalet interfejsów API apache Cassandra i możliwości przedsiębiorstwa oferowanych przez usługę Azure Cosmos DB. Możliwości klasy przedsiębiorstwa obejmują globalną dystrybucję, automatyczne skalowanie partycjonowania w poziomie, gwarancje dostępności i opóźnień, szyfrowanie nieużywanych danych, kopie zapasowe i wiele więcej.

Protokół Cassandra

Usługa Azure Cosmos DB dla systemu Apache Cassandra jest zgodna z interfejsem API Cassandra Query Language (CQL) w wersji 3.11 (zgodny z poprzednimi wersjami 2.x). Obsługiwane polecenia CQL, narzędzia, ograniczenia i wyjątki są wymienione poniżej. Każdy sterownik klienta, który rozumie te protokoły, powinien być w stanie nawiązać połączenie z usługą Azure Cosmos DB dla usługi Apache Cassandra.

Azure Managed Instance for Apache Cassandra

W przypadku niektórych klientów dostosowanie do interfejsu API dla rozwiązania Cassandra może być wyzwaniem ze względu na różnice w zachowaniu i/lub konfiguracji, szczególnie w przypadku migracji metodą lift-and-shift. Jeśli funkcja krytyczna dla aplikacji jest wymieniona jako nieobsługiwana poniżej, rozważ użycie wystąpienia zarządzanego platformy Azure dla usługi Apache Cassandra. Jest to usługa platformy Azure pierwszej firmy do hostowania i obsługi czystych klastrów Apache Cassandra typu open source z 100% zgodnością.

Sterownik Cassandra

Następujące wersje sterowników Cassandra są obsługiwane przez usługę Azure Cosmos DB dla systemu Apache Cassandra:

Typy danych CQL

Usługa Azure Cosmos DB dla systemu Apache Cassandra obsługuje następujące typy danych CQL:

Type Obsługiwane
ascii Tak
bigint Tak
blob Tak
boolean Tak
counter Tak
date Tak
decimal Tak
double Tak
float Tak
frozen Tak
inet Tak
int Tak
list Tak
set Tak
smallint Tak
text Tak
time Tak
timestamp Tak
timeuuid Tak
tinyint Tak
tuple Tak
uuid Tak
varchar Tak
varint Tak
tuples Tak
udts Tak
map Tak

Statyczna jest obsługiwana dla deklaracji typu danych.

Funkcje języka CQL

Usługa Azure Cosmos DB dla systemu Apache Cassandra obsługuje następujące funkcje języka CQL:

Polecenie Obsługiwane
Token * Tak
ttl *** Tak
writetime *** Tak
cast ** Tak

Uwaga

* Interfejs API dla rozwiązania Cassandra obsługuje token jako selektor projekcji/selektora i zezwala tylko na token (pk) po lewej stronie klauzuli where. Na przykład WHERE token(pk) > 1024 jest obsługiwana, ale WHERE token(pk) > token(100) nie jest obsługiwana.
** Funkcja cast() nie jest zagnieżdżona w interfejsie API dla bazy danych Cassandra. Na przykład SELECT cast(count as double) FROM myTable jest obsługiwana, ale SELECT avg(cast(count as double)) FROM myTable nie jest obsługiwana.
Niestandardowe znaczniki czasu i czas wygaśnięcia określony za pomocą USING opcji są stosowane na poziomie wiersza (a nie na komórkę).

Agregujących:

Polecenie Obsługiwane
avg Tak
count Tak
min Tak
max Tak
sum Tak

Uwaga

Funkcje agregujące działają na zwykłych kolumnach, ale agregacje w kolumnach klastrowania nieobsługiwane.

Funkcje konwersji obiektów blob:

Polecenie Obsługiwane
typeAsBlob(value) Tak
blobAsType(value) Tak

Funkcje UUID i timeuuid:

Polecenie Obsługiwane
dateOf() Tak
now() Tak
minTimeuuid() Tak
unixTimestampOf() Tak
toDate(timeuuid) Tak
toTimestamp(timeuuid) Tak
toUnixTimestamp(timeuuid) Tak
toDate(timestamp) Tak
toUnixTimestamp(timestamp) Tak
toTimestamp(date) Tak
toUnixTimestamp(date) Tak

Polecenie języka CQL

Usługa Azure Cosmos DB obsługuje następujące polecenia bazy danych w interfejsie API dla kont Cassandra.

Polecenie Obsługiwane
ALLOW FILTERING Tak
ALTER KEYSPACE N/A (usługa PaaS, replikacja zarządzana wewnętrznie)
ALTER MATERIALIZED VIEW Tak
ALTER ROLE Brak
ALTER TABLE Tak
ALTER TYPE Nie
ALTER USER Nie.
BATCH Tak (tylko nieobjętą partią)
COMPACT STORAGE N/A (usługa PaaS)
CREATE AGGREGATE Nie.
CREATE CUSTOM INDEX (SASI) Nie.
CREATE INDEX Tak (w tym nazwane indeksy , ale pełna kolekcja FROZEN nie jest obsługiwana)
CREATE FUNCTION Nie.
CREATE KEYSPACE (ignorowane ustawienia replikacji) Tak
CREATE MATERIALIZED VIEW Tak
CREATE TABLE Tak
CREATE TRIGGER Brak
CREATE TYPE Tak
CREATE ROLE Nie.
CREATE USER (Przestarzałe w natywnym systemie Apache Cassandra) Nie.
DELETE Tak
DISTINCT Nie
DROP AGGREGATE Nie.
DROP FUNCTION Nie
DROP INDEX Tak
DROP KEYSPACE Tak
DROP MATERIALIZED VIEW Tak
DROP ROLE Brak
DROP TABLE Tak
DROP TRIGGER Brak
DROP TYPE Tak
DROP USER (Przestarzałe w natywnym systemie Apache Cassandra) Nie.
GRANT Nie
INSERT Tak
LIST PERMISSIONS Nie
LIST ROLES Nie.
LIST USERS (Przestarzałe w natywnym systemie Apache Cassandra) Nie.
REVOKE Nie
SELECT Tak
UPDATE Tak
TRUNCATE Tak
USE Tak

Uproszczone transakcje (LWT)

Składnik Obsługiwane
DELETE IF EXISTS Tak
DELETE conditions Tak
INSERT IF NOT EXISTS Tak
UPDATE IF EXISTS Tak
UPDATE IF NOT EXISTS Tak
UPDATE conditions Tak

Uwaga

Uproszczone transakcje nie są obecnie obsługiwane w przypadku kont z włączonymi zapisami w wielu regionach.

Polecenia powłoki CQL

Usługa Azure Cosmos DB obsługuje następujące polecenia bazy danych w interfejsie API dla kont Cassandra.

Polecenie Obsługiwane
CAPTURE Tak
CLEAR Tak
CONSISTENCY * Nie dotyczy
COPY Nie.
DESCRIBE Tak
cqlshExpand Brak
EXIT Tak
LOGIN N/A (funkcja USER CQL nie jest obsługiwana, dlatego LOGIN jest nadmiarowa)
PAGING Tak
SERIAL CONSISTENCY * Nie dotyczy
SHOW Tak
SOURCE Tak
TRACING Nie dotyczy (interfejs API dla bazy danych Cassandra jest wspierany przez usługę Azure Cosmos DB — użyj rejestrowania diagnostycznego do rozwiązywania problemów)

Uwaga

Spójność działa inaczej w usłudze Azure Cosmos DB, zobacz tutaj , aby uzyskać więcej informacji.

Obsługa formatu JSON

Polecenie Obsługiwane
SELECT JSON Tak
INSERT JSON Tak
fromJson() Nie
toJson() Nie.

Interfejs API dla limitów bazy danych Cassandra

Usługa Azure Cosmos DB dla bazy danych Apache Cassandra nie ma żadnych ograniczeń dotyczących rozmiaru danych przechowywanych w tabeli. Można przechowywać setki terabajtów lub petabajtów danych przy zapewnieniu uznania limitów klucza partycji. Podobnie każdy odpowiednik jednostki lub wiersza nie ma żadnych limitów liczby kolumn. Jednak całkowity rozmiar jednostki nie powinien przekraczać 2 MB. Dane na klucz partycji nie mogą przekraczać 20 GB, jak we wszystkich innych interfejsach API.

Narzędzia

Usługa Azure Cosmos DB dla systemu Apache Cassandra to zarządzana platforma usług. Platforma nie wymaga żadnych obciążeń związanych z zarządzaniem ani narzędziami, takimi jak moduł odśmiecania pamięci, maszyna wirtualna Java (JVM) i narzędzie nodetool do zarządzania klastrem. Obsługiwane są narzędzia, takie jak cqlsh, które korzystają ze zgodności binarnych CQLv4.

  • Eksplorator danych, metryki, diagnostyka dzienników, program PowerShell i interfejs wiersza polecenia w witrynie Azure Portal to inne obsługiwane mechanizmy zarządzania kontem.

Powłoka CQL

Możesz nawiązać połączenie z interfejsem API dla bazy danych Cassandra w usłudze Azure Cosmos DB przy użyciu protokołu CQLSH zainstalowanego na komputerze lokalnym. Jest on dostarczany z systemem Apache Cassandra 3.11 i działa poza tym, ustawiając zmienne środowiskowe. Poniższe sekcje zawierają instrukcje dotyczące instalowania, konfigurowania i nawiązywania połączenia z interfejsem API dla usługi Cassandra w usłudze Azure Cosmos DB w systemie Windows lub Linux przy użyciu protokołu CQLSH.

Ostrzeżenie

Połączenie do usługi Azure Cosmos DB dla systemu Apache Cassandra nie będą działać z wersją DataStax Enterprise (DSE) ani Cassandra 4.0 w wersji CQLSH. Upewnij się, że używasz tylko wersji 3.11 typu open source wersji Apache Cassandra języka CQLSH podczas nawiązywania połączenia z interfejsem API dla bazy danych Cassandra.

Windows:

  1. Instalowanie języka Python 3
  2. Instalowanie narzędzia PIP
    1. Przed zainstalowaniem narzędzia PIP pobierz plik get-pip.py.
    2. Uruchom wiersz polecenia, jeśli jeszcze nie jest otwarty. Aby to zrobić, otwórz pasek wyszukiwania systemu Windows, wpisz cmd i wybierz ikonę.
    3. Następnie uruchom następujące polecenie, aby pobrać plik get-pip.py:
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. Instalowanie narzędzia PIP w systemie Windows
python get-pip.py
  1. Sprawdź instalację narzędzia PIP (poszukaj komunikatu z kroku 3, aby potwierdzić, w którym folderze zainstalowano narzędzie PIP, a następnie przejdź do tego folderu i uruchom pomoc narzędzia pip polecenia).
  2. Instalowanie protokołu CQLSH przy użyciu narzędzia PIP
pip3 install cqlsh==5.0.3
  1. Instalowanie języka Python 2
  2. Uruchom protokół CQLSH przy użyciu mechanizmu uwierzytelniania.

Uwaga

Należy ustawić zmienne środowiskowe, aby wskazywały folder Python 2.

Zainstaluj w systemach 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

Połączenie z systemami 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

Połączenie za pomocą platformy 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

Wszystkie operacje CRUD wykonywane za pośrednictwem zestawu SDK zgodnego z językiem CQL w wersji 4 zwracają dodatkowe informacje o błędach i wykorzystanych jednostkach żądań. Polecenia DELETE i UPDATE powinny być obsługiwane z uwzględnieniem ładu zasobów, aby zapewnić najbardziej efektywne wykorzystanie aprowizowanej przepływności.

  • Uwaga: jeśli wartość gc_grace_seconds została określona, musi być równa zero.
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}"); 
        } 

Mapowanie spójności

Usługa Azure Cosmos DB dla bazy danych Apache Cassandra zapewnia wybór spójności dla operacji odczytu. Mapowanie spójności zostało szczegółowo opisane tutaj.

Zarządzanie uprawnieniami i rolami

Usługa Azure Cosmos DB obsługuje kontrolę dostępu opartą na rolach (RBAC) platformy Azure do aprowizowania, rotacji kluczy, wyświetlania metryk oraz haseł/kluczy tylko do odczytu i odczytu, które można uzyskać za pośrednictwem witryny Azure Portal. Usługa Azure Cosmos DB nie obsługuje ról dla działań CRUD.

Opcje przestrzeni kluczy i tabeli

Opcje nazwy regionu, klasy, replication_factor i centrum danych w poleceniu "Utwórz przestrzeń kluczy" są obecnie ignorowane. System używa podstawowej metody replikacji dystrybucji globalnej usługi Azure Cosmos DB w celu dodania regionów. Jeśli potrzebujesz obecności danych między regionami, możesz ją włączyć na poziomie konta przy użyciu programu PowerShell, interfejsu wiersza polecenia lub portalu, aby dowiedzieć się więcej, zobacz artykuł Dotyczący dodawania regionów . Durable_writes nie można wyłączyć, ponieważ usługa Azure Cosmos DB zapewnia trwałość każdego zapisu. W każdym regionie usługa Azure Cosmos DB replikuje dane w zestawie replik składającym się z czterech replik i nie można zmodyfikować tej konfiguracji zestawu replik.

Wszystkie opcje są ignorowane podczas tworzenia tabeli, z wyjątkiem gc_grace_seconds, które powinny być ustawione na zero. Przestrzeń kluczy i tabela mają dodatkową opcję o nazwie "cosmosdb_provisioned_throughput" z minimalną wartością 400 RU/s. Przepływność usługi Keyspace umożliwia udostępnianie przepływności między wieloma tabelami i jest przydatna w scenariuszach, w których wszystkie tabele nie korzystają z aprowizowanej przepływności. Polecenie Alter Table umożliwia zmianę aprowizowanej przepływności w różnych regionach.

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 ;

Indeks pomocniczy

Interfejs API dla rozwiązania Cassandra obsługuje indeksy pomocnicze dla wszystkich typów danych z wyjątkiem zamrożonych typów kolekcji, dziesiętnych i typów wariantów.

Użycie zasad ponawiania próby połączenia bazy danych Cassandra

Azure Cosmos DB to system zarządzany przez zasoby. W danej sekundzie można wykonać pewną liczbę operacji na podstawie jednostek żądania używanych przez operacje. Jeśli aplikacja przekroczy ten limit w danej sekundzie, żądania są ograniczone do szybkości, a wyjątki zostaną zgłoszone. Interfejs API dla bazy danych Cassandra w usłudze Azure Cosmos DB tłumaczy te wyjątki na przeciążone błędy w natywnym protokole Cassandra. Aby upewnić się, że aplikacja może przechwytywać i ponawiać żądania w przypadku ograniczenia szybkości, udostępniane są rozszerzenia platformy Spark i języka Java . Zobacz również przykłady kodu Java dla sterowników Datastax w wersji 3 i 4 podczas nawiązywania połączenia z interfejsem API dla bazy danych Cassandra w usłudze Azure Cosmos DB. Jeśli używasz innych zestawów SDK do uzyskiwania dostępu do interfejsu API dla bazy danych Cassandra w usłudze Azure Cosmos DB, utwórz zasady ponawiania prób w celu ponawiania prób dla tych wyjątków. Alternatywnie włącz ponawianie prób po stronie serwera dla interfejsu API dla bazy danych Cassandra.

Następne kroki