TiDB CloudHTAP クイック スタート

HTAPはハイブリッド トランザクションおよび分析処理を意味します。 TiDB Cloudの HTAP クラスターは、トランザクション処理用に設計された行ベースのストレージ エンジンTiKVと、分析処理用に設計された列型ストレージ エンジンティフラッシュで構成されます。アプリケーション データはまず TiKV に保存され、次にRaftコンセンサス アルゴリズムを介して TiFlash に複製されます。つまり、行ストレージから列ストレージへのリアルタイム レプリケーションです。

このチュートリアルでは、 TiDB Cloudの Hybrid Transactional and Analytical Processing (HTAP) 機能を体験する簡単な方法について説明します。このコンテンツには、テーブルを TiFlash にレプリケートする方法、TiFlash でクエリを実行する方法、およびパフォーマンスの向上を体験する方法が含まれています。

あなたが始める前に

HTAP 機能を体験する前に、 TiDB Cloudクイック スタートに従って TiFlash ノードを含むクラスターを作成し、TiDB クラスターに接続して、Capital Bikeshare サンプル データをクラスターにインポートします。

手順

手順 1. サンプル データを列指向ストレージ エンジンにレプリケートする

TiFlash ノードを持つクラスターが作成された後、TiKV はデフォルトでデータを TiFlash に複製しません。レプリケートするテーブルを指定するには、TiDB の MySQL クライアントで DDL ステートメントを実行する必要があります。その後、TiDB はそれに応じて指定されたテーブルのレプリカを TiFlash に作成します。

たとえば、 tripsのテーブル (Capital Bikeshare サンプル データ内) を TiFlash に複製するには、次のステートメントを実行します。

USE bikeshare;
ALTER TABLE trips SET TIFLASH REPLICA 1;

レプリケーションの進行状況を確認するには、次のステートメントを実行します。

SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'bikeshare' and TABLE_NAME = 'trips';

前述のステートメントの結果:

  • AVAILABLEは、特定のテーブルの TiFlash レプリカが使用可能かどうかを示します。 1は利用可能であることを意味し、 0は利用できないことを意味します。レプリカが使用可能になると、このステータスは変更されなくなります。
  • PROGRESSは、レプリケーションの進行状況を意味します。値は0.01.0です。 1.0は、少なくとも 1 つのレプリカが複製されていることを意味します。

ステップ 2. HTAP を使用してデータを照会する

レプリケーションのプロセスが完了したら、いくつかのクエリの実行を開始できます。

たとえば、さまざまな出発駅と到着駅での乗車数を確認できます。

SELECT start_station_name, end_station_name, COUNT(ride_id) as count from `trips`
GROUP BY start_station_name, end_station_name
ORDER BY count ASC;

ステップ 3. 行ベースのストレージと列指向のストレージのクエリ パフォーマンスを比較する

このステップでは、TiKV (行ベースのストレージ) と TiFlash (列型ストレージ) の実行統計を比較できます。

  • TiKV を使用してこのクエリの実行統計を取得するには、次のステートメントを実行します。

    EXPLAIN ANALYZE SELECT /*+ READ_FROM_STORAGE(TIKV[trips]) */ start_station_name, end_station_name, COUNT(ride_id) as count from `trips`
    GROUP BY start_station_name, end_station_name
    ORDER BY count ASC;
    

    TiFlash レプリカを含むテーブルの場合、TiDB オプティマイザーは、コストの見積もりに基づいて、TiKV または TiFlash レプリカのどちらを使用するかを自動的に決定します。上記のEXPLAIN ANALYZEステートメントでは、TiKV の実行統計を確認できるように、オプティマイザーに強制的に TiKV を選択させるためにHINT /*+ READ_FROM_STORAGE(TIKV[trips]) */が使用されています。

    ノート:

    5.7.7 より前の MySQL コマンドライン クライアントは、デフォルトでオプティマイザ ヒントを取り除きます。これらの以前のバージョンでHint構文を使用している場合は、クライアントの起動時に--commentsオプションを追加してください。例: mysql -h 127.0.0.1 -P 4000 -uroot --comments

    出力では、 execution info列から実行時間を取得できます。

    id                         | estRows   | actRows | task      | access object | execution info                            | operator info                                | memory  | disk
    ---------------------------+-----------+---------+-----------+---------------+-------------------------------------------+-----------------------------------------------+---------+---------
    Sort_5                     | 633.00    | 73633   | root      |               | time:1.62s, loops:73                      | Column#15                                    | 6.88 MB | 0 Bytes
    └─Projection_7             | 633.00    | 73633   | root      |               | time:1.57s, loops:76, Concurrency:OFF...  | bikeshare.trips.start_station_name...        | 6.20 MB | N/A                                                                                                                                        | 6.20 MB | N/A
      └─HashAgg_15             | 633.00    | 73633   | root      |               | time:1.57s, loops:76, partial_worker:...  | group by:bikeshare.trips.end_station_name... | 58.0 MB | N/A
        └─TableReader_16       | 633.00    | 111679  | root      |               | time:1.34s, loops:3, cop_task: {num: ...  | data:HashAgg_8                               | 7.55 MB | N/A
          └─HashAgg_8          | 633.00    | 111679  | cop[tikv] |               | tikv_task:{proc max:830ms, min:470ms,...  | group by:bikeshare.trips.end_station_name... | N/A     | N/A
            └─TableFullScan_14 | 816090.00 | 816090  | cop[tikv] | table:trips   | tikv_task:{proc max:490ms, min:310ms,...  | keep order:false                             | N/A     | N/A
    (6 rows)
    
  • TiFlash を使用してこのクエリの実行統計を取得するには、次のステートメントを実行します。

    EXPLAIN ANALYZE SELECT start_station_name, end_station_name, COUNT(ride_id) as count from `trips`
    GROUP BY start_station_name, end_station_name
    ORDER BY count ASC;
    

    出力では、 execution info列から実行時間を取得できます。

    id                                 | estRows   | actRows | task         | access object | execution info                            | operator info                      | memory  | disk
    -----------------------------------+-----------+---------+--------------+---------------+-------------------------------------------+------------------------------------+---------+---------
    Sort_5                             | 633.00    | 73633   | root         |               | time:420.2ms, loops:73                    | Column#15                          | 5.61 MB | 0 Bytes
    └─Projection_7                     | 633.00    | 73633   | root         |               | time:368.7ms, loops:73, Concurrency:OFF   | bikeshare.trips.start_station_...  | 4.94 MB | N/A
      └─TableReader_34                 | 633.00    | 73633   | root         |               | time:368.6ms, loops:73, cop_task: {num... | data:ExchangeSender_33             | N/A     | N/A
        └─ExchangeSender_33            | 633.00    | 73633   | mpp[tiflash] |               | tiflash_task:{time:360.7ms, loops:1,...   | ExchangeType: PassThrough          | N/A     | N/A
          └─Projection_29              | 633.00    | 73633   | mpp[tiflash] |               | tiflash_task:{time:330.7ms, loops:1,...   | Column#15, bikeshare.trips.star... | N/A     | N/A
            └─HashAgg_30               | 633.00    | 73633   | mpp[tiflash] |               | tiflash_task:{time:330.7ms, loops:1,...   | group by:bikeshare.trips.end_st... | N/A     | N/A
              └─ExchangeReceiver_32    | 633.00    | 73633   | mpp[tiflash] |               | tiflash_task:{time:280.7ms, loops:12,...  |                                    | N/A     | N/A
                └─ExchangeSender_31    | 633.00    | 73633   | mpp[tiflash] |               | tiflash_task:{time:272.3ms, loops:256,... | ExchangeType: HashPartition, Ha... | N/A     | N/A
                  └─HashAgg_12         | 633.00    | 73633   | mpp[tiflash] |               | tiflash_task:{time:252.3ms, loops:256,... | group by:bikeshare.trips.end_st... | N/A     | N/A
                    └─TableFullScan_28 | 816090.00 | 816090  | mpp[tiflash] | table:trips   | tiflash_task:{time:92.3ms, loops:16,...   | keep order:false                   | N/A     | N/A
    (10 rows)
    

ノート:

サンプル データのサイズが小さく、このドキュメントのクエリは非常に単純であるため、オプティマイザがこのクエリに TiKV を選択するように強制し、同じクエリを再度実行した場合、TiKV はそのキャッシュを再利用するため、クエリは非常に多くなる可能性があります。もっと早く。データが頻繁に更新されると、キャッシュが失われます。

もっと詳しく知る

エコシステム
TiDB
TiKV
TiSpark
Chaos Mesh
© 2022 PingCAP. All Rights Reserved.