Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: Kassandra
Apache Cassandra som de flesta NoSQL-databasplattformar ger företräde åt tillgänglighet och partitionstolerans framför konsekvens, eftersom det inte stöder ACID-transaktioner som i relationsdatabasen. Mer information om hur konsekvensnivå fungerar med LWT finns i Konsekvensnivåer för Azure Cosmos DB för Apache Cassandra. Cassandra har stöd för lätta transaktioner (LWT) som gränsar till ACID. Det hjälper till att utföra en läsning före skrivning, för åtgärder som kräver att data infogas eller uppdateras måste vara unika.
LWT-stöd i Azure Cosmos DB för Apache Cassandra
Om du vill använda LWT i Azure Cosmos DB för Apache Cassandra rekommenderar vi att följande flaggor anges på nivån skapa tabell.
with cosmosdb_cell_level_timestamp=true and cosmosdb_cell_level_timestamp_tombstones=true and cosmosdb_cell_level_timetolive=true
Du kan få sämre prestanda vid helradsinfogningar jämfört med att inte använda flaggorna.
Kommentar
LWT stöds inte för skrivscenarier i flera regioner.
LWT med flaggor aktiverade
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;
Den här frågan nedan returnerar TRUE.
INSERT INTO lwttesting.users(name, userID, phoneCode, vendorName)
VALUES('Sara', 103, 832, 'vendor21') IF NOT EXISTS;
Begränsningar
Det finns några kända begränsningar med flaggan aktiverad.
Om en rad har infogats i tabellen returnerar ett försök att infoga en statisk rad FALSE.
INSERT INTO lwttesting.users (userID, vendorName) VALUES (104, 'staticVendor') IF NOT EXISTS;
Ovanstående fråga returnerar för närvarande FALSE men bör vara TRUE.
Om du försöker infoga en annan rad när TTL har upphört att gälla returneras false.
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;
Den här frågan returnerar TRUE. Men om du försöker använda en annan infogning returneras FALSE.
LWT med flaggor inaktiverade
Radborttagning kombinerat med IF-villkor stöds inte om flaggorna inte är aktiverade.
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;
Ett felmeddelande: Villkorlig borttagning av en hel rad stöds inte.
LWT med flaggor aktiverade eller inaktiverade
Alla begäranden som innehåller tilldelning och villkorskombination av en statisk och vanlig kolumn stöds inte med IF-villkoret. Den här frågan returnerar inte något felmeddelande eftersom båda kolumnerna är vanliga.
DELETE areaCode
FROM lwttesting.vendor_users
WHERE name= 'Sara'
AND userID = 103 IF areaCode = 832;
Frågan nedan returnerar dock ett felmeddelande 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';
Nästa steg
I den här självstudien får du lära dig mer om lightweight transaction works i Azure Cosmos DB för Apache Cassandra. Du kan gå vidare till nästa artikel: