📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

取引

TiDB は完全な分散トランザクションを提供し、モデルにはGoogle パーコレーターに基づいたいくつかの最適化が施されています。

楽観的トランザクションモード

TiDBの楽観的トランザクションモデルは、コミットフェーズまで競合を検出しません。競合が発生した場合、トランザクションは再試行する必要があります。しかし、競合が深刻な場合、再試行前の操作は無効となり、再度実行する必要があるため、このモデルは非効率的です。

データベースをカウンターとして使用する場合を考えてみましょう。同時アクセス数が多いと深刻な競合が発生し、複数回の再試行やタイムアウトが発生する可能性があります。したがって、深刻な競合が発生するシナリオでは、悲観的トランザクションモードを使用するか、Redisにカウンターを配置するなど、システムアーキテクチャレベルで問題を解決することをお勧めします。ただし、アクセス競合がそれほど深刻でない場合は、楽観的トランザクションモデルが効率的です。

詳細についてはTiDB 楽観的トランザクションモデル参照してください。

悲観的なトランザクションモード

TiDBでは、悲観的トランザクションモードはMySQLとほぼ同じ動作をします。トランザクションは実行フェーズでロックを適用し、競合状況での再試行を回避し、高い成功率を保証します。悲観的ロックを適用することで、 SELECT FOR UPDATE使用して事前にデータをロックすることもできます。

ただし、アプリケーション シナリオの競合が少ない場合は、楽観的トランザクション モデルの方がパフォーマンスが向上します。

詳細についてはTiDB 悲観的トランザクションモード参照してください。

トランザクション分離レベル

トランザクション分離は、データベーストランザクション処理の基盤の一つです。分離は、トランザクションの4つの主要な特性(一般的にACIDと呼ばれます)の一つです。

TiDBはスナップショット分離(SI)一貫性を実装しており、MySQLとの互換性のためにREPEATABLE-READとして宣伝されています。これはSI ANSI繰り返し読み取り分離レベルやSI MySQL 繰り返し読み取りレベルとは異なります。

詳細についてはTiDBトランザクション分離レベル参照してください。

非トランザクションDMLステートメント

非トランザクションDML文とは、複数のSQL文(つまり複数のバッチ)に分割され、順番に実行されるDML文です。トランザクションの原子性と独立性を犠牲にして、バッチデータ処理のパフォーマンスと使いやすさを向上させます。

通常、メモリを大量に消費するトランザクションは、トランザクションサイズ制限を回避するために複数のSQL文に分割する必要があります。非トランザクションDML文は、このプロセスをTiDBカーネルに統合することで、同様の効果を実現します。SQL文を分割することで、非トランザクションDML文の効果を理解するのに役立ちますDRY RUN構文を使用すると、分割された文をプレビューできます。

詳細については非トランザクションDML文参照してください。

このページは役に立ちましたか?