Gravsteiner I Apache Cassandra

typer gravsteiner

Gravsteiner kan opprettes på en rekke måter, og Det er avgjørende at du forstår visse fallgruver som kan føre til implisitt opprettelse av gravsteiner som vil forbli skjult fra programmererens synspunkt til det overflater som et plausibelt problem som påvirker klyngen din. Derfor er det viktig å forstå hvilke typer gravsteiner som kan opprettes I Cassandra:

cellegrav
Insert-setninger kan opprette gravsteiner når en bestemt celleverdi er angitt som null i spørringen. Dette kan skje når databaseabstraksjonslaget eller ET ORM-rammeverk abstraherer spørringen med representasjon på objektnivå, og nullverdiene blir implisitt sendt ned i selve spørringen til Cassandra. For eksempel, vurder følgende CQL-spørring:

INSERT INTO item_price ( store_number, item_id, price, replacements, product_code ) VALUES ( 'CA104', 'item104', 2.50, null , 'p104');

Dette ville skape en celle gravstein for erstatninger kolonne for posten med store_number CA104.
vurder nå følgende slettespørring:

DELETE replacements FROM item_price WHERE store_number = 'CA104';

Dette vil også skape en celle gravstein for den tilsvarende posten.

Radgravsteiner
en hel rad er merket som en gravstein som et resultat av en slettespørring som identifiserer en rad. For eksempel:

DELETE FROM item_price WHERE store_number = 'CA101' and item_id='item101' and price = 1.80;

Sstabledump ville vise en deletion_info på radnivå for klyngekolonnene i partisjonen.

,
"position" : 0
},
"rows" : ,
"deletion_info" : {
"marked_deleted" : "2020-07-05T07:26:52.233374Z",
"local_delete_time" : "2020-07-05T07:26:52Z"
},
"cells" :
}
]
}
]

et stort antall rad gravsteiner kan være en indikasjon på en dårlig datamodell der programmet er ofte slette poster fra en tabell. I slike tilfeller bør du vurdere å revidere datamodellen og omstrukturere tabeller basert på spørringsmønstre og kardinalitet.

Range tombstones
Slette et helt radområde ved HJELP AV WHERE-setning med en partisjonsnøkkel og et område representert av en klyngekolonne. For eksempel:

DELETE FROM item_price WHERE store_number = 'CA101' AND item_id='item101' AND price > 2.0;

SSTabledump ville vise,

,"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 ville skrive ut range tombstones med en type range_tombstone_bound med en start og slutt på clustering-tasten som brukes til å betegne radene som ble tombstoned i en partisjon. Områdegravsteiner opprettes også når en hel samling erstattes med EN INNSATS-eller OPPDATERINGSSPØRRING. Det anbefales alltid å erstatte bestemte elementer i en samling i stedet for å erstatte hele samlingen selv.

Partisjon gravsteiner
Gravsteiner av denne typen opprettes når en slettespørring avfyres med bare partisjonsnøkkelen I where-setningsdelen. For eksempel:

DELETE FROM item_price WHERE store_number = 'CA102';

som du utvilsomt har gjettet, vil dette slette hele partisjonen CA102, og sstabledump vil vise partisjonen deletion_info-attributtet med marked_deleted tidsstempel.

,
"position" : 0,
"deletion_info" : {
"marked_deleted" : "2020-07-05T22:11:48.367057Z",
"local_delete_time" : "2020-07-05T22:11:48Z"
}
},
"rows" :
}
]

ttl-gravsteiner
dette er gravsteiner som opprettes automatisk når tiden til live utløper for en bestemt rad eller celle. Imidlertid er de merket annerledes enn vanlige gravsteiner.

følgende insert-setning vil skape EN ttl-gravstein etter 20 sekunder.

INSERT INTO item_price ( store_number, item_id, price, replacements, product_code) VALUES ( 'CA103', 'item103', 3.0, {'item101-r', 'item101'}, 'p103') using TTL 20;

den sstabledump ville vise:

,
"position" : 78
},
"rows" : ,
"liveness_info" : { "tstamp" : "2020-07-05T06:47:51.458099Z", "ttl" : 20, "expires_at" : "2020-07-05T06:48:11Z", "expired" : true },
"cells" : }
]
}
]
}
]

Sammendrag

  • Cassandra behandler en slettespørring internt som en oppdateringsoperasjon som legger til en markør kalt tombstone på dataene som skal slettes.
  • Gravsteiner kan konfigureres med utløpstid (gc_grace_seconds) og ryddes opp under komprimeringsprosessen.
  • sstabledump verktøyet kan brukes til å vise innholdet I en sstable fil i et lesbart format.
  • Unngå å skrive Nullverdier til tabellene dine, da det kan skape gravsteiner. Vær forsiktig mens du gjør spørringer abstrahert AV ORM lag.
  • Range gravsteiner er foretrukket over celle eller rad gravsteiner som det bare lagrer området grenser sparer diskplass.
  • Unngå å erstatte hele elementer i en samling som settet, listen, kartet med SETT inn og OPPDATER spørringer, da dette kan skape rekkevidde gravsteiner.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.