Tablestore menyediakan berbagai operasi untuk membaca data. Anda dapat menggunakan operasi GetRow untuk membaca satu baris data, BatchGetRow untuk membaca beberapa baris sekaligus, dan GetRange untuk membaca data dengan nilai kunci primer dalam rentang tertentu.
Metode Kueri
Tablestore menyediakan operasi GetRow, BatchGetRow, dan GetRange untuk membaca data. Pilih metode kueri yang sesuai berdasarkan skenario penggunaan Anda.
Untuk membaca data dari tabel dengan kolom kunci primer auto-increment, pastikan semua nilai kolom kunci primer termasuk nilai kolom auto-increment telah ditentukan. Untuk informasi lebih lanjut, lihat Konfigurasi kolom kunci primer auto-increment. Jika nilai kolom auto-increment tidak tersedia, gunakan operasi GetRange untuk menentukan rentang pembacaan berdasarkan nilai kunci primer kolom pertama.
Metode Kueri | Deskripsi | Skenario |
Gunakan operasi GetRow untuk membaca satu baris data. | Cocok untuk skenario di mana semua kolom kunci primer dapat ditentukan dan jumlah baris yang dibaca sedikit. | |
Gunakan operasi BatchGetRow untuk membaca beberapa baris data dari satu atau lebih tabel sekaligus. Operasi BatchGetRow terdiri dari beberapa operasi GetRow. Proses pembuatan suboperasi sama dengan pemanggilan operasi GetRow. | Cocok untuk skenario di mana semua kolom kunci primer dapat ditentukan dan jumlah baris yang dibaca besar atau data harus dibaca dari beberapa tabel. | |
Gunakan operasi GetRange untuk membaca data dengan nilai kunci primer dalam rentang tertentu. Operasi GetRange memungkinkan pembacaan data ke arah maju atau mundur dengan batasan jumlah baris. Jika rentang besar dan melebihi batas atas, pemindaian berhenti, dan baris yang dibaca serta informasi kunci primer baris berikutnya dikembalikan. Permintaan baru dapat dimulai dari posisi terakhir. | Cocok untuk skenario di mana rentang atau awalan kolom kunci primer dapat ditentukan. Penting Jika awalan kolom kunci primer tidak dapat ditentukan, gunakan INF_MIN dan INF_MAX untuk menentukan rentang semua kolom kunci primer. Operasi ini memindai seluruh tabel tetapi mengonsumsi banyak sumber daya komputasi. Gunakan dengan hati-hati. |
Prasyarat
Instansi OTSClient harus diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instansi OTSClient.
Tabel data harus dibuat dan data telah ditulis ke tabel. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Membaca satu baris data
Gunakan operasi GetRow untuk membaca satu baris data. Setelah memanggil operasi GetRow, salah satu hasil berikut mungkin dikembalikan:
Operasi API
/*
* Membaca satu baris data berdasarkan informasi kunci primer yang ditentukan.
*/
getRow(params, callback)Parameter
Parameter | Deskripsi |
tableName | Nama tabel. |
primaryKey | Informasi kunci primer dari baris. Informasi kunci primer terdiri dari nama kolom kunci primer, tipe kunci primer, dan nilai kunci primer. Penting Jumlah dan tipe kolom kunci primer yang Anda tentukan harus sama dengan jumlah dan tipe kolom kunci primer aktual dalam tabel. |
columnsToGet | Kolom yang ingin Anda baca. Anda dapat menentukan nama kolom kunci primer atau kolom atribut.
Catatan
|
maxVersions | Jumlah maksimum versi data yang dapat Anda baca. Penting Anda harus menentukan setidaknya salah satu parameter maxVersions dan timeRange.
|
timeRange | Rentang waktu versi atau versi spesifik yang ingin Anda baca. Untuk informasi lebih lanjut, lihat TimeRange. Penting Anda harus menentukan setidaknya salah satu parameter maxVersions dan timeRange.
Hanya salah satu dari specific_time dan Nilai valid parameter timeRange: 0 hingga |
columnFilter | Filter yang ingin Anda gunakan untuk menyaring hasil kueri di sisi server. Hanya baris yang memenuhi kondisi filter yang dikembalikan. Untuk informasi lebih lanjut, lihat Konfigurasi filter. Catatan Jika Anda menentukan parameter columnsToGet dan columnFilter, Tablestore menanyakan kolom yang ditentukan oleh parameter columnsToGet, lalu mengembalikan baris yang memenuhi kondisi filter. |
Contoh kode
Berikut adalah contoh kode untuk membaca satu baris data:
var TableStore = require('../index.js');
var Long = TableStore.Long;
var client = require('./client');
var params = {
tableName: "sampleTable",
primaryKey: [{ 'gid': Long.fromNumber(20004) }, { 'uid': Long.fromNumber(20004) }],
maxVersions: 2 // Tentukan jumlah maksimum versi data yang dapat dibaca. Nilai 2 menentukan bahwa Anda dapat membaca maksimal dua versi data.
};
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));
params.columnFilter = condition;
client.getRow(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
}); Untuk melihat contoh kode lengkap, kunjungi GetRow@GitHub.
Membaca beberapa baris data sekaligus
Gunakan operasi BatchGetRow untuk membaca beberapa baris data dari satu atau lebih tabel sekaligus. Operasi BatchGetRow terdiri dari beberapa operasi GetRow.
Setiap operasi GetRow dilakukan secara terpisah, dan respons untuk setiap operasi dikembalikan secara individual oleh Tablestore.
Catatan Penggunaan
Saat memanggil operasi BatchGetRow untuk membaca beberapa baris sekaligus, ada kemungkinan beberapa baris gagal dibaca. Jika hal ini terjadi, Tablestore tidak mengembalikan pengecualian, melainkan mengembalikan BatchGetRowResponse yang mencakup informasi tentang baris yang gagal. Oleh karena itu, saat memanggil operasi BatchGetRow, Anda harus memeriksa nilai pengembalian untuk memastikan keberhasilan pembacaan data dari setiap baris.
Operasi BatchGetRow menggunakan parameter yang sama untuk semua baris. Misalnya, jika parameter
ColumnsToGetdiatur ke [colA], hanya nilai kolom colA yang dibaca dari semua baris.Anda dapat membaca maksimal 100 baris sekaligus menggunakan operasi BatchGetRow.
Operasi API
/**
* Membaca beberapa baris data dari satu atau lebih tabel sekaligus.
*/
batchGetRow(params, callback) Parameter
Dibandingkan dengan operasi GetRow, operasi BatchGetRow memiliki perubahan berikut:
Hierarki dibuat untuk tabel, memungkinkan pembacaan data dari beberapa tabel sekaligus.
Gunakan parameter tables untuk menentukan informasi tabel dan baris tempat operasi baca dilakukan.
Parameter primaryKey memungkinkan penentuan informasi kunci primer untuk beberapa baris, sehingga data dapat dibaca dari beberapa baris sekaligus.
CatatanPastikan informasi kunci primer yang ditentukan ada dalam tabel. Jika tidak, data baris yang sesuai akan kosong dalam respons.
Contoh kode
Berikut adalah contoh kode untuk membaca data dari beberapa tabel sekaligus dan mencoba lagi operasi baca jika terjadi kesalahan:
var client = require('./client');
var TableStore = require('../index.js');
var Long = TableStore.Long;
var params = {
tables: [{
tableName: 'sampleTable',
primaryKey: [
[{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
[{ 'gid': Long.fromNumber(20015) }, { 'uid': Long.fromNumber(20015) }]
],
startColumn: "col2",
endColumn: "col4"
},
{
tableName: 'notExistTable',
primaryKey: [
[{ 'gid': Long.fromNumber(10001) }, { 'uid': Long.fromNumber(10001) }]
]
}
],
};
var maxRetryTimes = 3;
var retryCount = 0;
function batchGetRow(params) {
client.batchGetRow(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
var isAllSuccess = true;
var retryRequest = { tables: [] };
for (var i = 0; i < data.tables.length; i++) {
var failedRequest = { tableName: data.tables[i][0].tableName, primaryKey: [] };
for (var j = 0; j < data.tables[i].length; j++) {
if (!data.tables[i][j].isOk && null != data.tables[i][j].primaryKey) {
isAllSuccess = false;
var pks = [];
for (var k in data.tables[i][j].primaryKey) {
var name = data.tables[i][j].primaryKey[k].name;
var value = data.tables[i][j].primaryKey[k].value;
var kp = {};
kp[name] = value;
pks.push(kp);
}
failedRequest.primaryKey.push(pks);
} else {
// get success data
}
}
if (failedRequest.primaryKey.length > 0) {
retryRequest.tables.push(failedRequest);
}
}
if (!isAllSuccess && retryCount++ < maxRetryTimes) {
batchGetRow(retryRequest);
}
console.log('success:', data);
});
}
batchGetRow(params, maxRetryTimes); Untuk melihat contoh kode lengkap, kunjungi BatchGetRow@GitHub.
Membaca data yang nilai kunci primernya berada dalam rentang tertentu
Gunakan operasi GetRange untuk membaca data dengan nilai kunci primer dalam rentang tertentu.
Operasi GetRange memungkinkan pembacaan data ke arah maju atau mundur dengan batasan jumlah baris. Jika rentang besar dan melebihi batas atas, pemindaian berhenti, dan baris yang dibaca serta informasi kunci primer baris berikutnya dikembalikan. Permintaan baru dapat dimulai dari posisi terakhir.
Dalam tabel Tablestore, semua baris diurutkan berdasarkan kunci primer. Kunci primer terdiri dari semua kolom kunci primer secara berurutan, sehingga baris tidak disortir berdasarkan kolom kunci primer tertentu.
Catatan Penggunaan
Operasi GetRange mengikuti prinsip pencocokan paling kiri. Tablestore membandingkan nilai secara berurutan dari kolom kunci primer pertama hingga terakhir untuk membaca data dalam rentang tertentu. Misalnya, jika kunci primer terdiri dari PK1, PK2, dan PK3, Tablestore pertama-tama memeriksa apakah nilai PK1 suatu baris berada dalam rentang yang ditentukan. Jika ya, baris tersebut dikembalikan tanpa memeriksa kolom kunci primer lainnya. Jika tidak, proses dilanjutkan untuk kolom kunci primer berikutnya.
Jumlah data yang dipindai mencapai 4 MB.
Jumlah baris yang dipindai mencapai 5.000.
Jumlah baris yang dikembalikan mencapai batas atas.
Throughput baca tidak cukup untuk membaca baris data berikutnya karena semua throughput baca cadangan telah habis.
Operasi API
/**
* Membaca data yang nilai kunci primernya berada dalam rentang tertentu.
*/
getRange(params, callback) Parameter
Parameter | Deskripsi |
tableName | Nama tabel. |
direction | Urutan di mana Anda ingin mengurutkan baris dalam respons.
Misalnya, sebuah tabel memiliki dua nilai kunci primer A dan B, dan Nilai A lebih kecil dari Nilai B. Jika Anda mengatur parameter direction ke FORWARD dan menentukan rentang |
inclusiveStartPrimaryKey | Informasi kunci primer awal dan informasi kunci primer akhir dari rentang yang ingin Anda baca. Kolom kunci primer awal dan kolom kunci primer akhir harus berupa kolom kunci primer valid atau kolom virtual yang datanya bertipe INF_MIN dan INF_MAX. Jumlah kolom dalam rentang yang ditentukan oleh kolom virtual harus sama dengan jumlah kolom kunci primer dari tabel yang ditentukan. INF_MIN menunjukkan nilai yang sangat kecil. Semua nilai tipe lainnya lebih besar dari nilai bertipe INF_MIN. INF_MAX menunjukkan nilai yang sangat besar. Semua nilai tipe lainnya lebih kecil dari nilai bertipe INF_MAX.
Baris dalam tabel diurutkan dalam urutan naik berdasarkan nilai kunci primer. Rentang yang digunakan untuk membaca data adalah interval tertutup-kiri, terbuka-kanan. Jika data dibaca ke arah maju, baris yang nilai kunci primernya lebih besar dari atau sama dengan nilai kunci primer awal tetapi lebih kecil dari nilai kunci primer akhir dikembalikan. |
exclusiveEndPrimaryKey | |
limit | Jumlah maksimum baris yang dapat dikembalikan. Nilai parameter ini harus lebih besar dari 0. Tablestore menghentikan operasi setelah jumlah maksimum baris yang dapat dikembalikan dalam arah maju atau mundur tercapai, meskipun beberapa baris dalam rentang yang ditentukan belum dikembalikan. Anda dapat menggunakan nilai parameter nextStartPrimaryKey yang dikembalikan dalam respons untuk membaca data pada permintaan berikutnya. |
columnsToGet | Kolom yang ingin Anda baca. Anda dapat menentukan nama kolom kunci primer atau kolom atribut.
Catatan
|
maxVersions | Jumlah maksimum versi data yang dapat Anda baca. Penting Anda harus menentukan setidaknya salah satu parameter maxVersions dan timeRange.
|
timeRange | Rentang waktu versi atau versi spesifik yang ingin Anda baca. Untuk informasi lebih lanjut, lihat TimeRange. Penting Anda harus menentukan setidaknya salah satu parameter maxVersions dan timeRange.
Hanya salah satu dari specific_time dan Nilai valid parameter timeRange: 0 hingga |
columnFilter | Filter yang ingin Anda gunakan untuk menyaring hasil kueri di sisi server. Hanya baris yang memenuhi kondisi filter yang dikembalikan. Untuk informasi lebih lanjut, lihat Konfigurasi filter. Catatan Jika Anda menentukan parameter columnsToGet dan columnFilter, Tablestore menanyakan kolom yang ditentukan oleh parameter columnsToGet, lalu mengembalikan baris yang memenuhi kondisi filter. |
nextStartPrimaryKey | Informasi kunci primer awal untuk permintaan baca berikutnya. Nilai parameter nextStartPrimaryKey dapat digunakan untuk menentukan apakah semua data telah dibaca.
|
Contoh kode
Berikut adalah contoh kode untuk membaca data dalam rentang tertentu:
var Long = TableStore.Long;
var client = require('./client');
var params = {
tableName: "sampleTable",
direction: TableStore.Direction.FORWARD,
inclusiveStartPrimaryKey: [{ "gid": TableStore.INF_MIN }, { "uid": TableStore.INF_MIN }],
exclusiveEndPrimaryKey: [{ "gid": TableStore.INF_MAX }, { "uid": TableStore.INF_MAX }],
limit: 50
};
client.getRange(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
// Jika nilai parameter data.next_start_primary_key tidak kosong, sistem melanjutkan membaca data.
if (data.next_start_primary_key) {
}
console.log('success:', data);
}); Untuk melihat contoh kode lengkap, kunjungi GetRange@GitHub.