ほとんどのユーザー行動分析とユーザー識別シナリオでは、数億人、あるいは数十億人のユーザーをフィルタリングして、特定のタグを持つメトリックデータを取得する必要があります。このトピックでは、Hologres でユーザー行動分析を実行する方法について説明します。
背景情報
ユニークビジター (UV) とは、Web サイトに少なくとも 1 回アクセスした個々のユーザーのことです。 UV 数は、正確な重複排除後に特定の期間に収集されるメトリックとして使用できます。 UV 数は、行動分析でよく使用されます。たとえば、大規模な e コマースプロモーションでは、販売者は商品ページビュー (IPV) UV 数、ショッピングカートに商品を追加した UV 数、および購入を行った UV 数を計算する必要があります。販売者は、売上目標を達成するために、UV 情報に基づいてできるだけ早く運用ポリシーを調整できます。ビジネス要件に基づいて、1 日、7 日、1 か月など、一定期間の UV 数を取得できます。半年など、特定の期間の UV 数を取得することもできます。
UV 数をカウントする場合、計算ディメンションとデータ量はビジネス要件によって異なります。ほとんどの場合、以下の要件が関係します。
ビジネスには、毎日 10 を超えるディメンションで数億のデータレコードが関係しています。ディメンションを柔軟に組み合わせてデータをクエリしたいと考えています。
日、週、月、年ごとのデータクエリに加えて、特定の長期間のデータをリアルタイムでよりきめ細かくクエリしたいと考えています。
ユーザーを正確に重複排除したいと考えています。
前述の複雑な UV 計算シナリオでは、Apache Kylin などの事前計算システム、またはディメンションの固定の組み合わせを持つ Flink-MySQL ソリューションが一般的に使用されます。抽出、変換、ロード (ETL) タスクを使用して、定期的な更新を実行します。これは、計算効率の向上に役立ちます。ただし、以下の欠点があります。
UV 計算に多数のディメンションが関係する場合、大量のストレージスペースが必要になり、事前計算時間が長くなります。
正確な重複排除は大量のリソースを消費します。その結果、メモリ不足 (OOM) の問題が発生しやすくなります。
データをリアルタイムで処理できず、適時性の要件を満たすことができません。 UV 計算は、固定期間に対してのみ実行でき、カスタム期間に対しては実行できません。
COUNT DISTINCT 関数を使用して、ファクトテーブルの UV 数をカウントすることもできます。これにより、UV 計算のカスタム期間を構成できます。ただし、ほとんどのシステムは、ファクトテーブルの大量のデータを計算できません。計算期間が長い場合、クエリプロセスが遅くなります。ファクトテーブルは、高並列アクセスもサポートしていません。
Hologres ソリューションについて
Hologres は、ハイブリッドサービスおよび分析処理 (HSAP) 用のリアルタイムデータウェアハウスです。 Hologres は分散アーキテクチャを使用し、リアルタイムのデータ書き込みをサポートし、ペタバイト規模のデータを高並列性と低レイテンシで分析および処理できます。 Hologres は PostgreSQL プロトコルと互換性があり、既存のツールを使用してデータ分析を行うことができます。
UV ベースの行動分析シナリオでは、Hologres を使用すると、COUNT DISTINCT 関数を使用してファクトテーブルからデータをクエリできます。したがって、Hologres は他の製品よりも優れたクエリパフォーマンスを提供します。 Hologres は、roaring bitmap ベースの事前集計ソリューションもサポートしています。これらの機能により、Hologres は数億のデータレコードの UV 数を正確にカウントできます。
COUNT DISTINCT
COUNT DISTINCT 関数は、ネイティブ PostgreSQL 構文に従います。 COUNT DISTINCT 関数は Hologres で最適化されており、1 つのフィールドに基づく重複排除、複数のフィールドに基づく重複排除、歪んだデータの重複排除、GROUP BY 句にフィールドが指定されていない場合の重複排除など、複数のシナリオをサポートします。 COUNT DISTINCT 関数を使用して、ワイドファクトテーブルから直接データをクエリできます。これにより、クエリのパフォーマンスが向上します。
Roaring bitmap
Roaring bitmap は、インデックス作成用の圧縮 bitmap です。 roaring bitmap のデータ圧縮と重複排除機能は、ビッグデータシナリオでの UV 計算に適しています。 Roaring bitmap には、次の特性があります。
roaring bitmap では、32 ビット整数に対して 216 個のチャンクが構築され、32 ビット整数の最上位 16 ビットに対応します。 32 ビット整数の最下位 16 ビットは、各チャンクの 1 ビットにマッピングされます。 単一チャンクの容量は、チャンク内の既存の最大値によって決まります。
roaring bitmap は、1 ビットを使用して 32 ビット整数を表します。これにより、データが大幅に圧縮されます。
Roaring bitmap は、重複排除のためのビット単位の演算を提供します。
roaring bitmap の使用方法の詳細については、「Roaring bitmap 関数」をご参照ください。
以下のセクションでは、さまざまな要件を満たす UV 計算の 4 つのソリューションについて説明します。ビジネスデータの量と適時性の要件に基づいてソリューションを選択できます。
アドホッククエリでの UV 計算
説明
事前集計は使用されません。 Hologres では、期間を指定し、COUNT DISTINCT 関数を使用してファクトテーブルの UV 数をカウントできます。詳細については、「アドホッククエリでの UV 計算ソリューション」をご参照ください。
利点
このソリューションはリアルタイムの要件を満たし、UV 計算の期間を指定できます。アドホッククエリでの UV およびページビュー (PV) 計算は、事前計算とスケジューリングを必要とせずに実行されます。 UV 計算用の COUNT DISTINCT 関数は Hologres で最適化されており、計算効率が大幅に向上します。
欠点
データ量が増加すると、計算効率とサポートされる 1 秒あたりのクエリ数 (QPS) が低下する可能性があります。
シナリオ
このソリューションは、数千万のデータレコードの柔軟な UV 計算に適しています。
ほぼリアルタイムの UV 計算 (事前集計に基づく)
説明
Hologres の roaring bitmap に基づいて、このソリューションは定期的なスケジューリングを使用して事前集計を実行し、カスタム期間での柔軟な UV 計算を可能にします。詳細については、「事前集計に基づくニアリアルタイム UV 計算」をご参照ください。
利点
利点: このソリューションは優れた計算パフォーマンスを提供し、正確なカーディナリティ推定に基づいて高 QPS と低レイテンシで UV 計算をサポートします。また、カスタム期間を構成することもできます。
欠点
事前計算を実行し、集計テーブルのデータを定期的に更新する必要があるため、メンテナンスタスクのワークロードが増加します。
シナリオ
このソリューションは、カスタム期間で高 QPS の数億のデータレコードの UV 計算に適しています。
事前集計に基づく Hologres と MaxCompute によるオフライン UV 計算
説明
超大量のデータで UV 数をカウントする場合、MaxCompute でオフラインで bitmap インデックスを構築し、Hologres のビジネスディメンションに基づいて集計結果テーブルからデータをクエリできます。これにより、数秒以内に UV 計算が実現します。このソリューションでは、最も細かい粒度で 1 回だけ事前集計を実行し、最も細かい粒度で 1 つの事前集計結果テーブルを生成する必要があります。 Hologres の強力な計算機能は、超大量のデータに対するオフライン UV 計算の実装に役立ちます。詳細については、「Roaring bitmap」をご参照ください。
利点
このソリューションは、超大量のデータに対するオフライン UV 計算で高い効率を提供します。
欠点
このソリューションでは、MaxCompute でユーザー定義関数 (UDF) 開発の経験を持つユーザーが bitmap インデックスを構築する必要があります。
シナリオ
このソリューションは、超大量のデータの UV 計算に適しています。
事前集計に基づく Hologres と Flink によるリアルタイム UV 計算事前集計に基づく Hologres と Flink による
説明
このソリューションを使用すると、ダッシュボードでのリアルタイム UV 表示などのシナリオで、UV 計算の適時性に対する高い要件を満たすことができます。リアルタイム UV 計算シナリオでは、Flink は Hologres のディメンションテーブルに関連付けられています。ユーザータグベースの重複排除は、roaring bitmap を使用してリアルタイムで実行されます。詳細については、「Hologres と Flink を使用して事前集計に基づいてリアルタイムで UV 数をカウントする」をご参照ください。
利点
このソリューションは、リアルタイムの UV および PV 計算をよりきめ細かく実装します。このソリューションは、簡単なデータ処理と柔軟なディメンション計算をサポートし、高い適時性を提供します。
欠点
このソリューションには、Flink のウィンドウ関数が含まれます。 Flink 開発の経験を持つユーザーが必要です。
シナリオ
このソリューションは、大規模な販売プロモーション中のダッシュボードでのリアルタイムデータ表示など、リアルタイム UV 計算シナリオに適しています。