Delen via


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: