ScalarDB Cluster .NET Client SDK での分散 SQL トランザクションをはじめよう
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Cluster .NET Client SDK は、ScalarDB Cluster の分散 SQL トランザクション機能をサポートします。SDK には、クラスター内での通信を容易にするためのトランザクションとマネージャーの抽象化が含まれています。
次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期メソッドを使用することもできます。
分散非 SQL トランザクションの詳細については、ScalarDB Cluster .NET Client SDK での分散トランザクションをはじめようを参照してください。
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
}
}
設定ファイルやクライアントを設定するその他の方法の詳細については、クライアント設定を参照してください。
トランザクションマネージャーを取得する
分散 SQL トランザクション用のトランザクションマネージャーオブジェクトを取得する必要があります。トランザクションマネージャーオブジェクトを取得するには、次のように TransactionFactory
を使用します。
// Pass the path to the settings file created in the previous step.
var factory = TransactionFactory.Create("scalardb-options.json");
using var manager = factory.GetSqlTransactionManager();
SQL クエリを実行する
SQL ステートメントを実行するには、次のようにビルダーを使用して作成できる ISqlStatement
オブジェクトが必要です。
using ScalarDB.Client.Builders.Sql;
// ...
var sqlStatement =
new SqlStatementBuilder()
.SetSql("SELECT * FROM order_service.statements WHERE item_id = :item_id")
.AddParam("item_id", 2)
.Build();
次のようにトランザクションマネージャーを使用して、単一の SQL ステートメントを直接実行できます。
var resultSet = await manager.ExecuteAsync(sqlStatement);
ExecuteAsync
メソッドの結果には、クラスターから受信したレコードが含まれます。特定の列の値は、次の方法で取得できます。
foreach (var record in resultSet.Records)
{
// Getting an integer value from the "item_id" column.
// If it fails, an exception will be thrown.
var itemId = record.GetValue<int>("item_id");
// Trying to get a string value from the "order_id" column.
// If it fails, no exception will be thrown.
if (record.TryGetValue<string>("order_id", out var orderId))
Console.WriteLine($"order_id: {orderId}");
// Checking if the "count" column is null.
if (record.IsNull("count"))
Console.WriteLine("'count' is null");
}
GetValue<T>
および TryGetValue<T>
で使用する型の詳細については、ScalarDB 列型を .NET 型に変換する方法 を参照してください。