TiDBアーキテクチャに関するよくある質問

このドキュメントでは、TiDB に関する最もよくある質問を一覧表示します。

TiDB の紹介とアーキテクチャ

TiDBとは?

TiDBは、Hybrid Transactional and Analytical Processing (HTAP) ワークロードをサポートするオープンソースの NewSQL データベースです。 MySQL と互換性があり、水平方向のスケーラビリティ、強力な一貫性、および高可用性を備えています。 TiDB の目標は、OLTP (オンライン トランザクション処理)、OLAP (オンライン分析処理)、および HTAP サービスをカバーするワンストップ データベース ソリューションをユーザーに提供することです。 TiDB は、高可用性と大規模データとの強力な整合性を必要とするさまざまなユース ケースに適しています。

TiDB のアーキテクチャとは?

TiDB クラスターには、TiDBサーバー、PD (Placement Driver)サーバー、および TiKVサーバーの 3 つのコンポーネントがあります。詳細については、 TiDBアーキテクチャTiDB ストレージTiDB コンピューティング 、およびTiDB スケジューリングを参照してください。

TiDB は MySQL をベースにしていますか?

いいえ。TiDB は MySQL の構文とプロトコルをサポートしていますが、これは PingCAP, Inc. によって開発および保守されている新しいオープン ソース データベースです。

TiDB、TiKV、PD (Placement Driver) のそれぞれの責任は何ですか?

  • TiDB は SQL コンピューティングレイヤーとして機能し、主に SQL の解析、クエリ プランの指定、エグゼキューターの生成を担当します。
  • TiKV は、実際のデータを格納するために使用される分散 Key-Value ストレージ エンジンとして機能します。つまり、TiKV は TiDB のストレージ エンジンです。
  • PD は、TiKV メタデータの管理、タイムスタンプの割り当て、データの配置と負荷分散の決定を行う TiDB のクラスター マネージャーとして機能します。

TiDB は使いやすいですか?

はい、そうです。必要なサービスがすべて開始されると、MySQLサーバーと同じくらい簡単に TiDB を使用できます。ほとんどの場合、コードを 1 行も変更することなく、MySQL を TiDB に置き換えてアプリケーションを強化できます。また、人気のある MySQL 管理ツールを使用して TiDB を管理することもできます。

TiDB は MySQL とどのように互換性がありますか?

現在、TiDB はMySQL 5.7構文の大部分をサポートしていますが、トリガー、ストアド プロシージャ、ユーザー定義関数、および外部キーはサポートしていません。詳細については、 MySQL との互換性を参照してください。

TiDB は分散トランザクションをサポートしていますか?

はい。 TiDB は、単一の場所にある少数のノードであろうと、多数のノードであろうと、クラスター全体にトランザクションを分散します複数のデータセンターにまたがるノード

Google の Percolator に触発された TiDB のトランザクション モデルは、主に 2 フェーズ コミット プロトコルであり、いくつかの実用的な最適化が行われています。このモデルは、タイムスタンプ アロケータに依存して、トランザクションごとに単調に増加するタイムスタンプを割り当てるため、競合を検出できます。 PDは、TiDB クラスターでタイムスタンプ アロケーターとして機能します。

TiDB を操作するには、どのプログラミング言語を使用できますか?

MySQL クライアントまたはドライバーがサポートする任意の言語。

TiDB で他の Key-Value ストレージ エンジンを使用できますか?

はい。 TiKV に加えて、TiDB は UniStore や MockTiKV などのスタンドアロン ストレージ エンジンをサポートします。今後の TiDB リリースでは、MockTiKV がサポートされなくなる可能性があることに注意してください。

TiDB がサポートするすべてのストレージ エンジンを確認するには、次のコマンドを使用します。

./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 まで調整できます。
  • 1 行の最大サイズのデフォルトは 6 MB です。この数は最大 120 MB まで増やすことができます。

詳細については、 TiDB の制限事項を参照してください。

TiDB は XA をサポートしていますか?

いいえ。TiDB の JDBC ドライバーは MySQL JDBC (Connector/J) です。 Atomikos を使用する場合は、データ ソースをtype="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"に設定します。 TiDB は、MySQL JDBC XADataSource との接続をサポートしていません。 MySQL JDBC XADataSource は MySQL でのみ機能します (たとえば、DML を使用してredoのログを変更します)。

Atomikos の 2 つのデータ ソースを構成したら、JDBC ドライブを XA に設定します。 Atomikos が TM と RM (DB) を操作する場合、Atomikos は XA を含むコマンドを JDBCレイヤーに送信します。 MySQL を例にとると、JDBCレイヤーで XA が有効になっている場合、JDBC は、DML を使用してredoのログを変更するなど、一連の XA ロジック操作を InnoDB に送信します。これが 2 フェーズ コミットの動作です。現在の TiDB バージョンは、上位アプリケーションレイヤーの JTA/XA をサポートしておらず、Atomikos から送信された XA 操作を解析していません。

スタンドアロン データベースとして、MySQL は XA を使用したデータベース間トランザクションのみを実装できます。一方、TiDB は Google Percolator トランザクション モデルを使用した分散トランザクションをサポートし、そのパフォーマンスの安定性は XA よりも高いため、TiDB は JTA/XA をサポートせず、TiDB が XA をサポートする必要はありません。

TiDB は、パフォーマンスを損なうことなく、カラムナ ストレージ エンジン (TiFlash) への同時INSERTまたはUPDATE操作をどのようにサポートできるでしょうか?

  • ティフラッシュは、列エンジンの変更を処理するために DeltaTree という名前の特別な構造を導入します。
  • TiFlash はRaftグループの学習者の役割として機能するため、ログのコミットまたは書き込みには投票しません。これは、DML 操作が TiFlash の確認応答を待つ必要がないことを意味します。これが、TiFlash が OLTP パフォーマンスを低下させない理由です。さらに、TiFlash と TiKV は別々のインスタンスで動作するため、互いに影響しません。

TiFlash は最終的に整合性がありますか?

はい。 TiFlash は、デフォルトで強力なデータ整合性を維持します。

TiDB テクニック

データストレージ用TiKV

TiDB 内部 (I) - データストレージを参照してください。

データ コンピューティング用の TiDB

TiDB 内部 (II) - コンピューティングを参照してください。

スケジューリング用 PD

TiDB 内部 (III) - スケジューリングを参照してください。