ガベージ コレクション

このページでは、Cloud Bigtable のガベージ コレクションの仕組みについて説明します。取り上げる事項は次のとおりです。

  • ガベージ コレクションの種類
  • デフォルトのガベージ コレクション設定
  • データが削除されたとき
  • レプリケートされたテーブルのガベージ コレクション ポリシーの変更

ガベージ コレクションの概要

ガベージ コレクションは、期限切れデータや古くなったデータを Cloud Bigtable テーブルから自動的かつ継続的に削除するプロセスです。1 つのガベージ コレクション ポリシーは、特定の列ファミリー内のデータが不要になるタイミングを規定するユーザー作成の複数のルールからなります。

ガベージ コレクションは、組み込みの非同期バックグラウンド プロセスです。ガベージ コレクションの対象のデータが実際に削除されるまでに、最長で 1 週間かかることがあります。 ガベージ コレクションは、削除が必要なデータ量によって変わることのない、固定スケジュールで発生します。データが削除されるまで、読み取り結果に表示されます。このデータは、読み取りをフィルタリングすることで除外できます。

ガベージ コレクション ポリシーの利点は次のとおりです。

  • 行サイズを最小化する - 行が無限に大きくなるのを防ぐ必要があります。大きな行はパフォーマンスに悪影響を及ぼします。行のサイズが 100 MB を超えないようにするのが理想的です。限界は 256 MB です。古いデータや現在のデータの古いバージョンを保存する必要がない場合、ガベージ コレクションを使用すると、各行のサイズを最小限に抑えられます。
  • 費用を低く抑える - ガベージ コレクションを使用すると、不要になったデータや使用しなくなったデータの保存にかかる費用を節約できます。コンパクションが発生し、ガベージ コレクションされたデータが削除されるまで、期限切れデータや古くなったデータの保存には課金されます。通常このプロセスには数日かかりますが、最長で 1 週間かかることがあります。

ガベージ コレクション ポリシーをプログラムによって設定することも、cbt ツールを使って設定することもできます。ガベージ コレクション ポリシーは列ファミリー レベルで設定されます。

テーブルの各列ファミリーには、独自のガベージ コレクション ポリシーがあります。ガベージ コレクション プロセスは、現在のガベージ コレクション ポリシーを列ファミリーごとに検索してから、そのポリシーのルールに従ってデータを削除します。

タイムスタンプ

Cloud Bigtable では、行と列の交点に複数のセルを含めることができます。これは、その交点の値の異なるバージョンです。各セルにはタイムスタンプがあります。セルのタイムスタンプ プロパティは、セルの値が書き込まれた実際の時間を反映する「実際の」タイムスタンプにすることも、「人為的な」タイムスタンプにすることもできます。人為的なタイムスタンプには、セルが実際に書き込まれた時刻ではない、連続番号、ゼロ、タイムスタンプ形式の値があります。人為的なタイムスタンプを使用する前に、そのリスクを含めて、使用例をご確認ください。

ガベージ コレクションの種類

このセクションでは、Cloud Bigtable で利用可能なガベージ コレクションの種類について説明します。それぞれの種類のガベージ コレクションのコードサンプルについては、ガベージ コレクションの構成をご覧ください。

期限切れ値(エージベース)

ガベージ コレクション ルールを、各セルのタイムスタンプに基づいて設定できます。たとえば、現在の日時から 31 日以上前のタイムスタンプを持つセルを保持したくない場合があります。この種のガベージ コレクション ルールでは、データの有効期間(TTL)を設定します。Cloud Bigtable は、ガベージ コレクションの際に各列ファミリーを調べ、期限切れになったセルを削除します。

バージョン数

列ファミリーのすべての列について、保持する最大セル数を明示的に指定するガベージ コレクション ルールを設定できます。

たとえば、お客様の最新のユーザー名とメールアドレスのみを保持したい場合は、これら 2 つの列を含む列ファミリーを作成し、その列ファミリーの値の最大数を 1 に設定できます。

また、パスワードを再利用しないように、ユーザーのパスワード ハッシュのバージョンを最新から 5 つ保持したい場合、パスワード列を含む列ファミリーの最大バージョン数を 5 に設定します。Cloud Bigtable がガベージ コレクションの際に列ファミリーを調べたとき、パスワード列に 6 つ目のセルが書き込まれている場合、最も古いセルがガベージ コレクションされ、バージョン数は 5 に保たれます。

期限切れルールとバージョン数ルールの組み合わせ

インターセクションユニオンという 2 種類のガベージ コレクション ポリシーを利用して、ガベージ コレクション ルールを組み合わせることができます。

インターセクション

インターセクション ガベージ コレクション ポリシーは、所定のルールセットすべてに一致するデータをすべて削除します。たとえば、31 日以上経過したプロファイルを削除しても、ユーザーごとに最低 1 つは常に残しておきたい場合があります。この場合、プロファイル列を含む列ファミリーに対するインターセクション ポリシーは、期限切れ値ルールおよびバージョン数ルールで構成されます。

ユニオン

ユニオン ガベージ コレクション ポリシーは、所定のルールセットのいずれかに一致するデータをすべて削除します。たとえば、ユーザーごとに最大 2 つのページビュー レコードを保持するようにして、ただしそのレコードは 30 日未満の場合に限る、という場合があります。この場合、ユニオン ポリシーは、期限切れ値ルールまたはバージョン数ルールに設定されます。

ガベージ コレクションのデフォルト設定

列ファミリーにデフォルトの TTL はありません。以降のセクションで説明するように、列のデフォルトのバージョン数は、その列が属する列ファミリーの作成方法によって異なります。

HBase ポリシー

Java 用 HBase クライアント、HBase シェル、または Java 用 HBase クライアントを使用する別のツールを使用して列ファミリーを作成した場合、ルールを変更しない限り、Cloud Bigtable は列ファミリーの各値の最新バージョンのみを保持します。このデフォルトの設定は HBase と一致しています。

他のすべてのクライアント ライブラリまたはツール

他のクライアント ライブラリやツールを使用して列ファミリーを作成した場合、Cloud Bigtable は各値のバージョンを無限に保持します。これには、gcloudcbt ツールで作成された列ファミリーが含まれます。バージョン数を制限する場合は、列ファミリーのガベージ コレクション ポリシーを変更する必要があります。

データが削除されたとき

ガベージ コレクションは、Cloud Bigtable が各列ファミリーのルールをチェックし、それに応じて期限切れのデータや古くなったデータを削除する連続プロセスです。一般に、データが実際に削除されるには、データがルール内の基準に一致してから最長で 1 週間かかることがあります。ガベージ コレクションのタイミングを変更することはできません。

データがガベージ コレクションされるまでに最長で 1 週間かかることがあるため、読み取りリクエストが目的のデータを返すようにするために、ガベージ コレクション ポリシーだけに頼るべきではありません。必ず、ガベージ コレクション ルールと同じ値を除外するフィルタを読み取りリクエストに適用してください。 1 列あたりのセル数を制限するか、タイムスタンプの範囲を指定することでフィルタリングできます。

たとえば、列ファミリーのガベージ コレクション ルールが、最新から 5 つのプロファイル バージョンのみを保持するように設定され、5 つのバージョンがすでに格納されているとします。新しいバージョンのプロファイルが書き込まれると、最も古いセルがガベージ コレクションされるまでに最長で 1 週間かかることがあります。したがって、6 つ目の値を読み取らないようにするには、常に最新から 5 つのバージョンを除くすべてを除外する必要があります。

コンパクションが発生し、ガベージ コレクションされたデータが削除されるまで、期限切れのデータの保存には課金されます。

ガベージ コレクションは遡及的です。新しいガベージ コレクション ポリシーが設定されると、その後数日間でテーブル内のすべてのデータに適用されます。新しいポリシーが以前のポリシーよりも制限が厳しい場合、バック グラウンド作業が発生したときに古いデータが削除され、ポリシーの変更前に書き込まれたデータに影響します。

データがガベージ コレクションされていることを確認する必要がある場合は、テーブルに対してクエリを実行し、そのデータを期待される結果と比較します。Google Cloud Platform Console でテーブルサイズをモニタリングすることもできます。テーブルがまったく小さくならない場合、ガベージ コレクション ポリシーが期待どおりに機能していないためである可能性がありますが、ガベージ コレクションは遅れて実行されることに注意が必要です。

レプリケートされたテーブルのガベージ コレクション ポリシーの変更

Cloud Bigtable を使用すると、テーブルがシングル クラスタ インスタンスの場合、いつでも列ファミリーのポリシーを変更または削除できます。一方、レプリケートされたインスタンスのテーブルには、データを保護するために制限がいくつか適用されます。

レプリケートされたテーブルの列ファミリーの最大バージョン数は、変更できます。ただし、列ファミリーのバージョン数を減らした場合、減らした新しい数がすべてのレプリケートされたクラスタで反映されるまでに、最長で 1 週間かかることがあります。したがって、データを読み取るときは常にフィルタを使用する必要があります。

Cloud Bigtable では、レプリケートされたテーブルの列ファミリーの TTL を増やすことはできません。その理由を知るために、列ファミリーの TTL を 30 日から 60 日に変更する場合について考えてみます。エージベースのガベージ コレクションは、各クラスタで別々に実行できます。結果として、ポリシーを変更する時点で、あるテーブルのコピー内の 31 日前の値はガベージ コレクションによって削除されている可能性がありますが、別のコピー内の値は削除されていない可能性があります。この状況でガベージ コレクション ポリシーを変更すると、コピーがほぼ 1 か月間、同期されないままになる可能性があります。

同じ理由で、Cloud Bigtable では、レプリケートされたテーブルの列ファミリーに対するエージベースのガベージ コレクション ポリシーは削除できません。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Bigtable ドキュメント