TiDBアーキテクチャよくある質問
このドキュメントには、TiDB に関するよくある質問がリストされています。
TiDB の概要とアーキテクチャ
TiDBとは何ですか?
TiDBは、ハイブリッド トランザクションおよび分析処理 (HTAP) ワークロードをサポートするオープンソースの分散 SQL データベースです。 MySQL と互換性があり、水平スケーラビリティ、強力な一貫性、高可用性を備えています。 TiDB の目標は、OLTP (オンライン トランザクション処理)、OLAP (オンライン分析処理)、および HTAP サービスをカバーするワンストップ データベース ソリューションをユーザーに提供することです。 TiDB は、高可用性と大規模データの強力な一貫性を必要とするさまざまなユースケースに適しています。
TiDB のアーキテクチャとは何ですか?
TiDB クラスターには、TiDBサーバー、PD (配置Driver)サーバー、および TiKVサーバー の3 つのコンポーネントがあります。詳細については、 TiDBアーキテクチャ 、 TiDBstorage 、 TiDB コンピューティング 、およびTiDB のスケジューリングを参照してください。
TiDB は MySQL に基づいていますか?
いいえ。TiDB は MySQL 構文とプロトコルをサポートしていますが、PingCAP, Inc. によって開発および保守されている新しいオープン ソース データベースです。
TiDB、TiKV、PD (配置Driver) のそれぞれの責任は何ですか?
- TiDB は SQL コンピューティングレイヤーとして機能し、主に SQL の解析、クエリ プランの指定、実行プログラムの生成を担当します。
- TiKV は、実際のデータを保存するために使用される分散 Key-Valuestorageエンジンとして機能します。つまり、TiKV は TiDB のstorageエンジンです。
- PD は TiDB のクラスター マネージャーとして機能し、TiKV メタデータを管理し、タイムスタンプを割り当て、データの配置と負荷分散に関する決定を行います。
TiDBの使い方は簡単ですか?
はい、そうです。必要なサービスがすべて開始されると、MySQLサーバーと同じように簡単に TiDB を使用できるようになります。 MySQL を TiDB に置き換えることで、ほとんどの場合、コードを 1 行も変更することなくアプリケーションを強化できます。一般的な MySQL 管理ツールを使用して TiDB を管理することもできます。
TiDB は MySQL とどのように互換性がありますか?
現在、TiDB は MySQL 8.0 構文の大部分をサポートしていますが、トリガー、ストアド プロシージャ、およびユーザー定義関数はサポートしていません。詳細については、 MySQLとの互換性を参照してください。
TiDB は分散トランザクションをサポートしていますか?
はい。 TiDB は、単一の場所にある少数のノードであっても、 複数のデータセンターにわたるノードのノードであっても、クラスター全体にトランザクションを分散します。
Google の Percolator からインスピレーションを得た TiDB のトランザクション モデルは、主に 2 フェーズ コミット プロトコルであり、いくつかの実用的な最適化が施されています。このモデルは、タイムスタンプ アロケータに依存して各トランザクションに単調増加タイムスタンプを割り当てるため、競合を検出できます。 PD TiDB クラスター内のタイムスタンプ アロケーターとして機能します。
TiDB を操作するにはどのようなプログラミング言語を使用できますか?
MySQL クライアントまたはドライバーでサポートされている任意の言語。
TiDB で他の Key-Valuestorageエンジンを使用できますか?
はい。 TiKV に加えて、TiDB は UniStore や MockTiKV などのスタンドアロンstorageエンジンをサポートします。今後の TiDB リリースでは、MockTiKV はサポートされなくなる可能性があることに注意してください。
TiDB がサポートするすべてのstorageエンジンを確認するには、次のコマンドを使用します。
./bin/tidb-server -h
出力は次のとおりです。
Usage of ./bin/tidb-server:
-L string
log level: info, debug, warn, error, fatal (default "info")
-P string
tidb server port (default "4000")
-V print version information and exit (default false)
.........
-store string
registered store name, [tikv, mocktikv, unistore] (default "unistore")
......
TiDB ドキュメント以外に、TiDB の知識を取得する方法はありますか?
- TiDB ドキュメント : TiDB 関連の知識を得る最も重要かつタイムリーな方法。
- TiDB ブログ : 技術記事、製品の洞察、ケーススタディを学びます。
- PingCAP 教育 : オンラインコースと認定プログラムを受講します。
TiDB ユーザー名の長さの制限は何ですか?
最大 32 文字。
TiDB の列数と行サイズの制限は何ですか?
- TiDB の最大列数のデフォルトは 1017 です。この数は最大 4096 まで調整できます。
- 単一行の最大サイズのデフォルトは 6 MB です。最大 120 MB まで数値を増やすことができます。
詳細については、 TiDB の制限事項を参照してください。
TiDB は XA をサポートしていますか?
いいえ。TiDB の JDBC ドライバーは MySQL Connector/J です。 Amitikos を使用する場合は、データ ソースをtype="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
に設定します。 TiDB は、MySQL JDBC XADataSource との接続をサポートしていません。 MySQL JDBC XADataSource は MySQL でのみ機能します (たとえば、DML を使用してredo
ログを変更する)。
Atomikos の 2 つのデータ ソースを構成したら、JDBC ドライブを XA に設定します。 Amitikos が TM と RM (DB) を操作する場合、Amitikos は XA を含むコマンドを JDBCレイヤーに送信します。 MySQL を例にとると、JDBCレイヤーで XA が有効になっている場合、JDBC は、DML を使用してredo
ログを変更するなど、一連の XA ロジック操作を InnoDB に送信します。これが2相コミットの動作である。現在の TiDB バージョンは、上位アプリケーションレイヤーJTA/XA をサポートしておらず、Amitikos によって送信された XA オペレーションを解析しません。
スタンドアロン データベースとして、MySQL は XA を使用したデータベース間のトランザクションのみを実装できます。一方、TiDB は Google Percolator トランザクション モデルを使用した分散トランザクションをサポートしており、そのパフォーマンスの安定性は XA よりも高いため、TiDB は JTA/XA をサポートしておらず、TiDB が XA をサポートする必要はありません。
TiDB は、パフォーマンスを損なうことなく、カラムナstorageエンジン (TiFlash) への大量の同時INSERT
またはUPDATE
操作をどのようにサポートできるのでしょうか?
- TiFlash柱状エンジンの変更を処理するために、DeltaTree という特別な構造が導入されています。
- TiFlash はRaftグループの学習者ロールとして機能するため、ログのコミットや書き込みに投票しません。これは、DML 操作がTiFlashの確認応答を待つ必要がないことを意味します。そのため、 TiFlashが OLTP のパフォーマンスを低下させません。さらに、 TiFlashと TiKV は別のインスタンスで動作するため、相互に影響しません。
TiFlash はどのような一貫性を提供しますか?
TiFlash はデフォルトで強力なデータ一貫性を維持します。 Raft 学習プロセスはデータを更新します。クエリ内のデータがトランザクションと完全に一致していることを確認するための TSO チェックもあります。詳細については、 非同期レプリケーションおよび一貫性を参照してください。
TiDB テクニック
データstorage用の TiKV
TiDB 内部 (I) - データ ストレージを参照してください。
データコンピューティング用の TiDB
TiDB 内部 (II) - コンピューティングを参照してください。
スケジューリング用PD
TiDB 内部 (III) - スケジュール設定を参照してください。