Tablestore memungkinkan Anda menulis data ke tabel data dengan menulis satu baris atau beberapa baris data sekaligus. Anda dapat menulis baris secara individual atau menulis beberapa baris data sekaligus berdasarkan kebutuhan bisnis Anda. Topik ini menjelaskan cara menulis data ke Tablestore menggunakan Tablestore SDK for Java.
Prasyarat
Klien Tablestore telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.
Tabel data telah dibuat dalam instance Tablestore.
Metode penulisan
Tablestore memungkinkan Anda menulis satu baris data, memperbarui satu baris data, serta menulis beberapa baris data sekaligus melalui pemanggilan operasi yang berbeda. Tabel berikut menjelaskan perbedaan dan skenario penggunaan yang sesuai untuk setiap metode penulisan.
Metode Penulisan | Deskripsi | Skema |
Panggil operasi PutRow untuk menulis satu baris data. | Metode ini cocok untuk skenario di mana Anda ingin menulis sejumlah kecil data. | |
Anda dapat memanggil operasi UpdateRow untuk memperbarui satu baris data. | Metode ini cocok untuk skenario di mana Anda ingin memperbarui sejumlah kecil data. | |
Anda dapat memanggil operasi BatchWriteRow untuk menulis beberapa baris data ke satu atau lebih tabel sekaligus. | Metode 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 sama. |
Parameter
Tabel berikut menjelaskan parameter yang dapat dikonfigurasi untuk menulis data ke Tablestore.
Parameter | Deskripsi |
tableName | Nama tabel data. |
primaryKey | Informasi kunci utama tentang tabel data. Informasi kunci utama mencakup nama, tipe, dan nilai setiap kolom kunci utama. Penting
|
column | Informasi tentang kolom atribut. Informasi tentang kolom atribut mencakup nama, nilai, tipe, dan timestamp setiap kolom atribut. Tipe dan timestamp bersifat opsional.
Catatan
|
condition | Kondisi yang harus dipenuhi untuk menulis data. Kondisi bisa berupa kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Melakukan pembaruan bersyarat. |
Menulis satu baris data
Operasi PutRow digunakan untuk menulis satu baris data. Jika baris sudah ada, operasi PutRow akan menghapus semua versi data dari kolom pada baris tersebut sebelum menulis data baru.
Dalam contoh ini, pkValue mewakili nilai kolom kunci utama. Tentukan pkValue sesuai kebutuhan bisnis Anda. Untuk menulis data ke tabel, Anda harus menyertakan informasi kunci utama lengkap serta informasi kolom atribut yang ingin ditulis. Anda juga dapat menentukan kondisi untuk menulis data. Misalnya, Anda dapat menetapkan bahwa data hanya dapat ditulis jika baris yang ditentukan tidak ada.
Contoh kode berikut menunjukkan cara menggunakan nomor versi data yang dihasilkan otomatis oleh sistem, menentukan nomor versi data kustom, dan menentukan kondisi untuk menulis data:
Gunakan nomor versi data yang dihasilkan secara otomatis oleh sistem
Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data satu versi. Dalam contoh ini, nomor versi data dihasilkan otomatis oleh sistem:
private static void putRow(SyncClient client, String pkValue) {
// Konstruksi kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel data.
RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);
// Tambahkan kolom atribut.
for (int i = 0; i < 10; i++) {
rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
}
client.putRow(new PutRowRequest(rowPutChange));
}Tentukan nomor versi data kustom
Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data tiga versi. Dalam contoh ini, nomor versi data kustom ditentukan:
private static void putRow(SyncClient client, String pkValue) {
// Konstruksi kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel data.
RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);
// Tambahkan kolom atribut.
long ts = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
}
}
client.putRow(new PutRowRequest(rowPutChange));
}Tentukan kondisi keberadaan baris
Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data tiga versi, ketika baris yang ditentukan tidak ada. Dalam contoh ini, nomor versi data kustom ditentukan:
private static void putRow(SyncClient client, String pkValue) {
// Konstruksi kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel data.
RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);
// Tentukan kondisi untuk operasi PutRow. Dalam contoh ini, data ditulis ke tabel data hanya jika baris yang ditentukan tidak ada.
rowPutChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));
// Tambahkan kolom atribut.
long ts = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
}
}
client.putRow(new PutRowRequest(rowPutChange));
}Tentukan kondisi nilai kolom dan kondisi keberadaan baris pada saat yang sama
Contoh kode berikut menunjukkan cara menulis baris yang berisi 10 kolom atribut, masing-masing menyimpan data tiga versi, ketika baris yang ditentukan ada dan nilai kolom Col0 lebih besar dari 100. Dalam contoh ini, nomor versi data kustom ditentukan:
private static void putRow(SyncClient client, String pkValue) {
// Konstruksi kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel data.
RowPutChange rowPutChange = new RowPutChange("your_tableName", primaryKey);
// Tentukan kondisi untuk operasi PutRow. Dalam contoh ini, baris ditulis ke tabel data hanya jika baris ada dan nilai kolom Col0 lebih besar dari 100.
Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
condition.setColumnCondition(new SingleColumnValueCondition("Col0",
SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
rowPutChange.setCondition(condition);
// Tambahkan kolom atribut.
long ts = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
}
}
client.putRow(new PutRowRequest(rowPutChange));
}Memperbarui satu baris data
Operasi UpdateRow digunakan untuk memperbarui satu baris data. Anda dapat memperbarui nilai kolom atribut, menambahkan atau menghapus kolom atribut, atau menghapus versi data tertentu dari kolom atribut. Jika baris tidak ada, baris baru akan ditambahkan.
Jika operasi UpdateRow hanya menentukan kolom yang ingin dihapus dari baris dan baris tidak ada, tidak ada baris yang ditambahkan ke tabel data.
Contoh kode berikut menunjukkan cara memperbarui kolom tertentu, menghapus versi data tertentu dari kolom Col1, dan menghapus kolom Col0 baik dengan atau tanpa menentukan kondisi:
Perbarui baris data tanpa menentukan kondisi
Contoh kode berikut menunjukkan cara memperbarui baris data tanpa menentukan kondisi:
private static void updateRow(SyncClient client, String pkValue) {
// Konstruksi kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel data.
RowUpdateChange rowUpdateChange = new RowUpdateChange("your_tableName", primaryKey);
// Perbarui kolom tertentu.
for (int i = 0; i < 10; i++) {
rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
}
// Hapus versi data tertentu dari kolom.
rowUpdateChange.deleteColumn("Col1", 1465373223000L);
// Hapus kolom.
rowUpdateChange.deleteColumns("Col0");
client.updateRow(new UpdateRowRequest(rowUpdateChange));
}Tentukan kondisi keberadaan baris atau kondisi berdasarkan nilai kolom untuk memperbarui data
Contoh kode berikut menunjukkan cara memperbarui baris data hanya jika baris yang ditentukan ada dan nilai kolom Col0 lebih besar dari 100:
private static void updateRow(SyncClient client, String pkValue) {
// Konstruksi kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Tentukan nama tabel data.
RowUpdateChange rowUpdateChange = new RowUpdateChange("your_tableName", primaryKey);
// Tentukan kondisi untuk operasi UpdateRow. Dalam contoh ini, baris data diperbarui hanya jika baris ada dan nilai kolom Col0 lebih besar dari 100.
Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
condition.setColumnCondition(new SingleColumnValueCondition("Col0",
SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
rowUpdateChange.setCondition(condition);
// Perbarui kolom tertentu.
for (int i = 0; i < 10; i++) {
rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
}
// Hapus versi data tertentu dari kolom.
rowUpdateChange.deleteColumn("Col1", 1465373223000L);
// Hapus kolom.
rowUpdateChange.deleteColumns("Col0");
client.updateRow(new UpdateRowRequest(rowUpdateChange));
}Menulis beberapa baris data sekaligus
Operasi BatchWriteRow digunakan untuk menulis beberapa baris data ke satu atau lebih tabel sekaligus.
Operasi BatchWriteRow mencakup beberapa operasi PutRow, UpdateRow, dan DeleteRow. Saat memanggil operasi BatchWriteRow, proses pembuatan suboperasi serupa dengan pemanggilan operasi PutRow, UpdateRow, atau DeleteRow secara individual. Setiap operasi PutRow, UpdateRow, atau DeleteRow diproses secara terpisah oleh Tablestore, dan respons untuk setiap operasi dikembalikan secara independen.
Operasi BatchWriteRow tidak memberlakukan batas atas pada jumlah permintaan bersamaan. Kami merekomendasikan agar Anda mengonfigurasi jumlah permintaan bersamaan berdasarkan spesifikasi klien dan status sumber daya untuk memastikan efisiensi dan stabilitas kode.
Jika server mendeteksi parameter tidak valid dalam operasi tertentu, operasi BatchWriteRow melempar pengecualian yang menunjukkan parameter tidak valid. Dalam hal ini, tidak ada operasi dalam permintaan yang dilakukan.
Saat memanggil operasi BatchWriteRow untuk menulis beberapa baris data sekaligus, beberapa baris mungkin gagal ditulis. Jika ini terjadi, Tablestore mengembalikan BatchWriteRowResponse, yang mencakup indeks dan pesan kesalahan baris yang gagal. Kami merekomendasikan agar Anda memeriksa nilai pengembalian. Anda dapat menentukan apakah semua baris berhasil ditulis berdasarkan parameter
isAllSucceeddalam BatchWriteRowResponse.
Contoh kode berikut menunjukkan cara mengirim permintaan untuk operasi BatchWriteRow, yang terdiri dari dua operasi PutRow, satu operasi DeleteRow, dan satu operasi UpdateRow:
private static void batchWriteRow(SyncClient client) {
BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();
// Konstruksi rowPutChange pertama.
PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk1Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue1"));
// Tentukan nama tabel data.
RowPutChange rowPutChange1 = new RowPutChange("your_tableName", pk1Builder.build());
// Tambahkan kolom.
for (int i = 0; i < 10; i++) {
rowPutChange1.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
}
// Tambahkan rowPutChange1 ke kode operasi batch.
batchWriteRowRequest.addRowChange(rowPutChange1);
// Konstruksi rowPutChange kedua.
PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk2Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue2"));
// Tentukan nama tabel data.
RowPutChange rowPutChange2 = new RowPutChange("your_tableName", pk2Builder.build());
// Tambahkan kolom.
for (int i = 0; i < 10; i++) {
rowPutChange2.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
}
// Tambahkan rowPutChange2 ke kode operasi batch.
batchWriteRowRequest.addRowChange(rowPutChange2);
// Konstruksi rowUpdateChange.
PrimaryKeyBuilder pk3Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk3Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue3"));
// Tentukan nama tabel data.
RowUpdateChange rowUpdateChange = new RowUpdateChange("your_tableName", pk3Builder.build());
// Tambahkan kolom.
for (int i = 0; i < 10; i++) {
rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
}
// Hapus kolom.
rowUpdateChange.deleteColumns("Col0");
// Tambahkan rowUpdateChange ke kode operasi batch.
batchWriteRowRequest.addRowChange(rowUpdateChange);
// Konstruksi rowDeleteChange.
PrimaryKeyBuilder pk4Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk4Builder.addPrimaryKeyColumn("your_primaryKey", PrimaryKeyValue.fromString("pkValue4"));
// Tentukan nama tabel data.
RowDeleteChange rowDeleteChange = new RowDeleteChange("your_tableName", pk4Builder.build());
// Tambahkan rowDeleteChange ke kode operasi batch.
batchWriteRowRequest.addRowChange(rowDeleteChange);
BatchWriteRowResponse response = client.batchWriteRow(batchWriteRowRequest);
System.out.println("Apakah semua operasi berhasil:" + response.isAllSucceed());
if (!response.isAllSucceed()) {
for (BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) {
System.out.println("Baris yang gagal:" + batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey());
System.out.println("Penyebab kegagalan:" + rowResult.getError());
}
/**
* Anda dapat menggunakan metode createRequestForRetry untuk membangun permintaan lain untuk mencoba kembali operasi pada baris yang gagal. Dalam contoh ini, hanya permintaan ulang yang dibangun.
* Kami merekomendasikan agar Anda menggunakan kebijakan ulang kustom dalam SDK Tablestore sebagai metode ulang. Dengan cara ini, Anda dapat mencoba kembali baris yang gagal setelah operasi batch dilakukan. Setelah Anda menentukan kebijakan ulang, Anda tidak perlu menambahkan kode ulang untuk memanggil operasi.
*/
BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
}
}FAQ
Referensi
Untuk informasi lebih lanjut tentang kode sampel yang dapat digunakan untuk melakukan operasi data Tablestore, kunjungi kode sampel di GitHub.
Untuk mengumpulkan statistik real-time tentang aplikasi online, seperti jumlah tampilan halaman (PV) pada berbagai halaman, Anda dapat menggunakan fitur penghitung atomik. Untuk informasi lebih lanjut, lihat Gunakan Fitur Penghitung Atomik.
Untuk melakukan operasi atomik untuk menulis satu atau beberapa baris data, Anda dapat menggunakan fitur transaksi lokal. Untuk informasi lebih lanjut, lihat Gunakan Fitur Transaksi Lokal.