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

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

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

TiDBとは?

TiDB は、水平スケーラビリティ、高可用性、および一貫した分散トランザクションを特徴とする分散 SQL データベースです。また、MySQL の SQL 構文とプロトコルを使用してデータを管理および取得することもできます。

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

TiDB クラスターには、TiDBサーバー、PD (Placement Driver)サーバー、および TiKVサーバーの 3 つのコンポーネントがあります。詳細については、 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 ドキュメントです。さらに、テクニカル コミュニケーション グループもいくつかあります。必要な場合は、 info@pingcap.comにお問い合わせください。

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 は 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) - スケジューリングを参照してください。

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