2

私が知っているように、Cassandra は "tombstone" を削除マークとして使用します。SSTable は不変であるため、トゥームストーンを使用して削除されたレコードにマークを付けます。では、トゥームストーンは SSTable ファイルのどこにマークされているのでしょうか? SSTableまたは別の場所のIndexファイルにマークされていますか? 墓標の流れの具体的なロジックを理解したい。

4

1 に答える 1

3

Aaron Morton のこの記事では、トゥームストーンと削除がどのように機能するかについて詳しく説明しています。クレジットは本当に彼に帰するべきです. Tombstone の実装を確認したい場合は、こちらを読んで詳細を確認してください。以下は、この質問に答えるためにサイトからいくつかのポイントを抽出したものです。

列が削除されると、Tombstone とも呼ばれる DeletedColumn が Cassandra に作成されます。DeletedColumn には次のものが含まれます。

name: 削除された列の名前

値: unix エポックからの現在のサーバー時間 (整数)。これは localDeleteTime と呼ばれ、(cassandra) GC プロセス中に使用されます。

タイムスタンプ: クライアントから提供されたとおり

その後、ミューテーションは 2 つの方法のいずれかで memtable に適用されます。memtable に行の名前付き列が含まれていない場合は、単に memtable に追加されます。既存の列がある場合は、削除された列で reconcile() されます。新しい DeletedColumn は、(クライアントが提供した) より高いタイムスタンプを持つ場合、既存の列を置き換えます。localDeleteTime は調整には使用されません。この時点で、memtable 内の以前の列の値はすべて失われ、ディスクに永続化されません。

私たちは今、墓石を持っています。他の変更がない場合、DeletedColumn は、他の列と同様に、後で SSTable に永続化されます。

というわけで、墓石マークがついているのがmemtableです。説明は続きました。サイトからの抜粋。

行値のローカル読み取り中に、削除要求の実行中に使用されたのと同じ調整プロセスが実行されます。現在のmemtable、フラッシュ保留中のmemtable、およびディスク上のSSTableから、複数の行フラグメントが取得されます。フラグメントが削減され、同じ名前の列が調整されて現在の値になります。

たとえば、列「bar」が「baz」であるというキー「foo」の行フラグメントがSSTableにあり、それらが調整されたときにタイムスタンプがより高い別のSSTableにDeletedColumnがある場合、DeletedColumnが「勝ち」ます。行の現在のビューは、「バー」列が削除されたものです。

于 2012-07-17T08:28:45.283 に答える