JD.com ミニプログラムのカスタム データ分析における ClickHouse の応用と実践

JD.com ミニプログラムのカスタム データ分析における ClickHouse の応用と実践

1. 事業背景

モバイルインターネットの急速な発展に伴い、ミニプログラムは、豊富な入口、多様なシナリオ、強力な通信機能、容易なアクセス、そして使用してすぐに離れられる機能により、現在の小売環境における新しいキャリアとして広く認知され、普及しています。ミニプログラムの日常的な運用や開発には、さまざまなデータ情報が存在します。このような豊富なデータ生産材料に直面して、これらの生データをどのように効率的かつ柔軟に分析・マイニングし、ミニプログラムデータの変動を迅速に把握し、ミニプログラムユーザーの行動の変化に対する洞察を得るかは、国内のさまざまなミニプログラムプラットフォームが絶えず突破口を模索している課題です。データ分析の効率を継続的に向上させることによってのみ、データ分析機能をより強化し、データの深い潜在的価値を活用してミニプログラムのビジネス開発を強化できるからです。

JD ミニプログラム データ センターは、ユーザー行動分析、リテンション分析、ユーザー ポートレート、ソース分析など、60 を超えるデータ指標を含む 4 つの基本的なデータ分析モジュールをカバーしています。

初期の頃は、データは主に JD Mini Program クライアント エンジン SDK によって収集され、Meridian ネイティブ チャネルを通じて均一にレポートされ、その後、サーバーによって均一にクリーンアップおよび処理されていました。このモデルはほとんどの基本的なデータ分析シナリオをカバーできますが、次のような問題点が残っています。

1. 不完全なデータ型:基本データインジケーターは、ミニプログラムフレームワークによって取得できるデータのみです。ミニプログラム フレームワークでは、ミニプログラム内の開発者独自のコードのページ露出やクリックなどのビジネス データを自動的に取得できないため、ミニプログラム データ プラットフォームによって提供されるデータの整合性を保証することができません。たとえば、ISV マーチャントが開発したマーケティング ミニ プログラムの場合、ミニ プログラムがマーケティング キャンペーンを実施しているときに、クーポン引き換えボタンのユーザー クリック データを収集して分析することはできません。

2. 業界データが蓄積できない:ミニプログラムがカバーするビジネスシナリオは豊富で多様であり、複雑さも異なります。初期のデータ センターでは、事後のデータ分析と表示のみが提供されていました。ビジネスデータが不足していたため、業界別の予測分析モデルを提供することができず、より効果的なビジネスガイダンスや戦略サポートを加盟店に提供することが困難でした。

3. データ統計の変化するニーズに対応できない:既存のデータ分析は固定化され、プリセットされており、変更できません。カスタマイズされたデータ分析は、データの柔軟な統計ニーズを真にサポートし、変化するビジネス データ分析シナリオに対応できます。

上記の問題の解決の鍵は、将来的に膨大なビジネスデータの保存、柔軟な処理、詳細な分析をどのように解決するかにあります。これを基に、当社は業界内の多くの成熟したデータソリューションを調査し、JDのビジネス特性に焦点を当て、最終的にJDミニプログラムのカスタマイズされたデータ分析サービスの完全なセットを構築しました。

次に、本稿では、動的ルール構成解析、データストレージ設計、リアルタイムデータクエリと分析などの機能の設計と実装に焦点を当て、JD Mini Programのカスタムデータ分析サービスの全体的な技術ソリューションと主要なプロセスを詳細に紹介します。

2. 技術の選択

JD ミニ プログラムのカスタム データ分析には、大量のデータ ストレージ、効率的なクエリ、低い運用および保守コストをサポートするデータ ストレージ方法が必要です。調査と比較を行った結果、ClickHouse の次の 3 つの機能が当社の技術選択要件を十分に満たすことがわかりました。

1. 列の保存とデータ圧縮をサポート

JD ミニ プログラムのカスタム データ分析では、システムのクエリと分析中にユーザーのクエリ実行効率を満たす必要があります。数百億のデータ セットで実行されたカスタム データ分析の集計結果を数秒で返すことを期待しています。比較すると、ClickHouse の列ベースのストレージ機能により、データクエリの効率が大幅に向上します。行ベースのストレージと比較して、列ベースのストレージでは、クエリ中にスキャンする必要があるデータの量を効果的に削減できます。データが行に格納されている場合、データベースは最初に行ごとにスキャンして各データ行のすべてのフィールドを取得し、次に各データ行からクエリに必要なフィールドを返して、すべてのフィールドをスキャンします。データが列ごとに整理されている場合、データベースはクエリする列のデータを直接取得できるため、不要なデータ行のスキャンを回避できます。

分析クエリの場合、通常はテーブル内の少数の列のみを読み取る必要があります。列指向データベースでは、必要なデータのみを読み取ることができます。たとえば、100 列のうち 5 列のみを読み取る必要がある場合、これにより I/O 消費を少なくとも 20 倍削減できます。

ClickHouse で使用される圧縮アルゴリズムは、列内のデータを圧縮できます。データ内の重複項目が多いほど、圧縮率は高くなります。圧縮率が高いほど、データ量は少なくなります。データ量が小さくなるほど、ネットワーク内でのデータの転送速度が速くなり、ネットワーク帯域幅とディスク I/O への負荷がさらに軽減されます。

2. 分散型水平拡張をサポートするMPPアーキテクチャ

JD ミニプログラムのカスタマイズされたデータ分析サービスには、サポート レベルの拡張が必要です。ビジネスが発展するにつれ、ミニプログラム内のデータ量はますます大きくなっていきます。調査の結果、ClickHouse は分散ストレージの特性を自然に備えていることがわかりました。大規模並列処理をサポートするMPP(Massively Parallel Processing)アーキテクチャと、各ノードに大量データを分散保存するマルチマスターフラットアーキテクチャを採用したカラムストレージデータベースです。

これにより、将来のビジネス データの拡張と保存に必要な保証が提供されます。ノードを追加するだけで水平拡張が可能になり、運用・保守コストを大幅に削減できます。

ClickHouse では、データを異なるシャードに保存できます。各シャードは、フォールト トレランスのためのレプリカのセットで構成されます。クエリはすべてのシャードで並列に処理できます。次の図に示すように、Node1 と Node2 はどちらもプライマリ シャードであり、互いのレプリカです。ただし、これはユーザーにとって完全に透過的です。

3. 多様化されたテーブルストレージエンジン

JD ミニ プログラムには、クリック、閲覧、露出、注文という 4 つの主要な分析シナリオを含む、データ分析をカスタマイズするためのシナリオが多数あります。各シナリオには、重複排除されたユーザーの数、金額の合計、平均または最大金額などの共通計算など、独自の共通の統計ニーズがあります。ClickHouse では、テーブルに対応するテーブル エンジンを設定できます。テーブル エンジンは、テーブルが格納される場所、格納方法、およびサポートされるクエリ メソッドを決定します。同時に、テーブル エンジンを ClickHouse のマテリアライズド ビューと組み合わせて使用​​することで、非常に優れたクエリ結果を実現できます。

ClickHouse には、マージ ツリー、メモリ、ファイル、インターフェイスなどの 6 つのカテゴリに 20 を超えるテーブル エンジンがあります。各テーブル エンジンには独自の特性と適用可能なシナリオがあります。シンプルなシナリオでは、シンプルなエンジンを直接使用して運用・保守コストを削減できます。また、複雑なシナリオに適したオプションもあります。

たとえば、MergeTree ファミリーの ReplacingMergeTree エンジンは、同じソート キー値を持つ重複を削除します。データ重複排除はデータマージ時にのみ実行され、バックグラウンドで不特定の時間に実行されるため、事前に計画することはできません。したがって、ReplacingMergeTree は、スペースを節約するためにバックグラウンドで重複データを削除するのに適していますが、重複データが表示されないことを保証するものではありません。

SummingMergeTree は、同じ主キーを持つ行を 1 つの行に結合し、合計値を計算します。行には、結合された行の数値データ型の列の集計値が含まれます。

AggregatingMergeTree は、パーティションをマージするときに定義された条件に従ってデータを集計し、集計するデータを事前に計算し、集計クエリで結果データを直接使用します。

3. JDミニプログラムのカスタムデータ分析の全体的なアーキテクチャ

ClickHouse の関連機能を理解した後、JD Mini Program のカスタム データ分析のための完全な技術ソリューションを紹介しましょう。

全体的なカスタム データ分析機能には、主にカスタム データ レポート、データ処理と計算、データ ストレージの 3 つの階層構造が含まれます。中心的な問題は、カスタム構成ルールに基づいて報告されたデータをどのように照合および照会するかです。解決策は、レポートされたデータ レコード内の event_id (イベント ID) を使用して特定のレポート要求データを識別し、次のデータ構造に示すように、ビジネス フィールドをマップ構造に配置することです。これにより、ビジネス データ フィールドの水平拡張が実現され、報告されたデータ レコードを簡単に見つけることができます。

データをレポートするためのチャネルには、主にゲートウェイ http リアルタイム データ チャネルと Meridian クライアント トラッキング チャネルが含まれ、これらのデータはリアルタイム データ ウェアハウスまたは HDFS オフライン データ ウェアハウスに均一に送信されます。

中間層のデータフローを通じて、Flink リアルタイム計算または MapReduce オフライン計算が実行され、元の報告データをフィルタリング、処理、計算し、最終的に ClickHouse にバッチで書き込んで、データの最終的な永続的なストレージを実現します。

この時点で、フロントエンド インターフェイスで構成されたカスタム イベントとクエリ インジケーター、フィルタリング条件、グループ化条件、その他のカスタム クエリ ルールに基づいて、オンライン クエリとデータの分析を実装できます。効果は以下の図に示されています。

4. JDミニプログラムにおけるカスタマイズされたデータ分析のプロセス設計

では、ルール エンジン サービスは、カスタム ルールに基づいてユーザーから報告されたデータをどのように動的に解析するのでしょうか?ルール エンジンの実行プロセスは、主に、カスタム データ レポート属性の構成の書き込みと、カスタム データ分析の 2 つのコア プロセスの 2 つの部分で構成されます。

まず、報告された属性構成を永続的なストレージのためにデータベースに保存する必要があります。リアルタイムデータクエリを実行すると、上記のイベントルールとインジケーターが最初に取得されます。その後、ルール エンジンはクエリ SQL スクリプトを構築し、それを実行エンジンにプッシュします。実行エンジンは SQL スクリプトを ClickHouse クラスターに送信してデータ クエリを実行し、結果をフロント エンドに返します。最後に、実行結果が非同期にキャッシュに書き込まれ、データの有効期間が設定され、次のクエリの効率が向上します。全体的な解析実行プロセスを下の図に示します。

5. JD.comミニプログラムでのカスタムデータ分析のためのテーブル設計

ClickHouse テーブルは、ローカル テーブルと分散テーブルに分かれています。分散テーブルは、データベース内のビューとして理解できる論理テーブルです。一般的に、クエリは分散テーブルを照会します。分散テーブル エンジンは、クエリ要求をローカル テーブルにルーティングしてクエリを実行し、要約して、最終的にユーザーに返します。ローカル テーブルは、実際にデータを格納するテーブルです。ローカルテーブルと分散テーブルの関係を次の図に示します。データの書き込みと読み取りの際には、書き込みと読み取りの不均衡を防ぐために、nginx を使用してリクエストの負荷分散を実装します。

JD.com のカスタム クリック イベントのデータ統計シナリオを例にとると、次の図に示すように、対応するローカル テーブル vapp_analysis_local と分散テーブル vapp_analysis_dist を作成します。

ローカルテーブル:

分散テーブル:

たとえば、JD.com のミニプログラム クリック イベントのデータ保存特性に基づいて、次の表を設計しました。

  • マスターノードとレプリカの数を設定します。シャード属性はノードのプライマリ データ ノードの数を設定し、レプリカ属性はノードのコピーの数を設定することで、データ ストレージの複数のコピーの高可用性を確保します。
  • パーティション フィールドを選択します。 ClickHouse はパーティション分割をサポートしています。パーティション フィールドは、各テーブルのデータ ディレクトリ全体の最も外側の構造であり、クエリ速度を大幅に向上させることができます。具体的な DDL 操作キーワードは PARTITION BY です。これは、テーブルがデータの列 (日付など) に従ってパーティション分割されることを意味します。最終結果として、異なるパーティションのデータが異なるファイルに書き込まれます。私たちのビジネス シナリオでは、データはレポート時間の年、月、日、YYYYMMDD (report_time) に従ってパーティション分割されます。
  • 並べ替えルールを設定します。適切なデータ並べ替えルールを設定すると、データクエリの効率が向上します。設定されたソートフィールドの順番でデータが格納され、集計計算を行う際には集計条件に従って隣接するデータも計算されます。私たちのビジネス シナリオでは、ミニ プログラムの AppID が並べ替えルールとして使用されます。ミニプログラムの AppID は、各ミニプログラムの一意の識別子です。データをクエリする場合、ほとんどのシナリオでは AppID ディメンションに基づいてデータがクエリされます。したがって、AppID をソート フィールドとして使用すると、データ集約操作の効率が大幅に向上します。
  • テーブルエンジンを設定します。クリック イベント シナリオでは、複数のコピーをサポートする ReplicatedMergeTree エンジンを設定します。これにより、データ ストレージの複数のコピーをサポートし、データの高可用性を確保できます。

上記の表のデザインでは、コンテンツ フィールドが非常に重要です。報告されたカスタム データはテーブルのコンテンツ フィールドに保存され、レポート フィールドの水平拡張をサポートする JSON 構造で保存されます。ルール エンジンが動的に生成された SQL スクリプトを Clickhouse に送信してクエリを実行すると、Clickhouse JSON 解析関数 JSONExtractString を使用して値が変換され、分析する特定のビジネス フィールドを簡単に取得できるようになります。

たとえば、JD ミニプログラムのクリック イベント テーブルからイベント コード applets_buy を持つ金額フィールド amount を取得する場合、ルール解析エンジンに基づいて構築され、ClickHouse に送信される動的スクリプトは次の形式になり、報告されたフィールドの動的な抽出を実現できます。

VI. JDミニプログラムのモニタリング カスタマイズされたデータ分析

カスタム データ分析チェーン全体には多くのリンクが関係しており、システム機能の安定した動作を確保するには適切な監視メカニズムが必要です。

MQ メッセージ キュー、Flink リアルタイム コンピューティング タスク、ClickHouse ストレージなどのミドルウェアの監視には、Grafana が提供するビジュアル監視機能を使用します。下の図のように、CPU、メモリ、ディスク I/O、ディスク使用量などの状態を直感的に確認できます。

同時に、JD Mini Program の動作中の監視のために、完全な監視およびアラーム メカニズムを提供します。このメカニズムは、カスタム アラーム ルールの構成をサポートし、JD Mini Program 自体の異常なページ データ、パフォーマンス データ、ネットワーク要求データなどの異常なデータ情報を迅速に検出するのに役立ちます。現在、すべてのオンラインミニプログラムの異常データとパフォーマンス操作を監視できます。一つのミニプログラムを例にとると、監視状況は以下の図のようになります。

上記の 2 つの監視方法に基づいて、リンク全体の JD ミニ プログラムのパフォーマンス データの変動を追跡し、パフォーマンスのボトルネックをタイムリーに発見し、運用中に発生するさまざまな問題を迅速に特定して、JD ミニ プログラム全体のビジネス開発を保護することができます。

七。要約と展望

JD Mini Program のカスタム データ分析サービスが提供する効率的で柔軟な処理機能は、JD Mini Program のデータ プラットフォームの整合性を大幅に向上させるだけでなく、業界のビジネス データの継続的な蓄積を完全に保証します。最初のサポート バッチでは、50 を超えるコア ミニ プログラムのビジネス カスタム データのレポート、分析、視覚化をサポートし、ミニ プログラム内外のユーザーの行動パスを完全に接続して、マーチャントの洗練された操作のニーズをサポートすることが期待されています。

JD Mini Programのデータ機能は、0から1への飛躍的進歩を遂げました。今後、JD Mini ProgramはJD Mini Programのインテリジェントなデータ分析モデルの構築に注力し、1からNへの飛躍を実現します。最終的には、より多くのJD Mini Program加盟店が継続的に運営戦略を最適化し、データ分析コストを削減し、ビジネス能力と効率を向上させるのに役立ちます。

<<:  スマートトラベルは「次のステップ」を迎えており、ファーウェイクラウドは西村で業界リーダーと議論している

>>:  インダストリー4.0時代の技術革新を促進するために、弾力性のあるエッジコンピューティングを導入する

推薦する

「アメリカ時間」を理解する

海外のウェブサイトが何かを宣伝しているときは、宣伝の時間を事前に知らせてくれることがよくあります。ウ...

henghost: 超高速香港サーバー (PING 5MS 未満)、双方向 CN2+アジア太平洋 BGP 帯域幅、20M 帯域幅、無制限のトラフィック

私はSonderCloud Limitedを推薦したいと思います。同社は2010年から香港の自社デー...

ウェブマスターネットワークニュース: オンライン著作権侵害対策開始、360 度モバイル検索が公開

1. B2B 電子商取引の将来はどこへ向かうのでしょうか?現在、大規模な総合B2Bサービスプラットフ...

NetEase Cloud Computing が無料 SaaS 版をリリース、ローコード開発者に 10 万の雇用を創出

最近、浙江省工業ソフトウェア産業技術連盟と浙江省ソフトウェア産業協会の指導の下、NetEase Cl...

Webmaster Network の毎日のレポート: Xiaomi 360 が Chrome に衝突し、世界ナンバーワンのブラウザになる

1. Xiaomi 360の「衝突」:ネットユーザーがXiaomi 3とXiaomi 3の戦いを観察...

週刊ニュースレビュー:オンライン音楽会社7社が月額料金の徴収を開始、LefengとJumeiがトップの座を争う

1.オンライン音楽は7月以降に完全有料化される見込みで、中小規模の音楽サイトが影響を受ける北京ビジネ...

クリーンアップでは Docker の頑固な問題を解決することはできません。

著者: 徐潔成校正:Yun Zhao Docker にとっては本当にひどい一週間でした。 3月15日...

ウェブサイトのナビゲーション分析: 迷子にならないようにする (パート 1)

さまざまなプロモーション戦略やLPO(ランディングページ最適化)を使用してトラフィックを誘導するため...

世界的に有名な共有ネットワークディスクであるFileServeが共有ダウンロードを停止

ネットワークストレージはますます人気が高まっています。ちょうど今日、世界で最も有名な共有クラウド ス...

Baidu が 1,000 社以上の P2P 企業を閉鎖、ホワイトリスト標準の第一弾を公開

深セン旺旺貸付の「行方不明」事件により、百度の宣伝は再び注目を集めた。深セン王旺ローンは以前から百度...

Kステーション事件後の連携の新たな道:内部と外部の改善、垂直と水平の統合

諺にあるように、準備なしに戦いを挑んではいけない。すべての SEO 担当者は、SEO ウェブサイトの...

記事が含まれていないか、タイトルの類似性に関連していない

私のフレンドリーリンク欄に北京の SEO があります。このブログといえば、私の 2 番目のフレンドリ...

Baiduプロモーションアカウント管理:プロモーションコストの削減とプロモーション効果の向上に関する詳細な分析

序文:私は数日前から百度のプロモーションの仕事経験について話しています。私の周りには多くの友人がいて...

Qi Ning: SEOのアイデアで武装する

一昨日、北京で開催された SEO 交流会議に参加しました。この会議は、広告が至る所にあり、大げさな宣...

ロスト・イン・タイランドから、注目すべきマーケティングのポイントがわかる

最近、とても人気のある映画があります。それは「ロスト・イン・タイランド」です。これまでの興行収入は3...