インメモリ階層の概要

インメモリ ティアは、特殊なノードを使用するクラスタレベルの設定です。このページを読む前に、インスタンス、クラスタ、ノードについて理解しておいてください。また、制限事項についても理解しておくことをおすすめします。

Bigtable のインメモリ階層は、Bigtable ノードの一部として統合されたメモリ階層です。アクセス パターンとパフォーマンスのニーズに基づいて、シームレスで費用最適化されたデータ階層化を、すべて単一の API で実現します。リモート ダイレクト メモリ アクセス(RDMA)を使用する Bigtable インメモリ ティアは、レスポンス時間を大幅に短縮し、ホットスポットを軽減して、レイテンシに敏感なデータに対して高スループットを確保します。詳細については、パフォーマンスについてをご覧ください。

インメモリ ティアを使用するタイミング

次のユースケースでは、インメモリ ティアを有効にすることをおすすめします。

  • ミリ秒未満のレイテンシ要件: 1 ミリ秒未満の読み取りレイテンシを必要とするワークロード。通常は、セルフマネージド キャッシュ ソリューションを使用してデータベースをフロントエンドに配置することで対応します。
  • 高スループットのポイント読み取り: 特定のデータ サブセットに対して高い読み取りトラフィック スループット要件を持つアプリケーション。
  • ホットスポットの緩和: 特定の行キーでトラフィックの急増またはホットスポットが発生する可能性がある高スループットのワークロード。
  • 費用の最適化: 読み取り量が多いワークロードを費用対効果の高いインメモリ層にオフロードして、Bigtable ノードの数を減らすシナリオ。

インメモリ階層の仕組み

インメモリ ティアのサポートは、ハイブリッド ストレージ ノードによって提供されます。これらの特殊なノードは、Bigtable のコンピューティングとストレージの分離を拡張し、垂直方向にスケーラブルなスループットを備えたメモリ階層を含みます。Bigtable が専用のインメモリ ティアノードをプロビジョニングするまでに最大 30 分かかることがあります。この期間中、Bigtable は永続ストレージからのトラフィックを引き続き処理します。

インメモリ階層を有効にするには、クラスタレベルで行います。

インメモリ階層は次のように動作します。

  • メモリ階層でのデータの取得: インメモリ階層は、リードスルー キャッシュ動作を提供します。行は、インメモリ ティア用に構成したアプリ プロファイルを介した読み取りオペレーションによってメモリティアに移動します。行データがすでにインメモリ ティアにある場合、任意のアプリ プロファイルからの書き込みオペレーションによってメモリティアが更新されます。
  • エビクション ポリシーと無効化ポリシー: インメモリ階層では、行レベルで最近使われていない(LRU)エビクションを使用し、有効期間(TTL)無効化ポリシーを適用して、インメモリ階層のヒット率を最大化します。
  • ネガティブ キャッシュ: インメモリ階層は、バックエンドの過負荷を防ぐために、リソースが一定期間欠落しているかどうかを記憶します。
  • セキュリティ: インメモリ ティアは、保存データの暗号化と転送データの暗号化(TLS)をサポートしています。
  • レプリケーション: マルチクラスタ インスタンスでは、異なるクラスタのメモリ階層は同期されません。各メモリ階層は、受信した読み取りトラフィックに基づいてメモリに読み込むデータを個別に決定するため、異なるクラスタのメモリ階層に異なる行キーが保持される場合があります。Bigtable は、ローカル クラスタの SSD ティアからメモリにデータを読み込みます。行への書き込みは、最終的に、結果整合性の標準 Bigtable レプリケーション モデルに従って、行が存在するすべてのメモリ階層で更新されます。
  • 垂直自動スケーリング: インメモリ階層は、Bigtable 自動スケーリングと連携して動作するノードレベルの垂直自動スケーリングをサポートしています。

インメモリ階層は、現在のデータへの高パフォーマンス アクセスに最適化されています。このパフォーマンスを維持するため、タイムスタンプが最新の行バージョンのみがメモリ階層に存在します。以前のバージョンのデータ(履歴セルとも呼ばれます)に対するリクエストは、メモリ階層を自動的にバイパスし、永続ストレージから提供されます。

データの整合性

Bigtable は、インメモリ ティアのデータが SSD または低頻度アクセス ストレージ ティアの永続データと整合していることを保証します。このハイブリッド アーキテクチャにより、Bigtable はすべてのストレージ ティアで一貫したストレージ モデルを提供し、物理的に RAM に存在するか永続ストレージに存在するかに関係なく、同じセマンティック インターフェースを介してデータにアクセスできます。Bigtable インメモリ ティアを有効にすると、クラスタレベルで書き込み後読み取りの整合性が維持されます。

垂直方向のスケーリング

インメモリ ティアを有効にすると、各ノードは垂直スケーリングを使用して、インメモリ ティアのスループット容量を変更できます。インメモリ ティアを有効にすると、各ノードは 1 秒あたり 40,000 回の読み取りの基本容量から開始されます。ポイント読み取りトラフィックの急増を管理するために、ノードは 1 秒あたり 40,000 回の読み取り単位で自動的にスケーリングし、ノードごとに 1 秒あたり最大 120,000 回の読み取りに達します。

この垂直スケーリング機能は、Bigtable の自動スケーリングと統合されています。クラスタ内のすべてのノードでインメモリ階層の最大容量に達し、自動スケーリングが有効になっている場合、Bigtable は追加のノードを自動的にプロビジョニングして、インメモリ階層のスループットをさらに向上させます。

ノードの垂直スケーリングは、インメモリ ティアの 1 秒あたりの読み取りにのみ適用されます。これは、クラスタレベルの自動スケーリングが有効になっているかどうかに関係なく機能します。基本の 40,000 読み取り/秒を超える垂直スケーリングは、ノードの 1 時間あたりの費用に乗数を適用して課金されます。詳細については、料金と上限をご覧ください。

制限事項

インメモリ ティアには次の制限が適用されます。

  • インメモリ階層には SSD ストレージが必要です。
  • インメモリ階層では、単一行レベルのポイント読み取りオペレーションのみがサポートされます。
  • インメモリ ティアは、データスキャンや SQL クエリをサポートしていません。
  • インメモリ階層のアプリ プロファイルは、単一クラスタ ルーティングのみをサポートしています。
  • インメモリ階層では、行サイズが行キーあたり 1 MiB に制限されます。Bigtable は、この上限を超える行を永続ストレージから読み取ります。
  • インメモリ ティアには、次のバージョンの Bigtable クライアント ライブラリが必要です。

    • Java バージョン 2.77.0 以降
    • BOM バージョン 26.80.0 以降
    • Go バージョン 1.52.0 以降

    他のクライアント ライブラリはサポートされていません。

  • 顧客管理の暗号鍵(CMEK)が有効になっているクラスタは、インメモリ ティアをサポートしていません。

  • インメモリ ティアは、クラスタあたり最大 10 ノードに制限されます。

次のステップ