Bigtable の分散カウンタ: 必要な理由と利用方法
Bora Beran
Group Product Manager, Bigtable
Steve Niemitz
Senior Staff Software Engineer
※この投稿は米国時間 2024 年 8 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。
ビジネス全体を把握するために一元化されたビューや指標セットを設定することは、ユーザーに満足してもらい、競合他社に先んじるために欠かせません。よく使われる機能の特定や、設計変更の評価(A/B テスト)によってユーザーのニーズと好みを理解したり、共有、高評価、ユニーク ユーザー数を追跡してエンゲージメントを測定したり、リアルタイムのおすすめを作成してユーザー エクスペリエンスを改善したりする必要がある場合、これらのエクスペリエンスは最新の統計情報にアクセスできるかどうかによって変わります。ほとんどのデータベース環境において、これは「カウンタ」の作成を意味します。通常は複雑な Lambda アーキテクチャが必要となり、費用、速度、精度の間で難しいトレードオフを強いられることも少なくありません。
数週間前に東京で開催された Google Cloud Next ‘24 では、Bigtable で分散カウンタを簡単に作成できる新機能の一般提供が発表されました。この機能により、データ ラングリングではなく成長に集中できるようになります。Bigtable のカウンタ、ユースケース、利用方法について、以下で詳細をご確認ください。
Bigtable でのカウンタ
分散カウンタには、低レイテンシで大量のデータを処理するために特別なデータ構造が必要です。これにより、イベント ストリームをリアルタイムに処理して分析や ML に使用できます。最終的には、不正検出やカスタマイズ、業務レポートの作成などのユースケースが可能になります。
Bigtable の新しい集計型は、毎日のユーザー エンゲージメントの集計、最小値の特定による最低のセンサー測定値の確認、最大値の特定によるピーク使用量の確認、おおよそのユーザー数の追跡などを容易にする構造です。これらの新しい特別な型は、数学の可換かつ結合的などの演算に関する特性を利用することで、対象のデプロイが世界中にある場合でも書き込み時に大規模な計算をはるかに効率的に実行し、時間と費用のかかる複雑なストリーミング アーキテクチャの必要性を削減します。
上記の画像は、これまでにおそらくご覧になったことのあるカウンタの例です。このカウンタは、時間経過に伴う高評価、低評価、視聴回数などのエンゲージメントを追跡しています。
では、Bigtable で分析ワークフローを合理化する方法を見てみましょう。
サンプル ユースケース
あなたはソーシャル メディア アプリを運営しており、総インプレッション数、視聴回数、クリック数など、全世界で毎日数十億件にもおよぶコンテンツのインタラクションを追跡する必要があるとします。このユースケースは、マーケティングの広告、小売業の商品リスティング、ウェブサイトのページビューに関するインタラクションを追跡する場合と大きな違いはありません。以前は主に 2 つの選択肢がありました。1 つは各アクティビティをデータベースに書き込み、複数のクエリを実行して合計を計算する方法ですが、費用がかかり、指標の取得が遅れ、処理中のサービング パフォーマンスに悪影響を及ぼす可能性があります。これは、特殊なカラム型システムにも当てはまります。もう 1 つのストリーミング フレームワークを使用する方法では、リアルタイム データを処理できますが、複雑なアーキテクチャに加え、管理上のオーバーヘッドや大幅な追加費用を伴います。
Bigtable を使用すると、アクティビティが発生するたびにカウンタをインクリメントするだけで、Bigtable 内で合計数を直ちに利用できます。また、カウンタのデクリメント、削除、リセットも行うことができ、数値は同期されます。結果はダッシュボードやアプリケーションから 1 桁のミリ秒単位のレイテンシで読み取ることが可能で、さまざまなキャンペーンやマーケティング イニシアチブの最新の主要なエンゲージメント指標を世界中の従業員、パートナー、広告主、顧客に提供できます。
カウンタは一見シンプルですが、非常に強力です。以下のようなユースケースも考えられます。
-
ウェブ解析: ユニーク ユーザー数、日次 / 週次 / 月次のアクティブ ユーザー数を測定します。
-
アドテック: 配信された広告のインプレッション数、エンゲージメント数、クリック数を追跡します。
-
IoT とテレメトリー: センサーデータの集計、デバイスの使用状況の追跡、傾向と異常の特定を行います。
-
ソーシャル メディア: ユーザー インタラクションの測定、コンテンツの人気度の分析、注目のトピックの追跡を行います。
-
ゲーム: プレーヤーのアクティビティのモニタリング、実績の追跡、ゲーム パフォーマンスの分析を行います。
-
e コマース: 売上、在庫レベル、顧客エンゲージメント指標をリアルタイムで追跡します。
利点
-
効率的なデータ集計: Bigtable で任意のテーブルに指標を自動的に生成します。値のマージ(+ / -)や、カウンタの削除 / リセットが可能です。指標は複数の時間枠で保存でき、低レイテンシのルックアップで取得できます。
-
膨大なスループット: 1 つの指標でも、Bigtable ノードごとに 1 秒あたり数万回のミューテーションが行われるストリーミング データに指標を作成します。
-
グローバルな整合性: 指標は全世界で統合でき、不整合は自動的に解決され、分岐は発生しません(最終的に整合性が確保されます)。
カウンタを作成してみる
Bigtable のカウンタは簡単に作成できます。このチュートリアルでは、全世界で毎日数十億件のユーザー インタラクションを追跡している先述の例を基にします。ここでは、各投稿に反応する一意の個人を追跡するとします。
まず、集計列ファミリーを作成して必要な集計関数を指定します。SUM、MIN、MAX などを使用できますが、この例では、一意の値から近似値を求める HyperLogLog(HLL)データ型を使用します。Bigtable は、この近似値の計算に HLL++ スケッチを利用します。
以下のコード スニペットでは、posts という既存のテーブルがあり、各行はソーシャル メディアの投稿を表し、テキストコピーや作成者などがすでに保存されているとします。このテーブルにカウンタを直接追加します。
Bigtable のコマンドライン ツール(cbt)を使用して、count という列ファミリーを追加します。count はガベージ コレクション ポリシーがなく(never)、整数を入力として使用できる HLL 型です(inthll)。
列ファミリー内の各列は同じ型を共有します。通常は、SetCell を呼び出して Bigtable 列に新しいデータを書き込みます。ただし、SUM、MIN、MAX、HLL などの集計列ファミリーに書き込む場合は、次に示すように、Bigtable クライアント ライブラリか cbt コマンドライン ツールから AddToCell リクエストを作成します。
上記の例では、ID 100 で表されるユーザーが行キー id123 の投稿を閲覧したことを記録します。@ の後の数値は、マイクロ秒単位の UNIX タイムスタンプを表します。Bigtable への書き込みごとにタイムスタンプが必要です。切り捨てられたタイムスタンプを使用して、インタラクションを時間単位、日単位、週単位などのバケットにグループ化できるため、ユニーク ユーザーの時系列ビューを生成できます。Bigtable クライアント ライブラリを使用すると、1 回のトランザクションで行内の複数のカウンタを更新することもできます。これにより、視聴回数とユニーク視聴者数などの関連指標に加え、住宅物件リストの日次、月次、年次の件数や、音楽サービスの曲、アルバム、アーティストのストリーミング回数などの階層指標を 1 回の書き込みで更新できます。時間バケット化について詳しくは、こちらの例をご覧ください。この例では、1 日の一意のカウントを追跡すると仮定します。
HLL セルに追加した値は、最後のリセット以降に追加したすべての値の確率セットに追加されます。つまり、アプリケーションは個々のユーザー ID を記録しないため、高速で、使用容量が大幅に削減されます。HLL++ に関する詳細や、BigQuery と Dataflow で作成されたスケッチを Bigtable で使用する方法、その逆の方法については、Zetasketch ライブラリをご覧ください。
Bigtable クライアント ライブラリを使用すると、簡単にカウントを取得できます。以下の例では、最近導入された SQL API を使用して、1 つの簡潔なクエリでソーシャル メディアの投稿とユニーク視聴回数を表示するために必要なすべての情報を取得する方法を示しています。
日付を切り捨てる方法を選択した場合、個別カウントの推移を簡単に取得して、視聴者の傾向をより深く理解することもできます。
まとめ
Bigtable は現在、データの集計を簡素化し、分析機能を強化する効果的なツールを提供しています。Bigtable では書き込み時にデータベースで計算が実行可能なため、時間を節約し、複雑さを軽減し、重要な分析情報にすぐにアクセスできます。Bigtable は、分析ワークフローの合理化を検討されているお客様にリアルタイム エッジを提供します。詳細と利用方法については、Bigtable のドキュメントをご覧ください。
ー Bigtable 担当グループ プロダクト マネージャー Bora Beran
ー シニア スタッフ ソフトウェア エンジニア Steve Niemitz