All Products
Search
Document Center

Tablestore:Menulis data

Last Updated:Apr 11, 2026

Metode penulisan

Tablestore menyediakan operasi PutRow, UpdateRow, dan BatchWriteRow untuk menulis data. Pilih metode yang paling sesuai dengan skenario Anda.

Metode penulisan

Deskripsi

Skenario

Menyisipkan satu baris data

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.

Memperbarui satu baris data

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.

Menulis data secara batch

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

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
  • Jumlah dan tipe kolom kunci primer harus sesuai dengan yang didefinisikan untuk tabel data.

  • Jika kolom kunci primer merupakan kolom auto-increment, atur nilainya ke placeholder. Untuk informasi selengkapnya, lihat Kolom kunci primer auto-increment.

attribute

Kolom atribut baris tersebut. Setiap item mencakup nama atribut, tipe atribut (opsional), nilai atribut, dan stempel waktu (opsional).

  • Nama atribut adalah nama kolom atribut, dan tipe atribut adalah tipe data kolom atribut tersebut. Untuk informasi selengkapnya, lihat Konvensi penamaan dan tipe data.

    Tipe atribut dapat berupa INTEGER, STRING (dikodekan UTF-8), BINARY, BOOLEAN, atau DOUBLE.

  • Stempel waktu adalah nomor versi data. Nilai ini dapat dihasilkan secara otomatis oleh sistem atau dikustomisasi. Jika Anda tidak mengatur parameter ini, sistem akan menghasilkan stempel waktu secara otomatis. Untuk informasi selengkapnya, lihat Versi data dan siklus hidup.

    • Saat sistem menghasilkan nomor versi secara otomatis, sistem menggunakan stempel waktu UNIX saat ini dalam milidetik (jumlah milidetik yang telah berlalu sejak 00:00:00 UTC pada 1 Januari 1970) sebagai nomor versi.

    • Saat Anda mengkustomisasi nomor versi, nilai tersebut harus berupa stempel waktu UNIX 64-bit dalam milidetik dan berada dalam rentang versi yang valid.

condition

Gunakan pembaruan kondisional untuk menetapkan kondisi keberadaan baris asli atau kondisi nilai kolom pada baris asli. Untuk informasi selengkapnya, lihat Pembaruan kondisional.

Catatan
  • Mulai dari .NET SDK 2.2.0, Condition mendukung kondisi baris maupun kondisi kolom.

  • Condition.IGNORE, Condition.EXPECT_EXIST, dan Condition.EXPECT_NOT_EXIST sudah tidak digunakan lagi mulai dari .NET SDK 3.0.0. Gantilah dengan new Condition (RowExistenceExpectation.IGNORE), new Condition (RowExistenceExpectation.EXPECT_EXIST), dan new Condition (RowExistenceExpectation.EXPECT_NOT_EXIST).

  • RowExistenceExpectation.IGNORE menunjukkan bahwa data baru disisipkan tanpa mempertimbangkan apakah baris tersebut sudah ada. Jika baris sudah ada, data aslinya akan ditimpa.

  • RowExistenceExpectation.EXPECT_EXIST menunjukkan bahwa data baru disisipkan hanya jika baris tersebut sudah ada. Data aslinya akan ditimpa.

  • RowExistenceExpectation.EXPECT_NOT_EXIST menunjukkan bahwa data disisipkan hanya jika baris tersebut belum ada.

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.

Penting

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.