TiDB CloudとSnowflakeでEコマースシステムを構築する
著者: Zhen Chen, Zhiyuan Liang (PingCAP TiDBコミュニティエンジニア)
編集者: Fendy Feng, Tom Dewan
TiDB Cloudは、水平方向の拡張性を備えたオープンソースのHTAP (Hybrid Transactional and Analytical Processing) データベースであるTiDBの優れた点のすべてを、フルマネージのDBaaSとして、お客様のクラウド上で実現します。Snowflakeは、クラウドコンピューティングをベースとしたデータウェアハウス企業で、クラウドベースのデータストレージと分析サービスを提供しています。
この2つのSaaS (Software-as-a-Service) を組み合わせることで、Eコマースシステムを素早く構築することができたのです。このシステムは、大量のデータをリアルタイムに処理することができます。また、従来のMySQLソリューションが抱えていたスケーラビリティのボトルネックも解消され、特にビジネスデータの量が急増したときに威力を発揮します。さらに、このシステムは運用や保守も簡単です。
このチュートリアルでは、このEコマースソリューションを紹介し、設定方法と使用方法を説明します。また、次のビデオ (※英語) を直接ご覧いただくこともできます。
このソリューションの概要
このシステムは、TiDB Cloudを使用して、注文、発送、ユーザープロファイルなどのビジネスデータをリアルタイムで処理、保存し、Snowflakeをデータウェアハウスとして使用して、コールドデータのアーカイブとデータウェアハウスモデリングを提供します。TiDBの強力なリアルタイム分析機能により、本ソリューションは分析結果を確認するための統一ビューを提供し、その結果を意思決定のための迅速なビジネスインテリジェンスに変換することができます。本ソリューションのインターフェースは、ダッシュボード、顧客、商品、おすすめ商品、注文、パイプラインの6つのセクションから構成されています。
ダッシュボード
ダッシュボードでは、TiDB Cloudから返されるすべての分析結果を簡単に確認することができます。例えば、商品アイテムや価格別の売上上位をリアルタイムで確認したり、特定日やリアルタイムで総収入額、総注文販売数、総顧客数を確認したりすることができます。

ダッシュボードページの下部には、注文テーブルから今日の注文をフィルタリングして合計を計算し、2分ごとにorder_stats_historyテーブルに書き込むリアルタイム分析チャートも表示されます。

顧客
Snowflakeでは、各顧客の支出額に応じて、富裕層と低富裕層というラベルを貼ります。ある顧客の支出額が全顧客の平均支出額より大きい場合、その顧客は高資産家ユーザーとしてラベル付けされ、そうでない場合、低資産家ユーザーとしてラベル付けされます。顧客のページでは、ユーザー名を入力することで、顧客のユーザーラベルと平均支出額を簡単に確認することができます。

商品
商品ページには、すべての商品とその価格が表示されます。

おすすめ商品
おすすめ商品ページで任意のお客様のユーザー名を入力すると、そのお客様の購入希望に応じたおすすめ商品の一覧を取得することができます。

注文
注文ページでは、すべての注文をリアルタイムで確認できるほか、任意の顧客のユーザー名を入力することで、その顧客のすべての注文をリアルタイムで確認することも可能です。

パイプライン
パイプラインのページでは、TiDB CloudとSnowflakeの間のパイプラインを構築するためのガイドが表示されます。これについては、後で詳しく説明します。

システム構成
下図は、当社のEコマースシステムのアーキテクチャを示したものです。ビジネス層 (フロントエンドアプリケーション)、データセンター層 (TiDB Cloud)、データウェアハウス層 (Snowflake) の3つの層から構成されています。

ビジネスレイヤー
ビジネスレイヤーは、フロントエンドのアプリケーションが注文や配送情報などの大量のビジネスデータを生成する場所です。
データセンターレイヤー
データセンター層では、ビジネス層から移行したビジネスデータをTiDB Cloudが収集・保管し、売れ筋商品や単価の高い・低い商品のレコメンド、富裕層・低富裕層顧客のフィルタリング、販売週報作成などのデータサービスを提供する。また、TiDB Cloudは、ユーザーがリアルタイムで注文や配送情報を照会できる統合ビューを提供し、ビジネススタッフは日々の商品売上をモニターし、顧客の消費を分析し、購買行動に応じて顧客にラベル付けすることがリアルタイムで可能です。
データウェアハウスレイヤー
このレイヤーでは、SnowflakeはTiDB Cloudから過去の注文や発送情報などのコールドデータをアーカイブするデータウェアハウスとして機能します。また、Snowflakeは完全なデータウェアハウスのモデリングを提供します。例えば、各顧客の月次請求額を計算することができます。
このソリューションを試す前に
このソリューションでは、すべてのデータ操作を実行するためにカスタムバックエンドが必要です。そのため、自分で試してみたい場合は、次の設定ガイドを確認して、設定方法と使用方法を学んでください。
ステップバイステップの設定ガイド
デモ用バックエンドの実行
- アプリケーションのGitHubリポジトリを開き、[Open in Gitpod] をクリックします。

- GitpodがあなたのGitHubアカウントにアクセスすることを承認します。[Continue with GitHub] をクリックし、GiHubアカウントにサインインします。

- 認証が終わると、新しいワークスペースが自動的に実行されます。gitpod.ymlでスクリプトを定義しています。
- Simple Browserタブで、「Endpoint」フィールドの下にある [Check] をクリックします。ポート 8080 の準備ができると、Gitpod のワークスペースにライブデモのプレビュータブが表示されます。
ワークスペースが正常に実行されると、バックエンドサーバーは 8080 番ポートを提供するようになります。しかし、Gitpodワークスペースでは、ポートを転送する必要があります。以下のスクリーンショットに示すように、Simple BrowserタブのEndpointフィールドで公開ポート8080のURLを見つけることができます。

警告:Gitpodのプレビュータブには制限があり、操作に失敗する可能性があります。これを避けるため、エンドポイントURLをコピーし、新しいブラウザのタブに貼り付けることをお勧めします。
デモの構成
- このデモにアクセスし、先ほどコピーしたエンドポイントURLをエンドポイントフィールドに貼り付けます。そして、[Check] をクリックします。これで、8080番ポートに正常に接続されました。

2. Walkthroughをクリックし、ガイドに従ってTiDB Cloudにサインインし、設定します。TiDB Cloudのアカウントをお持ちでない方は、まずこちらをクリックしてサインアップしてください。

TiDB Cloudの接続を設定する
- TiDB Cloudを1年間無料で試用できるDeveloper Tier (※2022年11月1日よりDeveloper TierはServerless Tierに変わりました) のクラスタを作成します。Create a Cluster (Dev Tier) ページで、クラスタ名、パスワード、クラウドプロバイダ (Dev Tierでは AWSのみ使用可能)、地域 (近隣の地域を推奨) を設定します。その後、[Create] をクリックしてクラスタを作成します。
注意:TiDB Cloudクラスタの作成には5~15分程度かかります。作成状況はActive Clustersページで確認することができます。
- クラスタを作成すると、Active Clusters ページが表示されます。このページの右側で、[Connect] をクリックします。

- ポップアップウィンドウで、[現在のIPアドレスを追加する] をクリックして、現在のIPアドレスを記入します。次に、[フィルタの作成] をクリックして、トラフィックフィルタを作成します。
- MySQLの文字列をコピーします。後でSQLクライアントと接続する際に使用します。

注:Gitpod Workspaceを使用する場合、ここでIPアドレス0.0.0.0/0を入力すると、Allow Allトラフィックフィルタを設定できます。

5. デモページに戻り、TiDB Cloud Host AddressとPasswordを設定します。このデモでは、データベースECOMMERCEを作成します。

- TiDB Cloudに接続します。入力フィールドを確認し、各フィールドが正しいことを確認します。[Continue] をクリックします。
- TiDB Cloudの接続に成功したら、[Create] をクリックしてスキーマを作成します。

- 初期データをインポートします。[Import ] をクリックします。

Snowflakeの接続を設定する
Snowflakeクラスタの作成方法に関するガイダンスを得るには、[Walkthrough] をクリックします。

Snowflakeクラスタを作成する
- こちらをクリックして、Snowflakeアカウントを登録し、ご希望のクラスタバージョン、クラウドプロバイダー、リージョンを選択してください。
- Snowflakeのアカウントを登録すると、ユーザー名やパスワードなどの登録情報が記載されたメールが送信されます。アカウントを有効にするには、メールに記載されているSnowflakeのリンクをクリックしてください。
- アカウントが有効になると、ログイン用のアカウントURLが表示されます。

- アカウントにログインしてください。
- Snowflakeの管理ページで、左側のナビゲーションパネルで、Admin > Partner Connectを選択します。Data Integrationで、[ETleap] を選択します。

注意:(1) このステップは、TiDBからSnowflakeへのさらなるデータパイプラインのためのものです。 (2) Snowflakeトライアルアカウントは30日、ETleapアカウントは15日後に有効期限を迎えます。
- Etleapへの [Connenct] ポップアップで、[Connect] をクリックします。

- ETleapのアカウントを有効化します。確認ポップアップで、[Activate] をクリックします。ETleapのページで、[CREATE ACCOUNT] をクリックして、アクティベーションを完了します。


- アカウントが設定されると、以下のような情報を得ることができます。このデータは、以降の手順で使用します。
SNOWSQL_HOST=GQ01328.ap-northeast-1.aws.snowflakecomputing.com SNOWSQL_ACCOUNT=GQ01328 SNOWSQL_WAREHOUSE=PC_ETLEAP_WH SNOWSQL_DATABASE=PC_ETLEAP_DB SNOWSQL_SCHEMA=PUBLIC SNOWSQL_USER=<admin username> SNOWSQL_ROLE=ACCOUNTADMIN SNOWSQL_PWD=<admin password>
Snowflakeに接続する
- デモページに戻ります。[Connect to Snowflake] で、保存したばかりの情報をフィールドに入力し、[Continue] をクリックします。バックエンドが接続を確認します。

- Snowflakeが接続された後、[Create] をクリックしてSnowflake Schemaを作成します。
- スキーマを作成したら、[Continue] をクリックします。これにより、デモコンソール・ページが表示されます。

TiDB CloudとSnowflakeの間のパイプラインを作成
上記の手順を終えると、コンソールページが表示されます。このページでは、Snowflake上でオフライン分析を実行し、TiDBとSnowflakeの間にパイプラインを作成することができます。そして、Snowflakeの分析データをTiDBに書き戻すことができます。

TiDBからSnowflakeへのETLデータ転送
ETleapなどのETL (Extract, Transform, Load) ツールを使用すると、TiDBからSnowflakeにデータを同期させることができます。ステップバイステップの同期ガイダンスについては、ETleapガイダンスをクリックしてください。
Snowflakeでのオフライン解析の実行
アナリティクスの計算ジョブは3種類あります。それぞれのジョブを選択し、SnowflakeのCalc User Labelsを1つずつクリックして計算を実行します。

TiDBにデータを書き戻す
SnowflakeからTiDBに分析データを書き込むには、「Write Back from Snowflake to TiDB」セクションに移動し、[Write Back] をクリックします。

分析データをTiDBに書き戻すと、システム構成は終了です。
結果を検証する
あなたはこのデモを設定し終えた後、あなたは左側のパネルにあるボタンをクリックして、このデモを設定することが正常に行われているかどうかを確認するために結果を検証することができます。例えば、ダッシュボードをクリックすると、アイテムの種類と価格によるトップセールスが分かりやすく表示されます。[顧客] をクリックすると、各顧客のユーザーラベルと平均支出額が確認でき、[おすすめ商品] をクリックすると、指定した顧客のおすすめ商品リストが確認できます。[注文] をクリックすると、各顧客が行ったすべての注文を確認できます。




これで、すぐにこのソリューションで作業することができます。私たちがどのようにソリューションを構築したかに興味がある方は、GitHubでソースコードを見ることができます。 また、TiDB Cloudをほんの数分で試すことができます。
TiDBを体験するには、コミュニティエディションまたはTiDB Cloud無料トライアルをお試しください。日本語ドキュメントのTiDBクイックスタートガイド、またはTiDB Cloudワークショップガイドのご利用をお勧めします。ご不明な点などございましたら、お問い合わせフォームよりご連絡ください。 また、GitHubにて問題を報告することもできます。
その他の参考資料:
RetoolとTiDB Cloudを使って30分でリアルタイムカンバンを作る