Von Azure Cosmos DB for Apache Cassandra unterstützte Apache Cassandra-Features
GILT FÜR: Cassandra
Azure Cosmos DB ist ein global verteilter Datenbankdienst von Microsoft mit mehreren Modellen. Sie können mit Azure Cosmos DB for Apache Cassandra über mit Cassandra Query Language (CQL) Binary Protocol v4 Wire Protocol konforme Open-Source-Cassandra-Clienttreiber kommunizieren.
Durch Verwendung von Azure Cosmos DB for Apache Cassandra können Sie die Vorteile der Apache Cassandra-APIs sowie die von Azure Cosmos DB gebotenen Unternehmensfunktionen nutzen. Die Unternehmensfunktionen umfassen globale Verteilung, automatische Partitionierung mit Aufskalieren, Gewährleistung der Verfügbarkeit und Latenz, Verschlüsselung bei REST, Sicherungen und vieles mehr.
Cassandra-Protokoll
Azure Cosmos DB for Apache Cassandra ist mit der CQL-API (Cassandra Query Language), Version 3.11 kompatibel und mit Version 2.x abwärtskompatibel. Die unterstützten CQL-Befehle, Tools, Einschränkungen und Ausnahmen sind nachstehend aufgeführt. Alle Clienttreiber, die diese Protokolle verstehen, sollten auch mit Azure Cosmos DB for Apache Cassandra eine Verbindung herstellen können.
Azure Managed Instance for Apache Cassandra
Für einige Kunden kann die Anpassung an die API für Cassandra aufgrund von Verhaltens- und/oder Konfigurationsunterschieden eine Herausforderung darstellen, insbesondere bei Migrationen per Lift & Shift. Wenn ein Feature, das für Ihre Anwendung wichtig ist, unten als nicht unterstützt aufgeführt wird, erwägen Sie die Verwendung von Azure Managed Instance for Apache Cassandra. Es handelt sich dabei um einen Azure-Erstanbieterdienst zum Hosten und Verwalten reiner Open-Source-Apache Cassandra-Cluster mit 100 % Kompatibilität.
Cassandra-Treiber
Die folgenden Versionen von Cassandra-Treibern werden von Azure Cosmos DB for Apache Cassandra unterstützt:
CQL-Datentypen
Azure Cosmos DB for Apache Cassandra unterstützt die folgenden CQL-Datentypen:
type | Unterstützt |
---|---|
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 |
„Static“ wird für die Datentypdeklaration unterstützt.
CQL-Funktionen
Azure Cosmos DB for Apache Cassandra unterstützt die folgenden CQL-Funktionen:
Get-Help | Unterstützt |
---|---|
Token * |
Ja |
ttl *** |
Ja |
writetime *** |
Ja |
cast ** |
Ja |
Hinweis
* Die API für Cassandra unterstützt Token als Projektion/Selektor. Außerdem ist die Verwendung von token(pk) nur auf der linken Seite einer WHERE-Klausel zulässig. Beispiel: WHERE token(pk) > 1024
wird unterstützt, aber WHERE token(pk) > token(100)
wird nicht unterstützt.
** Die Funktion cast()
kann in der API für Cassandra nicht geschachtelt werden. Beispiel: SELECT cast(count as double) FROM myTable
wird unterstützt, aber SELECT avg(cast(count as double)) FROM myTable
wird nicht unterstützt.
*** Benutzerdefinierte Zeitstempel und TTL, die mit der Option USING
angegeben werden, werden auf Zeilenebene (und nicht pro Zelle) angewendet.
Aggregatfunktionen:
Get-Help | Unterstützt |
---|---|
avg |
Ja |
count |
Ja |
min |
Ja |
max |
Ja |
sum |
Ja |
Hinweis
Aggregatfunktionen können für reguläre Spalten verwendet werden. Aggregate für Clusteringspalten werden jedoch nicht unterstützt.
Blob-Konvertierungsfunktionen:
Get-Help | Unterstützt |
---|---|
typeAsBlob(value) |
Ja |
blobAsType(value) |
Ja |
UUID- und timeuuid-Funktionen:
Get-Help | Unterstützt |
---|---|
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-Befehle
Azure Cosmos DB unterstützt für API für Cassandra-Konten die folgenden Datenbankbefehle.
Get-Help | Unterstützt |
---|---|
ALLOW FILTERING |
Ja |
ALTER KEYSPACE |
Nicht verfügbar (PaaS-Dienst, Replikation wird intern verwaltet) |
ALTER MATERIALIZED VIEW |
Ja |
ALTER ROLE |
Keine |
ALTER TABLE |
Ja |
ALTER TYPE |
Nr. |
ALTER USER |
Nein |
BATCH |
Ja (Nur nicht protokollierter Batch) |
COMPACT STORAGE |
Nicht verfügbar (PaaS-Dienst) |
CREATE AGGREGATE |
Nein |
CREATE CUSTOM INDEX (SASI) |
Nein |
CREATE INDEX |
Ja (einschließlich benannter Indizes, die vollständige FROZEN-Sammlung wird jedoch nicht unterstützt) |
CREATE FUNCTION |
Nein |
CREATE KEYSPACE (Replikationseinstellungen ignoriert) |
Ja |
CREATE MATERIALIZED VIEW |
Ja |
CREATE TABLE |
Ja |
CREATE TRIGGER |
Keine |
CREATE TYPE |
Ja |
CREATE ROLE |
Nein |
CREATE USER (in nativer Apache Cassandra-Version veraltet) |
Nein |
DELETE |
Ja |
DISTINCT |
Nr. |
DROP AGGREGATE |
Nr. |
DROP FUNCTION |
Nein |
DROP INDEX |
Ja |
DROP KEYSPACE |
Ja |
DROP MATERIALIZED VIEW |
Ja |
DROP ROLE |
Keine |
DROP TABLE |
Ja |
DROP TRIGGER |
Keine |
DROP TYPE |
Ja |
DROP USER (in nativer Apache Cassandra-Version veraltet) |
Nein |
GRANT |
Nein |
INSERT |
Ja |
LIST PERMISSIONS |
Nr. |
LIST ROLES |
Nein |
LIST USERS (in nativer Apache Cassandra-Version veraltet) |
Nein |
REVOKE |
Nein |
SELECT |
Ja |
UPDATE |
Ja |
TRUNCATE |
Ja |
USE |
Ja |
Einfache Transaktionen (Lightweight Transactions, LWT)
Komponente | Unterstützt |
---|---|
DELETE IF EXISTS |
Ja |
DELETE conditions |
Ja |
INSERT IF NOT EXISTS |
Ja |
UPDATE IF EXISTS |
Ja |
UPDATE IF NOT EXISTS |
Ja |
UPDATE conditions |
Ja |
Hinweis
Einfache Transaktionen werden derzeit nicht für Konten unterstützt, für die Schreibvorgänge in mehreren Regionen aktiviert sind.
CQL-Shellbefehle
Azure Cosmos DB unterstützt für API für Cassandra-Konten die folgenden Datenbankbefehle.
Get-Help | Unterstützt |
---|---|
CAPTURE |
Ja |
CLEAR |
Ja |
CONSISTENCY * |
– |
COPY |
Nein |
DESCRIBE |
Ja |
cqlshExpand |
Keine |
EXIT |
Ja |
LOGIN |
Nicht verfügbar (da die CQL-Funktion USER nicht unterstützt wird, ist LOGIN redundant) |
PAGING |
Ja |
SERIAL CONSISTENCY * |
– |
SHOW |
Ja |
SOURCE |
Ja |
TRACING |
Nicht verfügbar (die API für Cassandra basiert auf Azure Cosmos DB: Verwenden Sie für die Problembehandlung die Diagnoseprotokollierung.) |
Hinweis
In Bezug auf die Konsistenz gilt in Azure Cosmos DB eine andere Funktionsweise. Weitere Informationen finden Sie hier.
JSON-Unterstützung
Get-Help | Unterstützt |
---|---|
SELECT JSON |
Ja |
INSERT JSON |
Ja |
fromJson() |
Nr. |
toJson() |
Nein |
Grenzwerte für die API für Cassandra
Azure Cosmos DB for Apache Cassandra unterliegt keinen Grenzwerten hinsichtlich der Größe von in einer Tabelle gespeicherten Daten. Es können Hunderte von Terabytes oder Petabytes von Daten gespeichert werden. Gleichzeitig wird sichergestellt, dass die Grenzwerte für Partitionsschlüssel berücksichtigt werden. In ähnlicher Weise gibt es bei jedem Entitäts- oder Zeilenäquivalent keine Einschränkungen hinsichtlich der Anzahl von Spalten. Die Gesamtgröße der Entität sollte jedoch 2 MB nicht überschreiten. Die Datenmenge für jeden Partitionsschlüssel darf wie bei allen anderen APIs auch 20 GB nicht überschreiten.
Tools
Azure Cosmos DB for Apache Cassandra ist eine verwaltete Dienstplattform. Die Plattform erfordert keinen Verwaltungsaufwand oder Dienstprogramme wie Garbage Collector, Java Virtual Machine (JVM) und nodetool zur Verwaltung des Clusters. Sie unterstützt Tools wie cqlsh, das die binäre CQLv4-Kompatibilität nutzt.
- Der Daten-Explorer des Azure-Portals, Metriken, Protokolldiagnose, PowerShell und CLI sind weitere unterstützte Mechanismen zur Verwaltung des Kontos.
CQL Shell
Sie können auch in Azure Cosmos DB eine Verbindung mit der API für Cassandra herstellen, indem Sie die auf einem lokalen Computer installierte CQLSH-Instanz verwenden. Sie enthält Apache Cassandra 3.11 und kann durch Festlegen der Umgebungsvariablen sofort verwendet werden. In den folgenden Abschnitten finden Sie Anleitungen zur Installation, Konfiguration und Verbindungsherstellung mit der API für Cassandra in Azure Cosmos DB unter Windows oder Linux mit CQLSH.
Warnung
Verbindungen mit Azure Cosmos DB for Apache Cassandra sind mit DSE- (DataStax Enterprise) oder Cassandra 4.0-Versionen von CQLSH nicht möglich. Achten Sie darauf, nur die Open-Source-Version 3.11 von CQLSH für Apache Cassandra zu verwenden, wenn Sie eine Verbindung mit der API für Cassandra herstellen.
Windows:
- Installieren Sie Python 3.
- Installieren Sie PIP.
- Laden Sie vor der Installation von PIP die Datei „get-pip.py“ herunter.
- Starten Sie eine Eingabeaufforderung, wenn noch keine geöffnet ist. Öffnen Sie dazu die Windows-Suchleiste, geben Sie „cmd“ ein, und wählen Sie das Symbol aus.
- Führen Sie anschließend den folgenden Befehl aus, um die Datei „get-pip.py“ herunterzuladen.
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- Installieren Sie PIP unter Windows.
python get-pip.py
- Überprüfen Sie die PIP-Installation. (Suchen Sie nach einer Meldung aus Schritt 3, um zu ermitteln, in welchem Ordner PIP installiert wurde. Navigieren Sie dann zu diesem Ordner, und führen Sie den Befehl „pip help“ aus.)
- Installieren Sie CQLSH mithilfe von PIP
pip3 install cqlsh==5.0.3
- Installieren Sie Python 2.
- Führen Sie CQLSH mithilfe des Authentifizierungsmechanismus aus.
Hinweis
Sie müssen die Umgebungsvariablen so festlegen, dass sie auf den Python 2-Ordner verweisen.
Installation unter 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
Verbinden mit 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
Verbinden mit 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
Alle CRUD-Vorgänge geben bei Ausführung über ein CQL v4-kompatibles SDK zusätzliche Informationen zu Fehlern und beanspruchten Anforderungseinheiten zurück. Bei der Verarbeitung der Befehle DELETE und UPDATE sollte die Ressourcenkontrolle in Erwägung gezogen werden, um die effizienteste Verwendung des bereitgestellten Durchsatzes sicherzustellen.
- Hinweis: Der Wert „gc_grace_seconds“ muss Null sein, wenn er angegeben wird.
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}");
}
Konsistenzzuordnung
Azure Cosmos DB for Apache Cassandra ermöglicht die Wahl der Konsistenz bei Lesevorgängen. Ausführliche Informationen zur Konsistenzzuordnung finden Sie hier.
Berechtigungs- und Rollenverwaltung
Azure Cosmos DB unterstützt die rollenbasierte Zugriffssteuerung von Azure (Azure RBAC) für die Bereitstellung, Rotation von Schlüsseln, Anzeige von Metriken sowie Lese-/Schreibkennwörter bzw. Lese-/Schreibschlüssel und Schreibschutzkennwörter/-schlüssel, die über das Azure-Portal abgerufen werden können. Azure Cosmos DB unterstützt keine Rollen für CRUD-Aktivitäten.
Keyspace- und Tabellenoptionen
Die Optionen für Regionsname, Klasse, Replikationsfaktor und Rechenzentrum im Befehl „CREATE KEYSPACE“ werden derzeit ignoriert. Das System verwendet die Replikationsmethode zur globalen Datenverteilung der zugrunde liegenden Azure Cosmos DB-Instanz, um die Regionen hinzuzufügen. Wenn die Daten regionsübergreifend vorhanden sein müssen, können Sie dies mithilfe von PowerShell, per CLI oder über das Portal auf der Kontoebene aktivieren. Weitere Informationen finden Sie unter Hinzufügen/Entfernen von Regionen für Ihr Datenbankkonto. „Durable_writes“ kann nicht deaktiviert werden, da Azure Cosmos DB sicherstellt, dass jeder Schreibvorgang dauerhaft ist. In jeder Region repliziert Azure Cosmos DB die Daten innerhalb der gesamten Replikatgruppe, die sich aus vier Replikaten zusammensetzt. Diese Konfiguration der Replikatgruppe kann nicht geändert werden.
Beim Erstellen der Tabelle werden mit Ausnahme von „gc_grace_seconds“ alle Optionen ignoriert, und „gc_grace_seconds“ muss auf Null festgelegt werden. Für den Keyspace und die Tabelle steht eine zusätzliche Option namens „cosmosdb_provisioned_throughput“ mit einem Mindestwert von 400 RU/s zur Verfügung. Der Keyspacedurchsatz ermöglicht die tabellenübergreifende gemeinsame Nutzung des Durchsatzes und ist hilfreich in Szenarien, in denen alle Tabellen nicht den bereitgestellten Durchsatz beanspruchen. Mit dem Befehl „ALTER TABLE“ kann der bereitgestellte Durchsatz regionsübergreifend geändert werden.
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ärer Index
Die API für Cassandra unterstützt sekundäre Indizes für alle Datentypen außer fixierten Sammlungstypen, Dezimal- und Variant-Typen.
Verwendung der Cassandra-Richtlinie für die Verbindungswiederholung
Azure Cosmos DB ist ein ressourcengesteuertes System. Das bedeutet, dass pro Sekunde eine bestimmte Anzahl von Vorgängen ausgeführt werden kann – abhängig von den Anforderungseinheiten, die durch die Vorgänge beansprucht werden. Überschreitet eine Anwendung dieses Limit in einer Sekunde, wird die Anforderungsrate begrenzt, und Ausnahmen werden ausgelöst. Diese Ausnahmen werden von der API für Cassandra in Azure Cosmos DB in Überladungsfehler im nativen Cassandra-Protokoll übersetzt. Um sicherzustellen, dass Ihre Anwendung im Falle einer Ratenbegrenzung Anforderungen abfangen und wiederholen kann, werden die Erweiterungen für Spark und Java bereitgestellt. Sehen Sie sich auch Java-Codebeispiele für Datastax-Treiber der Version 3 und Version 4 an, wenn Sie eine Verbindung mit der API für Cassandra in Azure Cosmos DB herstellen. Wenn Sie über andere SDKs auf die API für Cassandra in Azure Cosmos DB zugreifen, müssen Sie eine Verbindungsrichtlinie erstellen, um für diese Ausnahmen eine Wiederholung durchzuführen. Alternativ können Sie serverseitige Wiederholungen für die API für Cassandra aktivieren.
Nächste Schritte
- Erste Schritte zum Erstellen eines API für Cassandra-Kontos, einer Datenbank und einer Tabelle mithilfe einer Java-Anwendung