このページでは、Spanner で再現可能な読み取り分離を使用する方法について説明します。
再現可能な読み取りは、トランザクション内のすべての読み取りオペレーションが、トランザクションの開始時点でのデータベースの一貫したスナップショットを参照することを保証する分離レベルです。Spanner では、この分離レベルはスナップショット分離とも呼ばれる手法を使用して実装されます。このアプローチは、多数のトランザクションが他のトランザクションで変更される可能性のあるデータを読み取る、読み取り / 書き込みの同時実行性が高いシナリオで有効です。固定スナップショットを使用することで、リピータブル リードは、より厳密なシリアライズ可能な分離レベルのパフォーマンスへの影響を回避します。読み取りはロックを取得せずに実行でき、同時書き込みをブロックしないため、シリアル化の競合が原因で再試行が必要になる可能性のあるトランザクションの中止が少なくなる可能性があります。詳細については、分離レベルの概要をご覧ください。
分離レベルを設定する
次の方法を使用して、読み取り / 書き込みトランザクションの分離レベルをトランザクション レベルで設定できます。
クライアント ライブラリ
Go
Java
Node.js
Python
REST
TransactionOptions.isolation_level
REST API を使用して、トランザクション レベルで読み取り / 書き込みトランザクションの分離レベルを設定できます。有効なオプションは TransactionOptions.SERIALIZABLE
と TransactionOptions.REPEATABLE_READ
です。デフォルトでは、Spanner は分離レベルを直列化可能な分離に設定します。
RPC
サポートされていないユースケース
- 読み取り / 書き込みトランザクションでは、繰り返し読み取り分離のみを使用できます。読み取り専用トランザクションでこの分離レベルを設定すると、Spanner はエラーを返します。すべての読み取り専用トランザクションは固定スナップショットで動作し、ロックを必要としません。
- 列に全文検索インデックスが定義されているテーブルを変更するために、反復可能読み取り分離を使用することはできません。
次のステップ
詳しくは、分離レベルをご覧ください。
Spanner の直列化可能性と外部整合性については、TrueTime と外部整合性をご覧ください。