Azure Cosmos DB voor Apache Cassandra Lightweight-transacties met voorwaarden
VAN TOEPASSING OP: Cassandra
Apache Cassandra omdat de meeste NoSQL-databaseplatforms voorrang geven op beschikbaarheid en partitietolerantie ten opzichte van consistentie, omdat acid-transacties niet worden ondersteund zoals in relationele databases. Zie Azure Cosmos DB voor Apache Cassandra-consistentieniveaus voor meer informatie over hoe consistentieniveau werkt met LWT. Cassandra ondersteunt lichtgewicht transacties (LWT) die grenzen aan ACID. Het helpt bij het uitvoeren van een leesbewerking voordat u schrijft, voor bewerkingen waarvoor het invoegen of bijwerken van gegevens uniek moet zijn.
LWT-ondersteuning in Azure Cosmos DB voor Apache Cassandra
Als u LWT wilt gebruiken in Azure Cosmos DB voor Apache Cassandra, raden we u aan de volgende vlaggen in te stellen op het niveau van de tabel maken.
with cosmosdb_cell_level_timestamp=true and cosmosdb_cell_level_timestamp_tombstones=true and cosmosdb_cell_level_timetolive=true
Mogelijk ondervindt u verminderde prestaties bij invoegingen in volledige rijen in vergelijking met het niet gebruiken van de vlaggen.
Notitie
LWT's worden niet ondersteund voor schrijfscenario's voor meerdere regio's.
LWT waarvoor vlaggen zijn ingeschakeld
CREATE KEYSPACE IF NOT EXISTS lwttesting WITH REPLICATION= {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor' : '1'};
CREATE TABLE IF NOT EXISTS lwttesting.users (
name text,
userID int,
address text,
phoneCode int,
vendorName text STATIC,
PRIMARY KEY ((name), userID)) with cosmosdb_cell_level_timestamp=true and cosmosdb_cell_level_timestamp_tombstones=true and cosmosdb_cell_level_timetolive=true;
Deze query hieronder retourneert TRUE.
INSERT INTO lwttesting.users(name, userID, phoneCode, vendorName)
VALUES('Sara', 103, 832, 'vendor21') IF NOT EXISTS;
Beperkingen
Er zijn enkele bekende beperkingen waarbij vlag is ingeschakeld.
Als er een rij in de tabel is ingevoegd, retourneert een poging om een statische rij in te voegen ONWAAR.
INSERT INTO lwttesting.users (userID, vendorName) VALUES (104, 'staticVendor') IF NOT EXISTS;
De bovenstaande query retourneert momenteel FALSE, maar moet WAAR zijn.
Als u een andere rij probeert in te voegen nadat de TTL is verlopen, wordt onwaar geretourneerd.
CREATE TABLE IF NOT EXISTS lwttesting.customers ( customer text PRIMARY KEY, user text, entry timestamp) with cosmosdb_cell_level_timestamp=true and cosmosdb_cell_level_timestamp_tombstones=true and cosmosdb_cell_level_timetolive=true; INSERT INTO lwttesting.customers (customer, user, entry) VALUES ('vendor', 'Sara', '2023-10-10 15:00:00.000000+0000') IF NOT EXISTS USING TTL 30;
Deze query retourneert TRUE. Als u echter een andere invoeging probeert uit te voeren, wordt FALSE geretourneerd.
LWT met uitgeschakelde vlaggen
Rij verwijderen gecombineerd met IF-voorwaarde wordt niet ondersteund als de vlaggen niet zijn ingeschakeld.
CREATE TABLE IF NOT EXISTS lwttesting.vendor_users (
name text,
userID int,
areaCode int,
vendor text STATIC,
PRIMARY KEY ((userID), name)
);
DELETE FROM lwttesting.vendor_users
WHERE userID =103 AND name = 'Sara'
IF areaCode = 832;
Een foutbericht: Voorwaardelijk verwijderen van een hele rij wordt niet ondersteund.
LWT met vlaggen ingeschakeld of uitgeschakeld
Elke aanvraag met toewijzing en voorwaardecombinatie van een statische en reguliere kolom wordt niet ondersteund met de IF-voorwaarde. Deze query retourneert geen foutbericht omdat beide kolommen normaal zijn.
DELETE areaCode
FROM lwttesting.vendor_users
WHERE name= 'Sara'
AND userID = 103 IF areaCode = 832;
De onderstaande query retourneert echter een foutbericht Conditions and assignments containing combination of Static and Regular columns are not supported.
DELETE areaCode
FROM lwttesting.vendor_users
WHERE name= 'Sara' AND userID = 103 IF vendor = 'vendor21';
Volgende stappen
In deze zelfstudie hebt u geleerd over Lightweight Transaction werkt in Azure Cosmos DB voor Apache Cassandra. U kunt doorgaan naar het volgende artikel: