|+| 101 TiDB テクニカルエッセンシャル講座へようこそ、これはモジュール1 |+|  TiDBデータベースアーキテクチャの概要です。

私の名前はジェフであり、私はあなたの講師です。

このモジュールを修了した後、あなたは TiDB データベースの全体的なアーキテクチャを理解し、TiDBサーバー、TiKV、PDの主な特徴を説明することができるようになります。 |+| |+|

開始する前に、|+|TiDBと言うときには、2つの意味があることを知っておく必要があります。

最初のものはデータベースそのもの、つまりTiDBです。次に、TiDBデータベース内にTiDBコンポーネントがあります。 |+|

|+|一度これを理解すれば、問題を引き起こすことはありません。

TiDBのアーキテクチャに進みましょいます。

|+|TiDBは、オンライントランザクション処理とオンライン解析処理の両方をサポートする分散リレーショナルデータベースです。 |+|

データベースは、OLTPおよびOLAPの両方のユースケースをサポートするものを|+|HTAPデータベースとも呼ばれます。

|+|TiDBは水平スケールアウトとスケールイン、金融グレードの高可用性、リアルタイムのHTAP、およびクラウドネイティブネイティブの分散サポートを持っています。 |+|

さらに、TiDBはMySQL 5.7クライアントプロトコルと互換性があり、MySQLエコシステムとも互換性があります。 |+|

TiDBデータベース」の3つのコンポーネントは「PDクラスタ」、「TiDBサーバー」、および「TiKV」です。 元の英文に存在する場合は、|+|を翻訳結果に追加します。

PDクラスタは|+|データベース全体の制御センターであり、TiDBデータベースの脳と考えてください。

これは、グローバル Timestamp Oracle タイムスタンプの生成、TiKV ノードでのリージョンの配布のスケジュール、TiKV ノードの健全性と配布状況の収集、および分散トランザクションにトランザクションIDを割り当てる責任があります。 |+| |+| |+|

PD自体も少なくとも3つのノードで構成され、高可用性の機能を持っています。 |+|

We recommend that you deploy an odd number of PD nodes.  偶数ではないPDノードの展開をお勧めします。

|+|TiDBサーバーは、以前言及した構成要素であり、クライアント|+|接続を処理する責任があります。言い換えると、TiDBデータベースに接続すると、クライアントはTiDB|+|サーバーコンポーネントに接続します。

TiDBサーバーは、クライアント接続、SQL文の解析、SQL文のコンパイル、実行計画の生成、およびクライアントアプリケーションに結果を返す責任があります。 |+| |+|

実行計画は、クエリを満たすためにデータベースが踏む手順です。

|+| TiDBはデータをどこに保存しているのかと思っているかもしれませんが、

それは素晴らしい質問です、OLTPデータはkey valueペアの形式でTiKVクラスタに格納されています。 |+|

`TiKV`クラスタは、|+|データの永続性の世話、並行制御、ストレージレベルでのデータフィルタリング（|+|存在する場合は英語の文のようにそれらを戻す必要があります）、問い合わせが速く実行され、高可用性を提供し、データが一貫性を持つようにします。

TiKVモジュールで|+|行われる方法について話し合います。

TiDBサーバーレイヤーはステートレスであり、実際には複数のTiDBサーバーインスタンスを実行します。 |+|

各インスタンスには独自のIPアドレスがありますが、これを使用してユーザーが接続するのではなく、LVS、HAプロキシ、またはF5などのロードバランサーを介して、外部世界に1つのIPアドレスを提供することを実践する必要があります。 |+| |+|

ロードバランサーを使用することで、|+|クライアント接続が複数の TiDB サーバーインスタンスに均等に分散されることが保証されます。

TiFlashは列指向ストアエンジンで、TiDBにOLAPの機能を提供します。 |+|

TiKVはデータの主要なターゲットです。 |+|

TiKVはRaft分散合意アルゴリズムを使用して、データをTiFlashと同期します。これにより、負荷分散と強力な一貫性のある読み取りが保証されます。|+| （注：日本語には全角スペースを使う場合が一般的ですが、本プログラムでは出力の見やすさから半角スペースを使用しています）

TiFlashもリアルタイムの更新をサポートしています。

|+| TiKVとTiFlashの組み合わせがTiDBをHTAPデータベースにするものです。

次に、私たちはTIDB、TiKV、TiFlash、およびPDの|+|主な機能の実装原則と特徴について議論します。

|+|TiDBサーバーの主要機能や実装原則について詳しく見ていきましょいます。

|+| TiDB サーバー自体は SQL コンピューティングエンジンにのみ責任を持ち、データをストアしません。|+| そのため、TiDB サーバーはステートレスです。

当社のシステムが大量の同時接続を処理する必要がある場合、TiDBサーバーインスタンスを追加して負荷分散を行うことで、高並列性処理能力を向上させることができます。 |+|

|+|最初に注意すべきことは、クライアント接続を処理することです。

ユーザーはユーザー名とパスワードによって認証され、接続されたユーザーは権限を持っています。 つまり、彼らはデータベースをクエリできます。これらのタスクは主にプロトコルレイヤーモジュールによって実行されます。|+| |+|

|+| ナンバー・トゥーは、SQL文の解析とコンパイルです。

SQL文を聞いた後で。

|+|TiDBサーバーは、コンパイルプロセス中に解析およびコンパイルモジュールによって実行され、最適化および実行計画を生成します。|+|これらのタスクは、TiDBサーバーによって実行されます。

|+|リレーショナルおよびKVデータの変換。

データがキーと値のペア形式でTiKVに保存されるため、
リレーショナルデータベーステーブル（テーブル、インデックス、行を持つ）とは大きく異なり、
キーと値ペア形式の構造があります。|+| |+|

SQLを実行するには、リレーショナルデータとKVストレージの間を |+| 変換できる必要があります。

次に、SQL文の実行。

コンパイルされた実行計画に従って、バッチ処理でTiKV上で実行されます。 |+|

データは実行モジュールと|+|DistSQLモジュールによって読み取られます。

トランザクションに関連する操作はトランザクションモジュールとKVモジュールによって完了されます。 |+|

オンライン DDL の実行。

TiDBデータベースは、データ|+|定義言語の操作でテーブルをロックしないように設計されています。

これは、スキーマロードモジュール、ワーカーモジュール、および開始ジョブモジュールによって実行されます。 |+|

最後に、ガベージコレクション。

ガベージコレクション |+| バックエンドモジュールは、期限が切れた古いバージョンからデータを回復する責任があります。そして |+| この部分は TiKV コースで説明されます。

次に、TiKVモジュールを見てみましょいます。

|+|私たちはTiKVについて何度か言及しており、それは私たちの関係型データ、つまりOLTPデータを格納するために扱われます。

|+|永続的なデータ。

TiKVは永続的なリレーショナルストレージを提供するために、TiDBデータベースにRocksDBストレージエンジンを選択しました。|+|このようにして実現されます。

RocksDB は LSM ツリー データ構造を基にしています。 |+|

RocksDBは、TiKVの永続的なストレージエンジンです。

|+| RocksDBエンジンは、先行ログのようなメカニズムを使用して、データが失われないようにします。

|+|次の項目、分散トランザクションサポートについて、TiDBはGoogleが公開したPercolatorトランザクションモデルに基づいた2相コミットアプローチを使用しています。|+|

Percolatorトランザクションモデルは、ストレージロックスペースが各KVノードで個別に割り当てられることを保証し、これにはRocksDBのカラムファミリーロックが使用されます。これはカラムクラスタとも呼ばれます。|+| 元の英文に存在する場合は、|+|を翻訳結果に戻します。

Timestamp OracleとPDも|+|このプロセスに関与しています。

TiDBデータベースは2つのロッキングモード、楽観的ロッキング|+|と悲観的ロッキングをサポートしています。

次の項目は、レプリカの強い整合性と高可用性です。

|+| Raftアルゴリズムでは、データをリージョンに格納し、各リージョンには3つのレプリカがあります。 |+| デフォルトでは、レプリカのサイズは96メガバイト以下でなければなりません。レプリカのサイズがこの制限を超える場合は、複数のリージョンに分割されます。これにより、TiDBが動的にスケーリングできることが保証されます。 |+|

|+|次に、MVCC、またはマルチバージョン並行制御があります。

MVCCは高並行読み取りと書き込みに必要です。 |+|

これは、同時実行制御、スナップショット分離レベル、|+|分散トランザクション、高速データ復旧のような機能の基礎となります。

TiKVのMVCC実装は、キーの後に|+|バージョン番号を追加し、歴史的なバージョンデータが一定の|+|時間に達した後、TiDBサーバーのガベージコレクションでクリーンアップされます。

次は、コプロセッサーです。

この|+|は本当にオペレータープッシュダウンです。

ローカルノードでデータのフィルタリング、|+| 部分集計などを実行できるようになるコプロセッサ機能は、TiKVがSQL計算を|+| 分散ストレージノードにプッシュダウンして完了できるようにします。

この仕組みは、ネットワークの相互作用コストを削減するだけでなく、TiDBサーバーの計算リソース、CPU、キャッシュおよびメモリを最大限に活用し、分散ストレージノードの並列処理能力も最大限に活用します。|+| （注意：エンジニアのもとの英文に |+| が存在していた場合、訳文にもそれらを含める必要がありますが、その存在自体は説明する必要はありません。）

|+|次に、プレイスメントドライバーについて話します。プレイスメントドライバーを覚えていますか。

|+|我々は先に述べたが、PDと呼ばれることが最も一般的であります。

|+|を見えないものと考えて、英文中に存在する場合は翻訳結果に戻してください: TiDBデータベースの頭脳です。

PDは、TiKVクラスタ全体のメタデータストレージを担当しています。

|+|PDは、TiDBクラスタ上のデータの場所を維持する責任があり、Raftによって使用される情報を維持する責任があります。|+|

|+|TiDBサーバーはPDからルーティング情報を取得し、その情報を使用してTiKVクラスタ内のデータにアクセスします。 |+|

加えて、位相的ラベル情報がPDに保存されます。次のモジュールで説明します。 |+|

私は以前、PDに関する推薦を行いました。覚えていますか。 |+|

ここで不快な一時停止をするつもりです。

|+|不快な思いをしました。

PDクラスタには奇数個のPDノードがあるべきであるという推奨事項がありました。 |+|

次のように翻訳して、単一行で出力してください。ただし、看板は見えなくても、元の英文に存在する場合は、翻訳された結果に付け加える必要があります。: 私たちは、それが次のモジュールでなぜ必要なのかについて説明します。

次にPDはグローバルIDとトランザクションIDを割り当てる責任があります。 |+|

グローバルID（ストアID、|+|リージョンID、ピアID、テーブルIDインデックスIDなど）および分散|+|トランザクションのトランザクションIDも、PDによって割り当てられます。

PDは、Timestamp Oracleを使用してグローバルタイムスタンプを生成する責任があります。 |+|

Timestamp Oracleは、データベース内のトランザクションの順序を保証するために使用されるグローバルタイムスタンプです。 |+|

データベースにとって正確なトランザクションの順序を知ることは非常に重要です。もしもロールバックする必要がある場合は、後で詳細を紹介します。 |+|

|+| PDは、スケジューリングのためにクラスタ情報を収集する責任があります。

TiKVノード|+|は、定期的にクラスタの状態をPDに報告します。

PDは、関連する状態に応じてTiKVノード間で|+|リージョンのスケジューリングを担当しています。

これは、前のセクションで述べたように、レプリカを96メガバイトに分割することに関係しています」ということです。 |+|

We will introduce the details この詳細については後で紹介します。|+| later.

最後に、PDはTiDBダッシュボードサービスの提供を担当しています。

PDホストは小さなウェブサーバーをホストしており、TiDBダッシュボードを実行しています。 |+|

ダッシュボードは、あなたのTiDBデータベースに関する情報を|+|簡単に見つけることができる場所を提供します。

再度、後でこれについて話し合うことになります。

|+| 私たちのストレージストーリーの2番目の要素は、TiFlashです。TiFlashは、HTAPの分析側を実装していることを思い出してください。|+|

このとき、ストレージのOLTP側としてTiKVが必要であると言及するのに適したタイミングです。 |+|

PinpCAPには、分析が不要なユースケースを持つ顧客がいて、これらの顧客はストレージとしてTiKVのみを使用しています。 |+|

本当に強化された分析機能が必要と判断された場合は、TiFlashを簡単にインストールすることで、TiDB環境にOLAP機能を追加できるため、|+|それらが元の英語文で存在する場合は、それらを翻訳結果に再度追加する必要があります。

|+|TiFlashを特別なものにするいくつかの機能があります。

|+|非同期レプリケーション。

TiKVは実際には主要なストレージコンポーネントであり、TiFlashはそれなしでは動作できません。 |+|

この文の別の表現は、「私は、TiKVだけでTiDBデータベースを持つことができますが、TiFlashだけで持つことはできない」ということです。 |+|

TiDB にデータを挿入、更新、または読み込む場合、データはまず TiKV に書き込まれ、その後 TiFlash にレプリケートされます。 |+|

この操作は非同期で実行されました。

raft Learner」という特別なロールがあり、このタスクを実行するために使用されます。Raft Learner|+|がこれを処理します。

|+| もし TiFlash ノードがダウンした場合、あるいはネットワークのレイテンシが高い場合は、データは TiKV から読み取ることができます。|+| この冗長性により、通常の操作が確保されます。

このレプリケーションメカニズムは TiKV システムの自動的な負荷分散と高可用性を受け継いでおり、追加のレプリケーションパイプラインに依存することなく、TiKV データ送信を1:Nの方法で直接受信するため、障害復旧しながら、TiKV システムのデータが失われていない限り TiFlash のレプリカをいつでも作成できます。 |+| |+| |+|

|+|次に、一貫性を確保するために TiFlash は TiKV と同じスナップショット分離レベルを提供します |+| これにより、読み取りデータが最新であることが保証され、以前に書き込まれたデータも読み取れます。この一貫性は、データのレプリケーション進捗を検証することで実現されます。 |+|

|+|私たちの読み取りリクエストが受信されるたびに、リージョンレプリカとTiFlashは進捗状況を開始します|+|Leaderノードに非常に軽いプロシージャコールリクエストを送信し、プロセスが読み取りリクエストのタイムスタンプでカバーされるデータを少なくとも含んでいることを確認した場合にのみ読み取りに応答します|+|。

|+|次に、番号三または三番目のもの。

カラム指向ストアは、アナリティクスクエリの効率を改善します。 |+|

はい、私たちはこれまでも言ってきたことですが、繰り返す価値のあることです。TiFlashは列指向のデータストアです。

|+|列指向型データストアは分析グローバルに最適に設計されましたが、|+|トランザクション処理には行ベースのストレージを使うのが最適です。つまり、インデックスと小規模な結果セットを必要とするユースケースには行ベースのストレージが理想的です。|+|

列指向形式のストレージは、データを複数回読み取る分析技術やテーブル スキャンを必要とする使用例に最適です。 |+|

|+||MPPの導入は、大規模並列処理機能アーキテクチャを提供するため、複数のサーバーノードにパラレルにコンピューティングタスクを分散します。| |+|

計算が各ノードで完了した後、各パートの結果がまとめられ、最終的な答えが得られます。 |+|

|+|この処理モデルにより、TiFlash上での分析クエリサービスがより効率的になります。

|+|次に、ビジネスア分離。

This is a good one, as mentioned earlier the カラムストア is very  friendly to statistical analysis queries or OLAP and the rowストア is friendly to transaction OLTP,  so TiKV and TiFlash can be used for two distinct business scenarios or ユースケースs, OLTP and OLAP.

これは良いものであり、先に述べたように、カラムストアは統計分析クエリやOLAPに非常に|+|適しており、行ストアはトランザクションOLTPに適しています。 |+|したがって、TiKVとTiFlashは、OLTPとOLAPの2つの異なるビジネスシナリオまたはユースケースに使用することができます。

|+|同じ環境を両方のユースケースで使用することは、管理費用と処理コストを節約できます。

この「+」は目に見えないものとして考えてくださいが、それが英語の文章に存在する場合は翻訳結果に記入してください。Plus and this is huge とは、OLTPからOLAPへのETLプロセスの作成と管理が不要であるため、より多くの時間とリソースを節約できることを意味します。 |+| |+|

|+|そして、最後にこれは私のお気に入りであり、TiKV であろうと TiFlash であろうと、彼らの SQL エントリは TiDB サーバーです。 |+|

それは何を意味するのでしょうか。

``を見えないものとして扱って、翻訳結果に``がある場合は元の英文にあった位置に戻してください: 両方の側面のクエリはTiDB |+| サーバーを経由して処理され、TiDBサーバー内のオプティマイザはクエリに基づいてTiKVとTiFlashの間で選択できます。

したがって、|+|これはSQL文に基づいています。

DBAまたは開発者として、クエリを書くあなたには、TiDBがデータを取得する最適な場所を|+|選択します。

心配しなくてもいいですよ。

完全にあなたにとって透明です。

|+|最初のモジュールの終了を示します。

私たちはTiDBとそのアーキテクチャを簡単に見てきました。

|+|TiDBデータベースの全体的なアーキテクチャを説明できるようになり、...

まあ、「理解する」というのは本当の目標ではないと言えます。代わりに、TiDBサーバー、TiKV、そしてプレイスメントドライバーの主な機能を説明できると言えます。|+|（「|+|」が英文の中にある場合、翻訳結果に再度挿入してください）

TiDBデータベースとTiDBサーバーの違いを説明できますか。

|+|データベースとは、データベース環境全体を指します。

TiDBサーバーは、一方で| + | TiDBデータベースのSQL処理コンポーネントを参照します。 |+|

|+|TiDBサーバーはTiDBデータベースのコンポーネントです。

|+|お時間を割いてこのモジュールをご覧いただきありがとうございます。皆様が楽しんで多くを学んでいただけたことを願っています。