Metode penulisan
Tablestore menyediakan operasi PutRow, UpdateRow, dan BatchWriteRow untuk menulis data. Pilih metode yang paling sesuai dengan skenario Anda.
|
Metode penulisan |
Deskripsi |
Skenario |
|
Panggil operasi PutRow untuk menyisipkan baris baru. Jika baris tersebut sudah ada, Tablestore menghapus baris asli beserta semua kolom dan versinya, lalu menyisipkan baris baru. |
Cocok untuk menulis jumlah data yang kecil. |
|
|
Panggil operasi UpdateRow untuk memperbarui baris. Anda dapat menambah atau menghapus kolom atribut, menghapus versi tertentu dari kolom atribut, atau memperbarui nilai kolom atribut yang sudah ada. Jika baris yang ditentukan tidak ada, baris baru akan disisipkan. |
Cocok untuk memperbarui data yang sudah ada, seperti menghapus kolom atribut, menghapus versi tertentu dari kolom, atau mengubah nilai kolom atribut. |
|
|
Panggil operasi BatchWriteRow untuk menjalankan beberapa operasi penulisan dalam satu permintaan atau menulis data ke beberapa tabel sekaligus. Operasi BatchWriteRow terdiri dari beberapa sub-operasi PutRow, UpdateRow, dan DeleteRow. Proses pembuatan sub-operasi ini sama dengan memanggil operasi PutRow, UpdateRow, dan DeleteRow secara individual. |
Cocok untuk skenario yang memerlukan penulisan, penghapusan, atau pembaruan data dalam jumlah besar, atau kombinasi dari operasi-operasi tersebut. |
Prasyarat
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi instans OTSClient.
-
Tabel data telah dibuat, dan data telah ditulis ke tabel tersebut. Untuk informasi selengkapnya, lihat Membuat tabel data dan Menulis data.
Menyisipkan satu baris data
Antarmuka
/// <summary>
/// Menulis satu baris data berdasarkan nama tabel, kunci primer, dan properti yang ditentukan. Mengembalikan unit kapasitas yang dikonsumsi oleh operasi ini.
/// </summary>
/// <param name="request">Permintaan untuk menyisipkan data.</param>
/// <returns>Unit kapasitas yang dikonsumsi oleh operasi ini.</returns>
public PutRowResponse PutRow(PutRowRequest request);
/// <summary>
/// Versi asinkron dari PutRow.
/// </summary>
public Task<PutRowResponse> PutRowAsync(PutRowRequest request);
Parameter
|
Parameter |
Deskripsi |
|
tableName |
Nama tabel data. |
|
primaryKey |
Kunci primer baris tersebut. Kunci primer mencakup nama, tipe, dan nilai setiap kolom kunci primer. Penting
|
|
attribute |
Kolom atribut baris tersebut. Setiap item mencakup nama atribut, tipe atribut (opsional), nilai atribut, dan stempel waktu (opsional).
|
|
condition |
Gunakan pembaruan kondisional untuk menetapkan kondisi keberadaan baris asli atau kondisi nilai kolom pada baris asli. Untuk informasi selengkapnya, lihat Pembaruan kondisional. Catatan
|
Contoh
Menyisipkan satu baris data
Contoh berikut menunjukkan cara menyisipkan satu baris data.
// Definisikan kunci primer baris. Nilai ini harus konsisten dengan definisi dalam TableMeta tabel.
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Definisikan kolom atribut yang akan ditulis ke baris.
var attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
try
{
// Buat objek permintaan untuk menyisipkan data. RowExistenceExpectation.IGNORE menunjukkan bahwa data baru disisipkan tanpa mempertimbangkan apakah baris tersebut sudah ada.
var request = new PutRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// Panggil operasi PutRow untuk menyisipkan data.
otsClient.PutRow(request);
// Jika tidak ada exception yang dilempar, operasi berhasil.
Console.WriteLine("Put row succeeded.");
}
catch (Exception ex)
{
// Jika exception dilempar, operasi gagal. Tangani exception tersebut.
Console.WriteLine("Put row failed, exception:{0}", ex.Message);
}
Untuk kode contoh lengkap, lihat PutRow@GitHub.
Menggunakan kondisi kolom dan baris saat menyisipkan data
Contoh berikut menjalankan operasi penyisipan hanya jika baris tersebut ada dan `col0` lebih besar dari 24.
// Definisikan kunci primer baris. Nilai ini harus konsisten dengan definisi dalam TableMeta tabel.
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Definisikan kolom atribut yang akan ditulis ke baris.
AttributeColumns attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
// Izinkan menyisipkan baris lagi dan menimpa nilai aslinya jika nilai kolom col0 lebih besar dari 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);
}
Untuk kode contoh lengkap, lihat ConditionPutRow@GitHub.
Menyisipkan data secara asinkron
Contoh berikut menunjukkan cara menyisipkan beberapa baris data secara asinkron.
Setiap pemanggilan asinkron memulai sebuah thread. Jika Anda menjalankan banyak pemanggilan asinkron yang memakan waktu secara berurutan, timeout dapat terjadi.
try
{
var putRowTaskList = new List<Task<PutRowResponse>>();
for (int i = 0; i < 100; i++)
{
// Definisikan kunci primer baris. Nilai ini harus konsisten dengan definisi dalam TableMeta tabel.
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Definisikan kolom atribut yang akan ditulis ke baris.
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));
}
// Tunggu hingga setiap pemanggilan asinkron mengembalikan hasil dan cetak nilai CU yang dikonsumsi.
foreach (var task in putRowTaskList)
{
task.Wait();
Console.WriteLine("consumed read:{0}, write:{1}", task.Result.ConsumedCapacityUnit.Read,
task.Result.ConsumedCapacityUnit.Write);
}
// Jika tidak ada exception yang dilempar, operasi berhasil.
Console.WriteLine("Put row async succeeded.");
}
catch (Exception ex)
{
// Jika exception dilempar, operasi gagal. Tangani exception tersebut.
Console.WriteLine("Put row async failed. exception:{0}", ex.Message);
}
Untuk kode contoh lengkap, lihat PutRowAsync@GitHub.
Memperbarui satu baris data
Antarmuka
/// <summary>
/// Memperbarui data baris yang ditentukan. Jika baris tersebut tidak ada, baris baru akan dibuat. Jika baris tersebut ada, nilai kolom tertentu akan ditambahkan, dimodifikasi, atau dihapus berdasarkan permintaan.
/// </summary>
/// <param name="request">Objek permintaan.</param>
public UpdateRowResponse UpdateRow(UpdateRowRequest request);
/// <summary>
/// Versi asinkron dari UpdateRow.
/// </summary>
/// <param name="request">Objek permintaan.</param>
/// <returns></returns>
public Task<UpdateRowResponse> UpdateRowAsync(UpdateRowRequest request);
Parameter
|
Parameter |
Deskripsi |
|
tableName |
Nama tabel data. |
|
primaryKey |
Kunci primer baris tersebut. Kunci primer mencakup nama kolom kunci primer, tipe, dan nilai. Penting
Jumlah dan tipe kolom kunci primer yang Anda tetapkan harus sama dengan yang didefinisikan untuk tabel data. |
|
condition |
Untuk pembaruan kondisional, Anda dapat menetapkan kondisi berdasarkan keberadaan baris asli atau nilai kolom pada baris asli. Untuk informasi selengkapnya, lihat Pembaruan kondisional. |
|
attribute |
Kolom atribut yang akan diperbarui. |
Contoh
Contoh berikut menunjukkan cara memperbarui satu baris data.
// Definisikan kunci primer baris. Kunci primer harus sama dengan yang didefinisikan dalam TableMeta saat tabel dibuat.
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Definisikan kolom atribut yang akan ditulis ke baris.
UpdateOfAttribute attribute = new UpdateOfAttribute();
attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
attribute.AddAttributeColumnToPut("col1", new ColumnValue("b")); // Ubah nilai asli 'a' menjadi 'b'.
attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
try
{
// Buat objek permintaan untuk memperbarui baris. RowExistenceExpectation.IGNORE menunjukkan bahwa baris diperbarui baik ada maupun tidak.
var request = new UpdateRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// Panggil operasi UpdateRow untuk memperbarui data.
otsClient.UpdateRow(request);
// Jika tidak ada exception yang dilempar, operasi berhasil.
Console.WriteLine("Update row succeeded.");
}
catch (Exception ex)
{
// Jika exception dilempar, operasi gagal. Tangani exception tersebut.
Console.WriteLine("Update row failed, exception:{0}", ex.Message);
}
Untuk kode contoh lengkap, lihat UpdateRow@GitHub.
Menulis data secara batch
Catatan
API
/// <summary>
/// <para>Menyisipkan, memperbarui, atau menghapus beberapa baris data sekaligus dalam satu atau beberapa tabel.</para>
/// <para>Operasi BatchWriteRow merupakan kumpulan dari beberapa operasi PutRow, UpdateRow, dan DeleteRow. Setiap operasi dijalankan secara independen, mengembalikan hasilnya sendiri, dan mengonsumsi unit kapasitas secara terpisah.</para>
/// <para>Dibandingkan dengan banyak operasi penulisan satu baris, operasi BatchWriteRow mengurangi waktu respons permintaan dan meningkatkan kecepatan penulisan data.</para>
/// </summary>
/// <param name="request">Instans permintaan.</param>
/// <returns>Instans respons.</returns>
public BatchWriteRowResponse BatchWriteRow(BatchWriteRowRequest request);
/// <summary>
/// Versi asinkron dari BatchWriteRow.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<BatchWriteRowResponse> BatchWriteRowAsync(BatchWriteRowRequest request);
Contoh
Contoh berikut menunjukkan cara menulis 100 baris data secara batch.
var TableName = "SampleTable";
// Buat objek permintaan penulisan batch dan atur kunci primer untuk 100 baris data.
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"));
// Definisikan kolom atribut yang akan ditulis ke baris.
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
{
// Panggil API BatchWriteRow untuk menulis data.
var response = otsClient.BatchWriteRow(request);
var tableRows = response.TableRespones;
var rows = tableRows[TableName];
// Operasi batch mungkin hanya sebagian yang berhasil. Periksa status setiap baris untuk memastikan keberhasilan. Untuk informasi selengkapnya, lihat tautan GitHub dalam kode contoh.
}
catch (Exception ex)
{
// Jika exception dilempar, eksekusi gagal. Tangani exception tersebut.
Console.WriteLine("Batch put row failed, exception:{0}", ex.Message);
}
Untuk kode contoh lengkap, lihat BatchWriteRow@GitHub.
FAQ
Referensi
-
Anda dapat menggunakan pembaruan kondisional untuk memperbarui data berdasarkan kondisi tertentu dalam aplikasi dengan konkurensi tinggi. Untuk informasi selengkapnya, lihat Pembaruan kondisional.
-
Untuk menyediakan statistik real-time bagi aplikasi online, seperti menghitung jumlah tampilan halaman (PV) real-time untuk postingan, Anda dapat menggunakan penghitung atomik. Untuk informasi selengkapnya, lihat Penghitung atomik.
-
Setelah menulis data, Anda dapat membaca atau menghapus data dari tabel sesuai kebutuhan. Untuk informasi selengkapnya, lihat Membaca data atau Menghapus data.