typy náhrobků
náhrobky mohou být vytvořeny mnoha způsoby a je důležité, abyste pochopili určitá úskalí, která mohou vést k implicitnímu vytvoření náhrobků, které zůstanou skryté z pohledu programátora, dokud se neobjeví jako věrohodný problém ovlivňující váš cluster. Proto je důležité pochopit typy náhrobků, které mohou být vytvořeny v Cassandře:
Cell tombstones
Insert příkazy mohou vytvářet náhrobky, když je určitá hodnota buňky nastavena jako null v dotazu. K tomu může dojít, když abstrakční vrstva databáze nebo rámec ORM abstrahuje dotaz s reprezentací na úrovni objektu a hodnoty null se implicitně odešlou ve skutečném dotazu Cassandře. Zvažte například následující dotaz CQL:
INSERT INTO item_price ( store_number, item_id, price, replacements, product_code ) VALUES ( 'CA104', 'item104', 2.50, null , 'p104');
to by vytvořilo buněčný náhrobek pro sloupec nahrazení záznamu S store_number CA104.
nyní zvažte následující smazat dotaz:
DELETE replacements FROM item_price WHERE store_number = 'CA104';
to by také vytvořilo buněčný náhrobek pro odpovídající záznam.
Row tombstones
celý řádek je označen jako náhrobek v důsledku dotazu na odstranění, který identifikuje řádek. Například:
DELETE FROM item_price WHERE store_number = 'CA101' and item_id='item101' and price = 1.80;
Sstabledump by zobrazoval deletion_info na úrovni řádku pro sloupce Shlukování v oddílu.
,
"position" : 0
},
"rows" : ,
"deletion_info" : {
"marked_deleted" : "2020-07-05T07:26:52.233374Z",
"local_delete_time" : "2020-07-05T07:26:52Z"
},
"cells" :
}
]
}
]
velké množství řádkových náhrobků může být známkou špatného datového modelu, kdy vaše aplikace často mazá záznamy z tabulky. V takových případech zvažte přehodnocení datového modelu a přepracování tabulek na základě vzorů dotazů a kardinality.
rozsah náhrobků
odstranění celého rozsahu řádků pomocí klauzule WHERE s klíčem oddílu a rozsahem reprezentovaným sloupcem shlukování. Například:
DELETE FROM item_price WHERE store_number = 'CA101' AND item_id='item101' AND price > 2.0;
SSTabledump by ukázal,
,"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" }
}
}
]
}
}}
Sstabledump by tisk rozsah náhrobky s typem range_tombstone_bound s začátek a konec clustering klíč používaný k označení rozsah řádků, které byly náhrobky v rámci oddílu. Náhrobky rozsahu se také vytvářejí, když je celá kolekce nahrazena dotazem na vložení nebo aktualizaci. Vždy se doporučuje nahradit konkrétní prvky kolekce spíše než nahradit celou kolekci samotnou.
Partition tombstones
náhrobky tohoto typu jsou vytvořeny, když je vypálen delete dotaz pouze pomocí klíče partition v klauzuli WHERE. Například:
DELETE FROM item_price WHERE store_number = 'CA102';
jak jste nepochybně uhodli, to by odstranilo celý oddíl CA102 a sstabledump by ukázal oddílu atribut deletion_info s časovým razítkem marked_deleted.
,
"position" : 0,
"deletion_info" : {
"marked_deleted" : "2020-07-05T22:11:48.367057Z",
"local_delete_time" : "2020-07-05T22:11:48Z"
}
},
"rows" :
}
]
TTL náhrobky
Jedná se o náhrobky vytvořené automaticky po vypršení časového limitu pro konkrétní řádek nebo buňku. Jsou však označeny jinak než běžné náhrobky.
následující příkaz insert vytvoří náhrobek TTL po 20 sekundách.
INSERT INTO item_price ( store_number, item_id, price, replacements, product_code) VALUES ( 'CA103', 'item103', 3.0, {'item101-r', 'item101'}, 'p103') using TTL 20;
Sstabledump by ukázal:
,
"position" : 78
},
"rows" : ,
"liveness_info" : { "tstamp" : "2020-07-05T06:47:51.458099Z", "ttl" : 20, "expires_at" : "2020-07-05T06:48:11Z", "expired" : true },
"cells" : }
]
}
]
}
]
shrnutí
- Cassandra zachází s interně odstraněným dotazem jako s aktualizační operací, která přidává značku nazvanou tombstone na data, která mají být odstraněna.
- náhrobky mohou být konfigurovány s časem expirace (gc_grace_seconds) a jsou vyčištěny během procesu zhutňování.
- nástroj sstabledump lze použít k zobrazení obsahu souboru SSTable v lidsky čitelném formátu.
- Vyhněte se zápisu hodnot Null do tabulek, protože zde můžete vytvářet náhrobky. Buďte opatrní při vytváření dotazů abstrahovaných vaší vrstvou ORM.
- rozsah náhrobků jsou upřednostňovány před buňkami nebo řádkovými náhrobky, protože pouze ukládají hranice rozsahu, což šetří místo na disku.
- Vyhněte se nahrazení celých prvků kolekce, jako je sada, seznam, mapa, vkládáním a aktualizačními dotazy, protože to může vytvořit náhrobky rozsahu.