最新の値のみを保持する
このページでは、Bigtable テーブルの列に最新の値のみを保持するための戦略について説明します。
すべての Cloud Bigtable クライアント ライブラリでは、フィルタを使用して特定の行と列の最新の値を読み取ることができます。場合によっては、古いバージョンのデータを読み取る必要がないこともあります。列に 1 つのセルのみを保持することを指定するバージョン ベースのガベージ コレクション ポリシーを使用できますが、ガベージ コレクションを実行するために最長で 1 週間かかる場合があるため、実際には読み取りを行わない古いデータがテーブルに含まれている可能性があります。
最新の値のみを保持するには、削除して書き込みアプローチを使用して、テーブルの列を 1 つのセルのみに制限することをおすすめします。
削除して書き込む
列内に値を 1 つだけ保持するには、列を削除してから 1 つのアトミック アクションで新しい値とタイムスタンプを使用して再作成するリクエストを送信します。
次の Java の擬似コードは、この方法を示しています。順序は重要です。削除は書き込みの前に行う必要があります。
RowMutation mutation = RowMutation.create(TABLE, ROW_KEY)
.deleteCells(COLUMN_FAMILY, COLUMN_QUALIFIER, Range.TimestampRange.unbounded())
.setCell((COLUMN_FAMILY, COLUMN_QUALIFIER, TIMESTAMP, VALUE);
dataClient.mutateRow(mutation);
次のフィールドを入力します。
TABLE
: テーブルの IDCOLUMN_FAMILY
: 列を含む列ファミリーCOLUMN_QUALIFIER
: 削除して再作成する列修飾子TIMESTAMP
: 新しいタイムスタンプVALUE
: 列の新しい値
ゼロ タイムスタンプ
以前、常にタイムスタンプを 0 にして書き込みを送信する戦略をおすすめしました。引き続きこの方法を使用できますが、有効なタイムスタンプが有用であるため、代わりに「削除して書き込み」のアプローチをおすすめします。
セルのタイムスタンプを 0 または現在の時間より小さい値(ミリ秒単位)に設定していて、経過時間に基づくガベージ コレクション ポリシーを使用している場合、次回ガベージ コレクションが行われる際にセルが削除されることがあります。