全部产品
Search
文档中心

ApsaraDB for HBase:Pemisahan Data Panas dan Dingin

更新时间:Jul 06, 2025

ApsaraDB for HBase Performance-enhanced Edition memungkinkan Anda menyimpan data panas dan dingin secara terpisah pada medium penyimpanan berbeda, meningkatkan efisiensi kueri data panas serta mengurangi biaya penyimpanan.

Informasi Latar Belakang

Dalam skenario data besar, data bisnis seperti data pesanan atau pemantauan bertambah seiring waktu dan memerlukan ruang penyimpanan yang besar. Sebagian besar data historis jarang digunakan dan perlu disimpan dengan metode hemat biaya. Oleh karena itu, ApsaraDB for HBase Performance-enhanced Edition memperkenalkan fitur pemisahan data panas dan dingin untuk membantu perusahaan mengurangi biaya penyimpanan melalui konfigurasi O&M yang disederhanakan. Medium baru (penyimpanan dingin) digunakan untuk menyimpan data dingin, sehingga biaya penyimpanan dapat dikurangi hingga dua pertiga dibandingkan ultra disk.

ApsaraDB for HBase Performance-enhanced Edition dapat secara otomatis memisahkan data panas dan dingin dalam tabel yang sama berdasarkan batas waktu yang ditentukan. Data dingin diarsipkan ke penyimpanan dingin, sementara akses ke tabel yang menyimpan data panas dan dingin tetap serupa dengan tabel standar. Saat menanyai tabel ini, Anda hanya perlu menentukan petunjuk kueri atau rentang waktu agar sistem dapat memutuskan apakah akan memindai data dingin atau panas.

Cara Kerjanya

ApsaraDB for HBase Performance-enhanced Edition menentukan apakah data yang ditulis ke tabel adalah data dingin atau panas berdasarkan cap waktu data dan batas waktu yang ditentukan. Cap waktu dihitung dalam milidetik. Data baru disimpan di penyimpanan panas dan dipindahkan ke penyimpanan dingin seiring waktu. Anda dapat mengubah batas waktu sesuai kebutuhan bisnis. Data dapat dipindahkan antara penyimpanan dingin dan panas.

Catatan Penggunaan

Untuk informasi lebih lanjut tentang catatan penggunaan, lihat Penyimpanan Dingin.

Penggunaan

Untuk menggunakan penyimpanan dingin, Anda harus meningkatkan ApsaraDB for HBase Performance-enhanced Edition ke versi V2.1.8 atau yang lebih baru. Tidak diperlukan modifikasi dependensi klien untuk membaca dan menulis data. Anda hanya perlu memodifikasi skema tabel menggunakan salah satu metode berikut:

Aktifkan Penyimpanan Dingin

Untuk informasi lebih lanjut tentang cara mengaktifkan penyimpanan dingin untuk kluster, lihat Penyimpanan Dingin.

Tentukan Batas Waktu untuk Tabel

Anda dapat memodifikasi parameter COLD_BOUNDARY untuk mengubah batas waktu pemisahan data panas dan dingin. Batas waktu diukur dalam detik. Misalnya, jika nilai COLD_BOUNDARY lebih besar dari atau sama dengan 86400, data baru diarsipkan sebagai data dingin setelah 86.400 detik (satu hari).

Tidak perlu menyetel properti keluarga kolom menjadi COLD untuk pemisahan data panas dan dingin. Jika properti tersebut telah disetel, hapus propertinya. Untuk informasi lebih lanjut, lihat Penyimpanan Dingin.

Shell

// Buat tabel yang menyimpan data panas dan dingin secara terpisah.
hbase(main):002:0> create 'chsTable', {NAME=>'f', COLD_BOUNDARY=>'86400'}
// Nonaktifkan pemisahan data panas dan dingin.
hbase(main):004:0> alter 'chsTable', {NAME=>'f', COLD_BOUNDARY=>""}
// Aktifkan pemisahan data panas dan dingin untuk tabel atau ubah batas waktu. Batas waktu diukur dalam detik.
hbase(main):005:0> alter 'chsTable', {NAME=>'f', COLD_BOUNDARY=>'86400'}

Java API

// Buat tabel yang menyimpan data panas dan dingin secara terpisah.
Admin admin = connection.getAdmin();
TableName tableName = TableName.valueOf("chsTable");
HTableDescriptor descriptor = new HTableDescriptor(tableName);
HColumnDescriptor cf = new HColumnDescriptor("f");
// Parameter COLD_BOUNDARY menentukan batas waktu untuk memisahkan data panas dan dingin. Unit: detik. Dalam contoh ini, data baru diarsipkan sebagai data dingin setelah satu hari.
cf.setValue(AliHBaseConstants.COLD_BOUNDARY, "86400");
descriptor.addFamily(cf);
admin.createTable(descriptor);

// Nonaktifkan pemisahan data panas dan dingin.
// Catatan: Anda harus melakukan operasi major compaction sebelum memindahkan data dari penyimpanan dingin ke penyimpanan panas.
HTableDescriptor descriptor = admin
    .getTableDescriptor(tableName);
HColumnDescriptor cf = descriptor.getFamily("f".getBytes());
// Nonaktifkan pemisahan data panas dan dingin.
cf.setValue(AliHBaseConstants.COLD_BOUNDARY, null);
admin.modifyTable(tableName, descriptor);

// Aktifkan pemisahan data panas dan dingin untuk tabel atau ubah batas waktu.
HTableDescriptor descriptor = admin
    .getTableDescriptor(tableName);
HColumnDescriptor cf = descriptor.getFamily("f".getBytes());
// Parameter COLD_BOUNDARY menentukan batas waktu untuk memisahkan data panas dan dingin. Unit: detik. Dalam contoh ini, data baru diarsipkan sebagai data dingin setelah satu hari.
cf.setValue(AliHBaseConstants.COLD_BOUNDARY, "86400");
admin.modifyTable(tableName, descriptor);

Tulis Data

Anda dapat menulis data ke tabel yang menyimpan data panas dan dingin secara terpisah dengan cara mirip dengan menulis data ke tabel standar. Untuk informasi lebih lanjut, lihat Gunakan HBase Java API untuk mengakses kluster ApsaraDB for HBase Performance-enhanced Edition atau Gunakan multi-language API untuk mengakses kluster ApsaraDB for HBase Performance-enhanced Edition. Cap waktu data adalah waktu ketika data ditulis ke tabel. Data baru disimpan di penyimpanan panas (disk standar). Jika durasi penyimpanan melebihi nilai yang ditentukan oleh parameter COLD_BOUNDARY, sistem secara otomatis memindahkan data ke penyimpanan dingin selama proses major compaction. Proses ini sepenuhnya transparan bagi pengguna.

Kueri Data

ApsaraDB for HBase Performance-enhanced Edition memungkinkan Anda menggunakan tabel untuk menyimpan data panas dan dingin. Anda dapat menanyai data hanya dari satu tabel. Untuk menanyai data dengan durasi penyimpanan kurang dari nilai yang ditentukan oleh parameter COLD_BOUNDARY, Anda dapat mengonfigurasi petunjuk HOT_ONLY dalam pernyataan GET atau SCAN untuk menanyai hanya data panas. Anda juga dapat mengonfigurasi parameter TimeRange dalam pernyataan GET atau SCAN untuk menentukan rentang waktu data yang ingin ditanyai. Sistem secara otomatis menentukan apakah data yang ingin ditanyai adalah data panas atau dingin berdasarkan rentang waktu yang ditentukan. Waktu yang diperlukan untuk menanyai data dingin lebih lama daripada waktu untuk menanyai data panas. The throughput of reading cold data is lower than the throughput of reading hot data.

Contoh

Get

  • Shell

    // Dalam contoh ini, petunjuk HOT_ONLY tidak digunakan. Sistem mungkin memindai data dingin.
    hbase(main):013:0> get 'chsTable', 'row1'
    // Dalam contoh ini, petunjuk HOT_ONLY digunakan. Sistem hanya memindai data panas. Jika row1 disimpan di penyimpanan dingin, tidak ada hasil kueri yang dikembalikan.
    hbase(main):015:0> get 'chsTable', 'row1', {HOT_ONLY=>true}
    // Dalam contoh ini, parameter TimeRange ditentukan. Sistem menentukan ruang lingkup data yang perlu dipindai berdasarkan nilai TimeRange dan COLD_BOUNDARY. Nilai TIMERANGE diukur dalam milidetik.
    hbase(main):016:0> get 'chsTable', 'row1', {TIMERANGE => [0, 1568203111265]}
  • Java

    Table table = connection.getTable("chsTable");
    // Dalam contoh ini, petunjuk HOT_ONLY tidak digunakan. Sistem mungkin memindai data dingin.
    Get get = new Get("row1".getBytes());
    System.out.println("result: " + table.get(get));
    // Dalam contoh ini, petunjuk HOT_ONLY digunakan. Sistem hanya memindai data panas. Jika row1 disimpan di penyimpanan dingin, tidak ada hasil kueri yang dikembalikan.
    get = new Get("row1".getBytes());
    get.setAttribute(AliHBaseConstants.HOT_ONLY, Bytes.toBytes(true));
    // Dalam contoh ini, parameter TimeRange ditentukan. Sistem menentukan ruang lingkup data yang perlu dipindai berdasarkan nilai TimeRange dan COLD_BOUNDARY. Nilai TIMERANGE diukur dalam milidetik.
    get = new Get("row1".getBytes());
    get.setTimeRange(0, 1568203111265)

Scan

Jika tidak mengonfigurasi petunjuk HOT_ONLY atau rentang waktu untuk pernyataan SCAN, baik data dingin maupun panas akan diperiksa. Hasil kueri digabungkan dan dikembalikan berdasarkan cara kerja operasi SCAN ApsaraDB for HBase.

  • Shell

    // Dalam contoh ini, petunjuk HOT_ONLY tidak digunakan. Sistem memindai data panas dan data dingin.
    hbase(main):017:0> scan 'chsTable', {STARTROW =>'row1', STOPROW=>'row9'}
    // Dalam contoh ini, petunjuk HOT_ONLY digunakan. Sistem hanya memindai data panas.
    hbase(main):018:0> scan 'chsTable', {STARTROW =>'row1', STOPROW=>'row9', HOT_ONLY=>true}
    // Dalam contoh ini, parameter TimeRange ditentukan. Sistem menentukan ruang lingkup data yang perlu dipindai berdasarkan nilai TimeRange dan COLD_BOUNDARY. Nilai TIMERANGE diukur dalam milidetik.
    hbase(main):019:0> scan 'chsTable', {STARTROW =>'row1', STOPROW=>'row9', TIMERANGE => [0, 1568203111265]}
  • Java

    TableName tableName = TableName.valueOf("chsTable");
    Table table = connection.getTable(tableName);
    // Dalam contoh ini, petunjuk HOT_ONLY tidak digunakan. Sistem memindai data panas dan data dingin.
    Scan scan = new Scan();
    ResultScanner scanner = table.getScanner(scan);
    for (Result result : scanner) {
        System.out.println("scan result:" + result);
    }
    // Dalam contoh ini, petunjuk HOT_ONLY digunakan. Sistem hanya memindai data panas.
    scan = new Scan();
    scan.setAttribute(AliHBaseConstants.HOT_ONLY, Bytes.toBytes(true));
    // Dalam contoh ini, parameter TimeRange ditentukan. Sistem menentukan ruang lingkup data yang perlu dipindai berdasarkan nilai TimeRange dan COLD_BOUNDARY. Nilai TIMERANGE diukur dalam milidetik.
    scan = new Scan();
    scan.setTimeRange(0, 1568203111265);
Catatan
  1. Penyimpanan dingin hanya digunakan untuk mengarsipkan data yang jarang diakses. Dalam kebanyakan kasus, kami sarankan Anda menentukan petunjuk HOT_ONLY atau rentang waktu untuk menanyai hanya data panas. Jika kluster Anda menerima banyak kueri yang mengenai data dingin, periksa apakah batas waktu disetel ke nilai yang sesuai.

  2. Jika memperbarui bidang dalam baris yang disimpan di penyimpanan dingin, bidang tersebut dipindahkan ke penyimpanan panas setelah pembaruan. Ketika baris ini dikenai kueri dengan petunjuk HOT_ONLY atau rentang waktu yang dikonfigurasi untuk mengenai data panas, hanya bidang yang diperbarui di penyimpanan panas yang dikembalikan. Jika ingin sistem mengembalikan seluruh baris, hapus petunjuk HOT_ONLY dari pernyataan kueri atau pastikan periode waktu dari saat baris dimasukkan hingga saat terakhir diperbarui berada dalam rentang waktu yang ditentukan. Kami sarankan Anda tidak memperbarui data yang disimpan di penyimpanan dingin. Jika perlu sering memperbarui data dingin, sesuaikan batas waktu untuk memindahkan data ke penyimpanan panas.

Kueri Ukuran Data Panas dan Dingin

Anda dapat memeriksa ukuran data panas dan dingin di tabel pada tab Tabel Pengguna ClusterManager. Untuk informasi lebih lanjut, lihat Sistem Manajemen Kluster.

Catatan

Jika tidak ada data yang disimpan di penyimpanan dingin, data di tabel mungkin disimpan di memori akses acak (RAM). Jalankan perintah flush untuk menyiram data ke disk, lalu lakukan operasi major compaction. Setelah operasi major compaction selesai, periksa ukuran data dingin.

Prioritaskan Pemilihan Data Panas

Dalam skenario di mana kueri SCAN dilakukan untuk menanyai informasi seperti semua pesanan atau catatan obrolan pelanggan, sistem mungkin memindai data panas dan dingin untuk mendapatkan data yang diperlukan. Hasil kueri dipaginasi berdasarkan cap waktu penulisan baris data dalam urutan menurun. Dalam kebanyakan kasus, data panas muncul sebelum data dingin. Jika tidak menggunakan petunjuk HOT_ONLY dalam kueri SCAN, sistem memindai data panas dan dingin, sehingga waktu respons kueri meningkat. Dengan memprioritaskan pemilihan data panas, sistem memindai data panas terlebih dahulu. Data dingin hanya diperiksa jika Anda ingin melihat lebih banyak hasil kueri, misalnya dengan mengklik ikon halaman berikutnya. Dengan cara ini, frekuensi akses data dingin dan waktu respons dikurangi.

Untuk memprioritaskan pemilihan data panas, atur nilai parameter COLD_HOT_MERGE menjadi true dalam kueri SCAN. Ini menunjukkan bahwa sistem memindai data panas terlebih dahulu dan hanya memindai data dingin jika Anda ingin melihat lebih banyak hasil.

Shell

hbase(main):002:0> scan 'chsTable', {COLD_HOT_MERGE=>true}

Java

scan = new Scan();
scan.setAttribute(AliHBaseConstants.COLD_HOT_MERGE, Bytes.toBytes(true));
scanner = table.getScanner(scan);
Catatan
  • Dalam skenario di mana data di bidang tertentu dalam baris diperbarui, baris menyimpan data panas dan dingin. Jika fitur prioritas data panas diaktifkan, hasil kueri dikembalikan dalam dua batch. Anda dapat menemukan dua hasil dengan kunci baris yang sama dalam set hasil.

  • Setelah fitur prioritas data panas diaktifkan, nilai kunci baris baris dingin yang ditentukan mungkin lebih kecil daripada nilai kunci baris baris panas karena sistem mengembalikan data panas sebelum data dingin. Hasil yang dikembalikan untuk kueri SCAN tidak diurutkan secara berurutan. Baris data panas dan dingin diurutkan secara terpisah berdasarkan nilai kunci baris. Untuk informasi lebih lanjut tentang bagaimana baris yang dikembalikan diurutkan, lihat hasil sampel berikut. Dalam beberapa skenario, Anda dapat menentukan kunci baris untuk memastikan urutan hasil untuk kueri SCAN. Misalnya, jika menggunakan tabel untuk menyimpan informasi pesanan, tentukan kunci baris yang terdiri dari kolom ID pelanggan dan kolom waktu pembuatan pesanan. Dengan cara ini, ketika menanyai pesanan pelanggan, pesanan yang dikembalikan diurutkan berdasarkan waktu pembuatan pesanan.

// Dalam contoh ini, baris dengan nilai kunci baris coldRow menyimpan data dingin dan baris dengan nilai kunci baris hotRow menyimpan data panas.
// Dalam kebanyakan kasus, baris dengan nilai kunci baris coldRow dikembalikan sebelum baris dengan nilai kunci baris hotRow karena baris di ApsaraDB for HBase diurutkan dalam urutan leksikografis. 
hbase(main):001:0> scan 'chsTable'
ROW                                                                COLUMN+CELL
 coldRow                                                              column=f:value, timestamp=1560578400000, value=cold_value
 hotRow                                                               column=f:value, timestamp=1565848800000, value=hot_value
2 row(s)

// Jika Anda menyetel COLD_HOT_MERGE menjadi true, sistem memindai baris dengan nilai kunci baris hotRow terlebih dahulu. Akibatnya, baris dengan nilai kunci baris hotRow dikembalikan sebelum baris dengan nilai kunci baris coldRow.
hbase(main):002:0> scan 'chsTable', {COLD_HOT_MERGE=>true}
ROW                                                                COLUMN+CELL
 hotRow                                                               column=f:value, timestamp=1565848800000, value=hot_value
 coldRow                                                              column=f:value, timestamp=1560578400000, value=cold_value
2 row(s)