Driverまたは ORM を選択

TiDB は MySQL プロトコルと高い互換性がありますが、一部の機能は MySQL と互換性がありません。

例えば:

  • TiDB でサポートされていない機能:

    • ストアド プロシージャと関数
    • トリガー
    • FOREIGN KEY制約
  • MySQL とは異なる機能:

    • 自動インクリメント ID: 自動インクリメント列は、TiDB 内でグローバルに一意です。それらは単一の TiDBサーバー上では増分ですが、必ずしも複数の TiDB サーバー間で増分されたり、順次割り当てられるとは限りません。

互換性の相違点の完全なリストについては、 MySQL の互換性を参照してください。

ジャワ

TiDB は、Java に対して次の 2 つのサポート レベルを提供します。

  • 完全: このドライバーまたは ORM を使用しても、既知の問題がないことを示します。
  • 検証済み: TiDB と MySQL の互換性の違いにより、このドライバーまたは ORM を使用するとエラーが発生する可能性があることを示します。

Java ドライバー

  • JDBC
  • TiDB-JDBC

サポートレベル:フル

MySQL ドキュメントに従って、Java JDBC ドライバーをダウンロードして構成できます。 TiDB v6.3.0 以降では、MySQL Connector/J 8.0.29 以降を使用することをお勧めします。

ヒント:

現在のバージョン 8.0.30 には未解決のバグがあるため、v6.3.0 より前のバージョンの TiDB を使用すると、スレッドがハングする可能性があります。 TiDB v6.3.0 以降のバージョンをまだ使用していない場合は、MySQL Connector/J 8.0 でこのバグが修正されるまでバージョン 8.0 にアップグレードしないか、これに対処する MySQL Connector/J の TiDB バージョンを使用することをお勧めします。バグ ( TiDB-JDBCタブを参照)。

完全なアプリケーションを構築する方法の例については、 TiDB と JDBC を使用して単純な CRUD アプリを構築するを参照してください。

サポートレベル:フル

TiDB-JDBCは、MySQL 8.0.29 に基づくカスタマイズされた Java ドライバーです。 MySQL 公式バージョン 8.0.29 に基づいてコンパイルされた TiDB-JDBC は、元の JDBC の準備モードでのマルチパラメータおよびマルチフィールド EOF のバグを修正し、自動 TiCDC スナップショット メンテナンスおよび SM3 認証プラグインなどの機能を追加します。

SM3 ベースの認証の使用は、MySQL Connector/J の TiDB バージョンでのみサポートされています。

Maven を使用する場合は、次の内容をpom.xmlファイルの<dependencies></dependencies>セクションに追加します。

<dependency> <groupId>io.github.lastincisor</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29-tidb-1.0.0</version> </dependency>

SM3 認証を有効にする必要がある場合は、次の内容をpom.xmlファイルの<dependencies></dependencies>セクションに追加します。

<dependency> <groupId>io.github.lastincisor</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29-tidb-1.0.0</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.67</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.67</version> </dependency>

Gradle を使用する場合は、次の内容をdependenciesに追加します。

implementation group: 'io.github.lastincisor', name: 'mysql-connector-java', version: '8.0.29-tidb-1.0.0' implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.67' implementation group: 'org.bouncycastle', name: 'bcpkix-jdk15on', version: '1.67'

Java ORM フレームワーク

休止状態

サポートレベル: Full

ノート:

現在、Hibernate はネストされたトランザクションをサポートしないを実行します。 v6.2.0 以降、TiDB はセーブポイントをサポートしています。

Spring Data JPAなどのフレームワークを使用している場合は、 @TransactionalPropagation.NESTEDトランザクション伝播オプションを使用しないでください。つまり、 @Transactional( propagation = Propagation.NESTED)を設定しないでください。

アプリケーションの異なる依存関係間の複雑な関係を手動で管理することを避けるために、 グラドルまたはメイヴンを使用して、間接的なものを含むアプリケーションのすべての依存関係を取得できます。 Hibernate 6.0.0.Beta2以降のみが TiDB ダイアレクトをサポートすることに注意してください。

Mavenを使用している場合は、次を<dependencies></dependencies>に追加します。

<dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.0.0.CR2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency>

Gradleを使用している場合は、以下をdependenciesに追加します。

implementation 'org.hibernate:hibernate-core:6.0.0.CR2' implementation 'mysql:mysql-connector-java:5.1.49'

さらに、 ハイバネート構成ファイル : org.hibernate.dialect.TiDBDialectで TiDB ダイアレクトを指定する必要があります。これは、Hibernate 6.0.0.Beta2以降でのみサポートされています。 Hibernateバージョンが6.0.0.Beta2より前の場合は、最初にアップグレードしてください。

ノート:

バージョンHibernateをアップグレードできない場合は、代わりにMySQL 5.7ダイアレクトorg.hibernate.dialect.MySQL57Dialectを使用してください。ただし、この設定により、予測できない結果が生じたり、 シーケンスなどの TiDB 固有の機能が一部失われたりする可能性があります。

tidb-loadbalance

tidb-loadbalanceは、アプリケーション側の負荷分散コンポーネントです。 tidb-loadbalance を使用すると、TiDBサーバーのノード情報を自動的に維持し、tidb-loadbalance ポリシーを使用してクライアントに JDBC 接続を分散できます。クライアント アプリケーションと TiDBサーバー間で直接 JDBC 接続を使用すると、負荷分散コンポーネントを使用するよりも高いパフォーマンスが得られます。

現在、tidb-loadbalance は次のポリシーをサポートしています: roundrobin、random、および weight。

ノート:

tidb-loadbalance はmysql-コネクタ-jと共に使用する必要があります。

Maven を使用する場合は、 pom.xmlファイルの<dependencies></dependencies>の要素本体に次の内容を追加します。

<dependency> <groupId>io.github.lastincisor</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29-tidb-1.0.0</version> </dependency> <dependency> <groupId>io.github.lastincisor</groupId> <artifactId>tidb-loadbalance</artifactId> <version>0.0.5</version> </dependency>

Gradle を使用する場合は、次の内容をdependenciesに追加します。

implementation group: 'io.github.lastincisor', name: 'mysql-connector-java', version: '8.0.29-tidb-1.0.0' implementation group: 'io.github.lastincisor', name: 'tidb-loadbalance', version: '0.0.5'