書き込みメソッド
Tablestore は、データを書き込むための PutRow、UpdateRow、および BatchWriteRow 操作を提供します。シナリオに最も適した書き込みメソッドを選択してください。
|
書き込みメソッド |
説明 |
シナリオ |
|
PutRow 操作を呼び出して、新しい行を挿入します。行がすでに存在する場合、Tablestore は元の行とそのすべての列およびバージョンを削除してから、新しい行を挿入します。 |
少量のデータの書き込みに適しています。 |
|
|
UpdateRow 操作を呼び出して行を更新します。属性列の追加や削除、属性列の特定バージョンの削除、既存の属性列の値の更新ができます。指定した行が存在しない場合は、新しい行が挿入されます。 |
属性列の削除、列の特定バージョンの削除、属性列の値の変更など、既存のデータの更新に適しています。 |
|
|
BatchWriteRow 操作を呼び出して、単一のリクエストで複数の書き込み操作を実行したり、一度に複数のテーブルにデータを書き込んだりします。 BatchWriteRow 操作は、複数の PutRow、UpdateRow、および DeleteRow サブオペレーションで構成されます。これらのサブオペレーションを構築するプロセスは、PutRow、UpdateRow、および DeleteRow 操作を個別に呼び出す場合と同じです。 |
大量のデータを書き込み、削除、更新する必要があるシナリオ、またはこれらの操作を組み合わせて実行するシナリオに適しています。 |
前提条件
-
OTSClient インスタンスが初期化されていること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。
-
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、「データテーブルの作成」および「データの書き込み」をご参照ください。
単一行のデータの挿入
インターフェース
/// <summary>
/// 指定されたテーブル名、プライマリキー、およびプロパティに基づいてデータ行を書き込みます。この操作で消費された容量単位を返します。
/// </summary>
/// <param name="request">データを挿入するリクエスト。</param>
/// <returns>この操作で消費された容量単位。</returns>
public PutRowResponse PutRow(PutRowRequest request);
/// <summary>
/// PutRow の非同期バージョンです。
/// </summary>
public Task<PutRowResponse> PutRowAsync(PutRowRequest request);
パラメーター
|
パラメーター |
説明 |
|
tableName |
データテーブルの名前。 |
|
primaryKey |
行のプライマリキー。プライマリキーには、各プライマリキー列の名前、型、および値が含まれます。 重要
|
|
attribute |
行の属性列。各項目には、属性名、属性の型 (オプション)、属性値、およびタイムスタンプ (オプション) が含まれます。
|
|
condition |
条件付き更新を使用して、元の行の存在条件または元の行の列の値条件を設定します。詳細については、「条件付き更新」をご参照ください。 説明
|
例
行データの挿入
次の例では、行データを挿入する方法を示します。
// 行のプライマリキーを定義します。テーブルの TableMeta の定義と一致している必要があります。
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 行に書き込む属性列を定義します。
var attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
try
{
// データを挿入するためのリクエストオブジェクトを構築します。RowExistenceExpectation.IGNORE は、行が存在するかどうかに関係なく新しいデータが挿入されることを示します。
var request = new PutRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// PutRow 操作を呼び出してデータを挿入します。
otsClient.PutRow(request);
// 例外がスローされなければ、操作は成功です。
Console.WriteLine("Put row succeeded.");
}
catch (Exception ex)
{
// 例外がスローされた場合、操作は失敗です。例外を処理します。
Console.WriteLine("Put row failed, exception:{0}", ex.Message);
}
完全なサンプルコードについては、「PutRow@GitHub」をご参照ください。
データ挿入時の列条件と行条件の使用
次の例では、行が存在し、かつ `col0` が 24 より大きい場合にのみ挿入操作を実行します。
// 行のプライマリキーを定義します。テーブルの TableMeta の定義と一致している必要があります。
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 行に書き込む属性列を定義します。
AttributeColumns attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
// col0 列の値が 24 より大きい場合に、行を再度挿入して元の値を上書きすることを許可します。
try
{
var request = new PutRowRequest("SampleTable", new Condition(RowExistenceExpectation.EXPECT_EXIST),
primaryKey, attribute);
request.Condition.ColumnCondition = new RelationalCondition("col0",
CompareOperator.GREATER_THAN,
new ColumnValue(24));
otsClient.PutRow(request);
Console.WriteLine("Put row succeeded.");
}
catch (Exception ex)
{
Console.WriteLine("Put row failed. error:{0}", ex.Message);
}
完全なサンプルコードについては、「ConditionPutRow@GitHub」をご参照ください。
データの非同期挿入
次の例では、複数のデータ行を非同期で挿入する方法を示します。
各非同期呼び出しはスレッドを開始します。時間のかかる非同期呼び出しを連続して多数開始すると、タイムアウトが発生する可能性があります。
try
{
var putRowTaskList = new List<Task<PutRowResponse>>();
for (int i = 0; i < 100; i++)
{
// 行のプライマリキーを定義します。テーブルの TableMeta の定義と一致している必要があります。
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 行に書き込む属性列を定義します。
var attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(i));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
var request = new PutRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
putRowTaskList.Add(otsClient.PutRowAsync(request));
}
// 各非同期呼び出しが返されるのを待ち、消費された CU 値を出力します。
foreach (var task in putRowTaskList)
{
task.Wait();
Console.WriteLine("consumed read:{0}, write:{1}", task.Result.ConsumedCapacityUnit.Read,
task.Result.ConsumedCapacityUnit.Write);
}
// 例外がスローされなければ、操作は成功です。
Console.WriteLine("Put row async succeeded.");
}
catch (Exception ex)
{
// 例外がスローされた場合、操作は失敗です。例外を処理します。
Console.WriteLine("Put row async failed. exception:{0}", ex.Message);
}
完全なサンプルコードについては、「PutRowAsync@GitHub」をご参照ください。
単一行のデータの更新
インターフェース
/// <summary>
/// 指定された行のデータを更新します。行が存在しない場合は新しい行が作成されます。行が存在する場合、リクエストに基づいて指定された列の値が追加、変更、または削除されます。
/// </summary>
/// <param name="request">リクエストオブジェクト。</param>
public UpdateRowResponse UpdateRow(UpdateRowRequest request);
/// <summary>
/// UpdateRow の非同期バージョンです。
/// </summary>
/// <param name="request">リクエストオブジェクト。</param>
/// <returns></returns>
public Task<UpdateRowResponse> UpdateRowAsync(UpdateRowRequest request);
パラメーター
|
パラメーター |
説明 |
|
tableName |
データテーブルの名前。 |
|
primaryKey |
行のプライマリキー。プライマリキーには、プライマリキー列の名前、型、および値が含まれます。 重要
設定するプライマリキー列の数と型は、データテーブルに定義されているものと同じである必要があります。 |
|
condition |
条件付き更新の場合、元の行の存在に関する条件や、元の行の列の値に関する条件を設定できます。詳細については、「条件付き更新」をご参照ください。 |
|
attribute |
更新する属性列。 |
例
次の例では、行データを更新する方法を示します。
// 行のプライマリキーを定義します。プライマリキーは、テーブル作成時に TableMeta で定義されたものと同じである必要があります。
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 行に書き込む属性列を定義します。
UpdateOfAttribute attribute = new UpdateOfAttribute();
attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
attribute.AddAttributeColumnToPut("col1", new ColumnValue("b")); // 元の値 'a' を 'b' に変更します。
attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
try
{
// 行を更新するためのリクエストオブジェクトを構築します。RowExistenceExpectation.IGNORE は、行が存在するかどうかに関係なく更新されることを示します。
var request = new UpdateRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// UpdateRow 操作を呼び出してデータを更新します。
otsClient.UpdateRow(request);
// 例外がスローされなければ、操作は成功です。
Console.WriteLine("Update row succeeded.");
}
catch (Exception ex)
{
// 例外がスローされた場合、操作は失敗です。例外を処理します。
Console.WriteLine("Update row failed, exception:{0}", ex.Message);
}
完全なサンプルコードについては、「UpdateRow@GitHub」をご参照ください。
データのバッチ書き込み
注意事項
API
/// <summary>
/// <para>1 つ以上のテーブル内の複数のデータ行を一括で挿入、更新、または削除します。</para>
/// <para>BatchWriteRow 操作は、複数の PutRow、UpdateRow、および DeleteRow 操作のコレクションです。各操作は独立して実行され、独自の結果を返し、容量単位を個別に消費します。</para>
/// <para>多くの単一行書き込み操作と比較して、BatchWriteRow 操作はリクエストの応答時間を短縮し、データ書き込み速度を向上させます。</para>
/// </summary>
/// <param name="request">リクエストインスタンス。</param>
/// <returns>応答インスタンス。</returns>
public BatchWriteRowResponse BatchWriteRow(BatchWriteRowRequest request);
/// <summary>
/// BatchWriteRow の非同期バージョンです。
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<BatchWriteRowResponse> BatchWriteRowAsync(BatchWriteRowRequest request);
例
次の例では、100 行のデータをバッチで書き込む方法を示します。
var TableName = "SampleTable";
// バッチ書き込みリクエストオブジェクトを構築し、100 行のデータのプライマリキーを設定します。
var request = new BatchWriteRowRequest();
var rowChanges = new RowChanges(TableName);
for (int i = 0; i < 100; i++)
{
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 行に書き込む属性列を定義します。
UpdateOfAttribute attribute = new UpdateOfAttribute();
attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
attribute.AddAttributeColumnToPut("col1", new ColumnValue("a"));
attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
rowChanges.AddUpdate(new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
}
request.Add(TableName, rowChanges);
try
{
// BatchWriteRow API を呼び出してデータを書き込みます。
var response = otsClient.BatchWriteRow(request);
var tableRows = response.TableRespones;
var rows = tableRows[TableName];
// バッチ操作は部分的に成功する場合があります。各行のステータスを確認して成功したかどうかを判断します。詳細については、サンプルコードの GitHub リンクをご参照ください。
}
catch (Exception ex)
{
// 例外がスローされた場合、実行は失敗です。例外を処理します。
Console.WriteLine("Batch put row failed, exception:{0}", ex.Message);
}
完全なサンプルコードについては、「BatchWriteRow@GitHub」をご参照ください。
よくある質問
関連ドキュメント
-
高同時実行アプリケーションでは、条件付き更新を使用して特定の条件に基づいてデータを更新できます。詳細については、「条件付き更新」をご参照ください。
-
投稿のリアルタイムページビュー (PV) のカウントなど、オンラインアプリケーションにリアルタイムの統計情報を提供するには、アトミックカウンターを使用できます。詳細については、「アトミックカウンター」をご参照ください。
-
データを書き込んだ後、必要に応じてテーブルからデータを読み取ったり削除したりできます。詳細については、「データの読み取り」または「データの削除」をご参照ください。