Tablestore memungkinkan Anda menulis satu baris data, memperbarui satu baris data, dan menulis beberapa baris data sekaligus dengan memanggil operasi yang berbeda. Untuk menulis data ke tabel, Anda harus menentukan informasi kunci utama lengkap dan kolom atribut yang ingin ditambahkan, dihapus, atau diubah. Saat menulis data dalam aplikasi dengan konkurensi tinggi, Anda dapat mengonfigurasi kondisi keberadaan baris atau kondisi berbasis kolom untuk memperbarui data berdasarkan kondisi tertentu.
Metode
Tablestore menyediakan operasi PutRow, UpdateRow, dan BatchWriteRow untuk menulis data. Sebelum menulis data, pilih metode yang sesuai berdasarkan kebutuhan bisnis Anda.
Metode Penulisan | Deskripsi | Skenario |
Anda dapat memanggil operasi PutRow untuk menyisipkan satu baris data. Jika baris tersebut ada, Tablestore akan menghapus semua versi data di semua kolom dari baris yang ada dan menulis data baru. | Operasi ini cocok untuk skenario di mana Anda ingin menulis sejumlah kecil data. | |
Anda dapat memanggil operasi UpdateRow untuk memperbarui satu baris data. Anda dapat menambahkan kolom atribut ke baris, menghapus kolom atribut dari baris, menghapus versi data tertentu dari kolom atribut, atau memperbarui nilai kolom atribut. Jika baris tidak ada, baris baru akan disisipkan. | Operasi ini cocok untuk skenario di mana Anda ingin memperbarui data yang sudah ada. Misalnya, Anda ingin menghapus kolom atribut, menghapus versi data tertentu, atau memperbarui nilai kolom atribut. | |
Anda dapat memanggil operasi BatchWriteRow untuk menulis beberapa baris data ke satu atau lebih tabel sekaligus. Operasi BatchWriteRow terdiri dari beberapa operasi PutRow, UpdateRow, dan DeleteRow. Saat Anda memanggil operasi BatchWriteRow, proses pembuatan suboperasi sama dengan proses pemanggilan operasi PutRow, UpdateRow, atau DeleteRow. | Operasi ini cocok untuk skenario di mana Anda ingin menulis, menghapus, atau memperbarui sejumlah besar data dan skenario di mana Anda ingin menulis, menghapus, dan memperbarui data pada saat yang bersamaan. |
Prasyarat
Instansi OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instansi OTSClient.
Tabel data telah dibuat, dan data dapat ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Sisipkan satu baris data
Operasi API
/// <summary>
/// Tulis satu baris data berdasarkan nama tabel, kunci utama, dan atribut yang ditentukan. Jumlah unit kapasitas (CUs) yang dikonsumsi oleh operasi ini dikembalikan.
/// </summary>
/// <param name="request">Permintaan penyisipan data</param>
/// <returns>Jumlah CUs yang dikonsumsi oleh operasi</returns>
public PutRowResponse PutRow(PutRowRequest request);
/// <summary>
/// Mode asinkron dari PutRow.
/// </summary>
public Task<PutRowResponse> PutRowAsync(PutRowRequest request); Parameter
Parameter | Deskripsi |
tableName | Nama tabel data. |
primaryKey | Informasi kunci utama tentang baris. Nilai parameter ini terdiri dari nama, tipe, dan nilai setiap kolom kunci utama. Penting
|
attribute | Kolom atribut dari baris. Setiap kolom atribut ditentukan oleh parameter dalam urutan berikut: nama kolom atribut, tipe kolom atribut (opsional), nilai kolom atribut, dan timestamp (opsional).
|
condition | Kondisi yang harus dipenuhi untuk melakukan operasi. Anda dapat menentukan kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Lakukan pembaruan bersyarat. Catatan
|
Contoh
Sisipkan satu baris data
Berikut adalah contoh kode untuk menyisipkan satu baris data:
// Tentukan kunci utama baris. Skema kunci utama harus sama dengan skema yang ditentukan dalam TableMeta saat tabel dibuat.
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Tentukan kolom atribut baris.
var attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
try
{
// Konstruksi objek permintaan untuk menyisipkan satu baris data. RowExistenceExpectation.IGNORE menentukan bahwa data disisipkan tanpa memandang apakah baris yang ditentukan ada.
var request = new PutRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// Panggil operasi PutRow untuk menyisipkan data.
otsClient.PutRow(request);
// Jika operasi berhasil, tidak ada pengecualian yang dikembalikan.
Console.WriteLine("Penyisipan baris berhasil.");
}
catch (Exception ex)
{
// Jika operasi gagal, pengecualian dikembalikan. Tangani pengecualian.
Console.WriteLine("Penyisipan baris gagal, pengecualian:{0}", ex.Message);
} Untuk kode sampel terperinci, kunjungi PutRow@GitHub.
Tentukan kondisi berdasarkan nilai kolom dan kondisi keberadaan baris saat Anda menyisipkan satu baris data
Berikut adalah contoh kode untuk menyisipkan satu baris data hanya jika baris tersebut ada dan nilai kolom col0 lebih besar dari 24:
// Tentukan kunci utama baris. Skema kunci utama harus sama dengan skema yang ditentukan dalam TableMeta saat tabel dibuat.
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Tentukan kolom atribut baris.
AttributeColumns attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
// Ketika nilai kolom col0 lebih besar dari 24, baris dapat disisipkan untuk menimpa nilai aslinya.
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("Penyisipan baris berhasil.");
}
catch (Exception ex)
{
Console.WriteLine("Penyisipan baris gagal. error:{0}", ex.Message);
} Untuk kode sampel terperinci, kunjungi ConditionPutRow@GitHub.
Sisipkan data secara asinkron
Berikut adalah contoh kode untuk menyisipkan beberapa baris data secara asinkron.
Setiap panggilan asinkron memulai thread baru. Kesalahan timeout mungkin terjadi jika sejumlah besar panggilan asinkron dimulai secara berturut-turut dan setiap panggilan memakan waktu lama.
try
{
var putRowTaskList = new List<Task<PutRowResponse>>();
for (int i = 0; i < 100; i++)
{
// Tentukan kunci utama baris. Skema kunci utama harus sama dengan skema yang ditentukan dalam TableMeta saat tabel dibuat.
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Tentukan kolom atribut 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 panggilan asinkron mengembalikan hasil dan menampilkan CUs yang dikonsumsi.
foreach (var task in putRowTaskList)
{
task.Wait();
Console.WriteLine("konsumsi baca:{0}, tulis:{1}", task.Result.ConsumedCapacityUnit.Read,
task.Result.ConsumedCapacityUnit.Write);
}
// Jika operasi berhasil, tidak ada pengecualian yang dikembalikan.
Console.WriteLine("Penyisipan baris asinkron berhasil.");
}
catch (Exception ex)
{
// Jika operasi gagal, pengecualian dikembalikan. Tangani pengecualian.
Console.WriteLine("Penyisipan baris asinkron gagal. pengecualian:{0}", ex.Message);
} Untuk kode sampel terperinci, kunjungi PutRowAsync@GitHub.
Perbarui satu baris data
Operasi API
/// <summary>
/// Anda dapat memanggil operasi ini untuk memperbarui data baris tertentu. Jika baris tidak ada, baris baru ditambahkan. Jika baris ada, nilai kolom yang ditentukan ditambahkan, dimodifikasi, atau dihapus berdasarkan isi permintaan.
/// </summary>
/// <param name="request">Instance permintaan.</param>
public UpdateRowResponse UpdateRow(UpdateRowRequest request);
/// <summary>
/// Mode asinkron dari UpdateRow.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<UpdateRowResponse> UpdateRowAsync(UpdateRowRequest request); Parameter
Parameter | Deskripsi |
tableName | Nama tabel data. |
primaryKey | Informasi kunci utama tentang baris. Nilai parameter ini terdiri dari nama, tipe, dan nilai setiap kolom kunci utama. Penting Jumlah dan tipe kolom kunci utama yang Anda tentukan harus sama dengan jumlah dan tipe sebenarnya dari kolom kunci utama dalam tabel. |
condition | Kondisi yang harus dipenuhi untuk melakukan operasi. Anda dapat menentukan kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Lakukan pembaruan bersyarat. |
attribute | Kolom atribut yang ingin Anda perbarui. |
Contoh
Berikut adalah contoh kode untuk memperbarui satu baris data:
// Tentukan kunci utama baris. Skema kunci utama harus sama dengan skema yang ditentukan dalam TableMeta saat tabel dibuat.
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// Tentukan kolom atribut baris.
UpdateOfAttribute attribute = new UpdateOfAttribute();
attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
attribute.AddAttributeColumnToPut("col1", new ColumnValue("b")); // Ubah nilai kolom dari a menjadi b.
attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
try
{
// Konstruksi objek permintaan untuk memperbarui baris. RowExistenceExpectation.IGNORE menentukan bahwa data diperbarui tanpa memandang apakah baris yang ditentukan ada.
var request = new UpdateRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// Panggil operasi UpdateRow untuk memperbarui data.
otsClient.UpdateRow(request);
// Jika operasi berhasil, tidak ada pengecualian yang dikembalikan.
Console.WriteLine("Pembaruan baris berhasil.");
}
catch (Exception ex)
{
// Jika operasi gagal, pengecualian dikembalikan. Tangani pengecualian.
Console.WriteLine("Pembaruan baris gagal, pengecualian:{0}", ex.Message);
} Untuk kode sampel terperinci, kunjungi UpdateRow@GitHub.
Tulis beberapa baris data sekaligus
Catatan penggunaan
Operasi API
/// <summary>
/// <para>Sisipkan, modifikasi, atau hapus beberapa baris data dalam satu atau lebih tabel. </para>
/// <para>Operasi BatchWriteRow adalah serangkaian operasi PutRow, UpdateRow, dan DeleteRow. Eksekusi, pengembalian hasil, dan konsumsi unit kapasitas (CU) dari setiap operasi individu dilakukan secara independen. </para>
/// <para>Dibandingkan dengan eksekusi sejumlah besar operasi penulisan satu baris, penggunaan BatchWriteRow dapat mengurangi waktu respons permintaan dan meningkatkan laju penulisan data. </para>
/// </summary>
/// <param name="request">Instance permintaan.</param>
/// <returns>Instance respons</returns>
public BatchWriteRowResponse BatchWriteRow(BatchWriteRowRequest request);
/// <summary>
/// Mode asinkron dari BatchWriteRow.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<BatchWriteRowResponse> BatchWriteRowAsync(BatchWriteRowRequest request); Contoh
Berikut adalah contoh kode untuk menulis 100 baris data sekaligus:
var TableName = "SampleTable";
// Konstruksi objek permintaan untuk menulis 100 baris data sekaligus. Tentukan kunci utama 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"));
// Tentukan kolom atribut 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 operasi BatchWriteRow.
var response = otsClient.BatchWriteRow(request);
var tableRows = response.TableRespones;
var rows = tableRows[TableName];
// Saat menulis beberapa baris data sekaligus, beberapa baris mungkin gagal ditulis. Anda harus memeriksa nilai pengembalian dan memeriksa apakah status setiap baris berhasil. Untuk informasi lebih lanjut, lihat tautan GitHub dalam kode sampel.
}
catch (Exception ex)
{
// Jika operasi gagal, pengecualian dikembalikan. Tangani pengecualian.
Console.WriteLine("Penulisan batch baris gagal, pengecualian:{0}", ex.Message);
} Untuk kode sampel terperinci, kunjungi BatchWriteRow@GitHub.
FAQ
Referensi
Untuk memperbarui data dalam aplikasi dengan konkurensi tinggi berdasarkan kondisi tertentu, gunakan fitur pembaruan bersyarat. Untuk informasi lebih lanjut, lihat Lakukan pembaruan bersyarat.
Untuk mengumpulkan statistik waktu nyata tentang aplikasi online, seperti jumlah tampilan halaman (PV) pada berbagai topik, gunakan fitur penghitung atomik. Untuk informasi lebih lanjut, lihat Gunakan fitur penghitung atomik.
Setelah menulis data ke tabel, Anda dapat membaca atau menghapus data berdasarkan kebutuhan bisnis. Untuk informasi lebih lanjut, lihat Baca data dan Hapus data.