ScalarDB Cluster .NET Client SDK での分散トランザクションをはじめよう
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Cluster .NET Client SDK は、ScalarDB Cluster の分散トランザクション機能をサポートします。SDK には、クラスター内での通信を容易にするためのトランザクションとマネージャーの抽象化が含まれています。
次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期バージョンを使用することもできます。
分散 SQL トランザクションの詳細については、ScalarDB Cluster .NET Client SDK での分散 SQL トランザクションをはじめようを参照してください。
SDK をインストールする
ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの SDK を .NET プロジェクトにインストールし ます。組み込みの NuGet パッケージマネージャーを使用して、<MAJOR>.<MINOR> を使用しているバージョンに置き換えることでこれを行うことができます。
dotnet add package ScalarDB.Client --version '<MAJOR>.<MINOR>.*'
設定ファイルを作成する
scalardb-options.json ファイルを作成し、次の内容を追加します。<HOSTNAME_OR_IP_ADDRESS> を FQDN または IP アドレスに、<PORT> をクラスターのポート番号 (デフォルトでは 60053) に置き換えます。
{
"ScalarDbOptions": {
"Address": "http://<HOSTNAME_OR_IP_ADDRESS>:<PORT>",
"HopLimit": 10
}
}
設定ファイルやクライアントを設定するその他の方法の詳細については、クライアント設定を参照してください。
トランザクションマネージャーを取得する
分散トランザクションにはトランザクションマネージャーを取得する必要があります。トランザクションマネージャーを取得するには、次のように TransactionFactory を使用します。
// Pass the path to the settings file created in the previous step.
var factory = TransactionFactory.Create("scalardb-options.json");
using var manager = factory.GetTransactionManager();
トランザクションを管理する
複数の CRUD 操作を単一のトランザクションの一部として実行するには、まずトランザクションを開始する必要があります。次のようにトランザクションマネージャーを使用してトランザクションを開始できます。
var transaction = await manager.BeginAsync();
次のようにして、すでに実行中のトランザクションを再開することもできます。
var transaction = manager.Resume(transactionIdString);
Resume メソッドはトランザクションオブジェクトを作成するだけなので、非同期バージョンはありま せん。このため、間違った ID を使用してトランザクションを再開する可能性があります。
読み取り専用トランザクションを開始する
トランザクション内で読み取り操作 (GetAsync および ScanAsync) のみを実行する場合、次のように読み取り専用トランザクションを開始できます。
var transaction = await manager.BeginReadOnlyAsync();
読み取り専用トランザクションは読み取り操作専用に最適化されています。読み取り専用トランザクション内で書き込み操作 (InsertAsync、UpsertAsync、UpdateAsync、DeleteAsync、MutateAsync、または書き込み操作を含む BatchAsync) を実行しようとするとエラーになります。
トランザクションをコミットする準備ができたら、次のようにトランザクションの CommitAsync メソッドを呼び出すことができます。
await transaction.CommitAsync();
トランザクションをロールバックするには、RollbackAsync メソッドを使用できます。
await transaction.RollbackAsync();