a sírkövek típusai
a sírkövek számos módon hozhatók létre, és elengedhetetlen, hogy megérts bizonyos buktatókat, amelyek a sírkövek implicit létrehozásához vezethetnek, amelyek rejtve maradnak a programozó szempontjából, amíg a klasztert érintő elfogadható problémaként nem jelennek meg. Ezért fontos megérteni a Cassandra – ban létrehozható sírkövek típusait:
cella sírkövek
az Insert utasítások sírköveket hozhatnak létre, ha egy bizonyos cellaérték null értékként van beállítva a lekérdezésben. Ez akkor fordulhat elő, ha az adatbázis-absztrakciós réteg vagy egy ORM keretrendszer objektumszintű ábrázolással absztraktálja a lekérdezést, és a NULL értékek implicit módon leküldésre kerülnek a tényleges lekérdezésben a Cassandra-nak. Vegyük például a következő CQL lekérdezést:
INSERT INTO item_price ( store_number, item_id, price, replacements, product_code ) VALUES ( 'CA104', 'item104', 2.50, null , 'p104');
ez létrehozna egy cellás sírkövet a ca104 store_number rekord csere oszlopához.
most fontolja meg a következő törlési lekérdezést:
DELETE replacements FROM item_price WHERE store_number = 'CA104';
ez egy cellás sírkövet is létrehozna a megfelelő rekordhoz.
sor sírkövek
egy sort azonosító törlési lekérdezés eredményeként egy egész sor sírkövként van megjelölve. Például:
DELETE FROM item_price WHERE store_number = 'CA101' and item_id='item101' and price = 1.80;
Sstabledump mutatna deletion_info a sor szintjén a fürtözés oszlopok a partíción belül.
,
"position" : 0
},
"rows" : ,
"deletion_info" : {
"marked_deleted" : "2020-07-05T07:26:52.233374Z",
"local_delete_time" : "2020-07-05T07:26:52Z"
},
"cells" :
}
]
}
]
a nagyszámú sor sírkövek jele lehet egy gyenge adatmodell, amelyben az alkalmazás gyakran törli a rekordokat egy táblából. Ilyen esetekben fontolja meg az adatmodell felülvizsgálatát és a táblázatok újratervezését a lekérdezési minták és a kardinalitás alapján.
Range sírkövek
sorok teljes tartományának törlése a WHERE záradék használatával egy partíciókulccsal és egy fürtöző oszlop által képviselt tartomány használatával. Például:
DELETE FROM item_price WHERE store_number = 'CA101' AND item_id='item101' AND price > 2.0;
SSTabledump mutatna,
,"position" : 0
},
"rows" : ,
"deletion_info" : { "marked_deleted" : "2020-07-05T06:53:50.671654Z", "local_delete_time" : "2020-07-05T06:53:50Z" }
}
},
{
"type" : "range_tombstone_bound",
"end" : {
"type" : "inclusive",
"clustering" : ,
"deletion_info" : { "marked_deleted" : "2020-07-05T06:53:50.671654Z", "local_delete_time" : "2020-07-05T06:53:50Z" }
}
}
]
}
}}
az SSTabledump a range_tombstone_bound típusú range_tombstone_bound típusú range_tombstone_bound típusú range_tombstone_bound típusú range_tombstone_bound típusú range_tombstone_bound típusú range_tombstone_bound típusú range_tombstoning billentyűt a partíción belül tombstoned sorok tartományának jelölésére használta. A tartomány sírkövei akkor is létrejönnek, amikor egy teljes gyűjteményt beszúrási vagy frissítési lekérdezéssel helyettesítenek. Mindig ajánlott a gyűjtemény egyes elemeinek cseréje, nem pedig a teljes gyűjtemény cseréje.
partíció sírkövek
az ilyen típusú sírkövek akkor jönnek létre, amikor egy delete lekérdezést csak a WHERE záradék partíciós kulcsával indítanak. Például:
DELETE FROM item_price WHERE store_number = 'CA102';
ahogy kétségtelenül sejtette, ez törli a teljes ca102 partíciót, az sstabledump pedig a deletion_info attribútumot jeleníti meg a partíciónak a marked_deleted időbélyeggel.
,
"position" : 0,
"deletion_info" : {
"marked_deleted" : "2020-07-05T22:11:48.367057Z",
"local_delete_time" : "2020-07-05T22:11:48Z"
}
},
"rows" :
}
]
TTL sírkövek
ezek olyan sírkövek, amelyek automatikusan létrejönnek, amikor egy adott sor vagy cella élettartama lejár. Ezek azonban másképp vannak jelölve, mint a normál sírkövek.
a következő insert utasítás 20 másodperc után létrehoz egy TTL sírkövet.
INSERT INTO item_price ( store_number, item_id, price, replacements, product_code) VALUES ( 'CA103', 'item103', 3.0, {'item101-r', 'item101'}, 'p103') using TTL 20;
az sstabledump megmutatja:
,
"position" : 78
},
"rows" : ,
"liveness_info" : { "tstamp" : "2020-07-05T06:47:51.458099Z", "ttl" : 20, "expires_at" : "2020-07-05T06:48:11Z", "expired" : true },
"cells" : }
]
}
]
}
]
Összegzés
- a Cassandra a törlési lekérdezést belsőleg frissítési műveletként kezeli, amely hozzáad egy tombstone nevű jelölőt a törölni kívánt adatokhoz.
- a sírkövek lejárati idővel konfigurálhatók (gc_grace_seconds), és a tömörítési folyamat során tisztíthatók.
- sstabledump segédprogram lehet használni, hogy megtekinthesse a tartalmát egy sstable fájl egy ember által olvasható formátumban.
- kerülje a Null értékek írását a táblákba, mivel sírköveket hozhat létre. Vigyázzon, miközben az ORM réteg által elvont lekérdezéseket készít.
- tartomány sírkövek előnyben részesítik a cella vagy sor sírkövek, mert csak tárolja a tartomány határait megtakarítás lemezterület.
- kerülje a gyűjtemény teljes elemeinek, például a készlet, lista, térkép beillesztési és frissítési lekérdezésekkel való helyettesítését, mivel ez tartomány sírköveket hozhat létre.