sírkövek az Apache Cassandra-ban

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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.