全部产品
Search
文档中心

Tablestore:Tulis Data

更新时间:Jul 06, 2025

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

Sisipkan satu baris data

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.

Perbarui satu baris 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.

Tulis beberapa baris data sekaligus

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

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
  • Jumlah dan tipe kolom kunci utama yang Anda tentukan harus sama dengan jumlah dan tipe sebenarnya dari kolom kunci utama dalam tabel.

  • Jika kolom kunci utama adalah kolom kunci utama auto-increment, Anda hanya perlu mengatur nilai kolom kunci utama auto-increment sebagai placeholder. Untuk informasi lebih lanjut, lihat Konfigurasikan kolom kunci utama auto-increment.

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).

  • Nama kolom atribut adalah nama kolom atribut, dan tipe kolom atribut adalah tipe data dari kolom atribut. Untuk informasi lebih lanjut, lihat Konvensi penamaan dan tipe data.

    Kolom atribut dapat berupa tipe INTEGER, STRING (UTF-8 encoded string), BINARY, BOOLEAN, atau DOUBLE.

  • Timestamp adalah nomor versi data. Anda dapat menggunakan nomor versi data yang dihasilkan secara otomatis oleh sistem atau menentukan nomor versi data kustom. Jika Anda tidak menentukan nomor versi data, nomor versi data yang dihasilkan secara otomatis oleh sistem digunakan. Untuk informasi lebih lanjut, lihat Versi data dan TTL.

    • Secara default, sistem menggunakan timestamp UNIX saat ini sebagai nomor versi data. Timestamp UNIX mewakili jumlah milidetik yang telah berlalu sejak 1 Januari 1970, 00:00:00 UTC.

    • Jika Anda menentukan nomor versi kustom, pastikan bahwa nomor versi tersebut merupakan timestamp 64-bit yang akurat hingga milidetik dan berada dalam rentang versi yang valid.

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
  • Tablestore SDK for .NET V2.2.0 atau lebih baru mendukung kondisi keberadaan baris dan kondisi berdasarkan nilai kolom.

  • Dalam Tablestore SDK for .NET V3.0.0 atau lebih baru, Anda harus menggunakan new Condition (RowExistenceExpectation.IGNORE) alih-alih Condition.IGNORE, new Condition (RowExistenceExpectation.EXPECT_EXIST) alih-alih Condition.EXPECT_EXIST, atau new Condition (RowExistenceExpectation.EXPECT_NOT_EXIST) alih-alih Condition.EXPECT_NOT_EXIST.

  • RowExistenceExpectation.IGNORE menentukan bahwa data baru dimasukkan ke dalam baris tanpa memandang apakah baris tersebut ada. Jika baris ada, data yang ada akan ditimpa.

  • RowExistenceExpectation.EXPECT_EXIST menentukan bahwa data baru hanya dimasukkan ketika baris yang ditentukan ada. Data yang ada akan ditimpa.

  • RowExistenceExpectation.EXPECT_NOT_EXIST menentukan bahwa data baru hanya dimasukkan ketika baris yang ditentukan tidak ada.

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.

Penting

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.