Pengujian benchmark ini membandingkan throughput, latensi respons, dan rasio kompresi antara kluster Apache HBase dan kluster Lindorm menggunakan Yahoo Cloud Serving Benchmark (YCSB).
Alur kerja pengujian:
Buat tabel di kedua kluster menggunakan skema yang sama.
Muat 2 miliar baris data menggunakan YCSB.
Jalankan pengujian throughput pada empat skenario dengan jumlah thread yang sama.
Jalankan pengujian latensi respons pada keempat skenario yang sama dengan target OPS tetap.
Jalankan pengujian rasio kompresi pada empat kombinasi kolom/ukuran.
Buat tabel
Kedua kluster menggunakan skema tabel yang sama dengan 200 partisi pre-split berdasarkan data YCSB.
Untuk petunjuk penggunaan Lindorm Shell dalam membuat tabel, lihat Gunakan Lindorm Shell untuk terhubung ke LindormTable.
Kluster Lindorm — menggunakan encoding INDEX (algoritma eksklusif Lindorm yang diaktifkan dengan mengatur DATA_BLOCK_ENCODING ke DIFF) dan kompresi Zstandard (ZSTD):
create 'test', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'ZSTD'}, {SPLITS => (1..199).map{|i| "user#{(i * ((2**63-1)/199)).to_s.rjust(19, "0")}"} }Kluster Apache HBase — menggunakan encoding DIFF dan kompresi SNAPPY sesuai rekomendasi Apache HBase:
create 'test', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'SNAPPY'}, {SPLITS => (1..199).map{|i| "user#{(i * ((2**63-1)/199)).to_s.rjust(19, "0")}"} }Muat data
Setiap tabel berisi 2 miliar baris, 20 kolom per baris, dan 20 byte per kolom.
Profil YCSB:
recordcount=2000000000
operationcount=150000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=20
fieldlength=20
readproportion=1.0
updateproportion=0.0
scanproportion=0
insertproportion=0
requestdistribution=uniformJalankan perintah berikut untuk memuat data:
bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -sPengujian throughput
Pengujian throughput menjalankan setiap skenario dengan jumlah thread yang sama di kedua kluster. Keempat skenario tersebut saling independen.
Semua skenario menggunakan maxexecutiontime=1200 (durasi eksekusi 20 menit). Untuk skenario baca, lakukan pemanasan selama 20 menit sebelum pengujian resmi; picu kompaksi mayor dan tunggu hingga selesai sebelum memulai.
Baca baris tunggal
Menyimulasikan pencarian titik (point lookup) dengan konkurensi tinggi. Membaca satu baris dalam satu waktu dari rentang kueri 10 juta baris dalam dataset 2 miliar baris. Rentang kueri (recordcount=10000000) lebih kecil daripada total dataset untuk mensimulasikan pola baca hot-spot terhadap volume data yang realistis.
| Parameter | Nilai |
|---|---|
| Jumlah baris dalam dataset | 2 miliar |
| Rentang kueri | 10 juta baris |
| Kolom per baris | 20 |
| Ukuran kolom | 20 byte |
| Utas | 200 |
| Pemanasan | 20 menit |
| Pengujian resmi | 20 menit |
Profil YCSB:
recordcount=10000000
operationcount=2000000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=20
fieldlength=20
readproportion=1.0
updateproportion=0.0
scanproportion=0
insertproportion=0
requestdistribution=uniformPerintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200Pemindaian rentang
Menyimulasikan workload pemindaian batch. Membaca 50 baris berurutan per pemindaian dari rentang kueri 10 juta baris.
| Parameter | Nilai |
|---|---|
| Jumlah baris dalam dataset | 2 miliar |
| Rentang kueri | 10 juta baris |
| Kolom per baris | 20 |
| Ukuran kolom | 20 byte |
| Baris per pemindaian | 50 |
| Threads | 100 |
| Pemanasan | 20 menit |
| Pengujian resmi | 20 menit |
Profil YCSB:
recordcount=10000000
operationcount=2000000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=20
fieldlength=20
readproportion=0.0
updateproportion=0.0
scanproportion=1.0
insertproportion=0
requestdistribution=uniform
maxscanlength=50
Lindorm.usepagefilter=falsePerintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200Penyisipan baris tunggal
Menyimulasikan workload tulis baris tunggal dengan frekuensi tinggi. Menyisipkan satu kolom (20 byte) per operasi.
| Parameter | Nilai |
|---|---|
| Kolom per penyisipan | 1 |
| Ukuran kolom | 20 byte |
| Threads | 200 |
| Durasi pengujian | 20 menit |
Profil YCSB:
recordcount=2000000000
operationcount=100000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=1
fieldlength=20
readproportion=0.0
updateproportion=0.0
scanproportion=0
insertproportion=1.0
requestdistribution=uniformPerintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200Penyisipan batch
Menyimulasikan workload tulis massal. Menyisipkan satu kolom (20 byte) per operasi dalam batch berisi 100 baris.
| Parameter | Nilai |
|---|---|
| Kolom per penyisipan | 1 |
| Ukuran kolom | 20 byte |
| Ukuran batch | 100 baris |
| Threads | 100 |
| Durasi pengujian | 20 menit |
Profil YCSB:
recordcount=2000000000
operationcount=10000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
fieldcount=1
fieldlength=20
cyclickey=true
readallfields=false
readproportion=0
updateproportion=0
scanproportion=0
insertproportion=0.0
batchproportion=1.0
batchsize=100
requestdistribution=uniformPerintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200Pengujian latensi respons
Pengujian latensi respons menggunakan konfigurasi workload yang sama seperti pengujian throughput, tetapi menambahkan flag -p target=<N> untuk membatasi OPS pada nilai tetap. Hal ini menjaga beban identik di kedua kluster, sehingga perbedaan latensi mencerminkan kinerja kluster, bukan variasi beban.
Baca baris tunggal
| Parameter | Nilai |
|---|---|
| Rentang kueri | 10 juta baris |
| Kolom per baris | 20 |
| Ukuran kolom | 20 byte |
| Threads | 200 |
| OPS maksimum | 5.000 |
| Pemanasan | 20 menit |
| Pengujian resmi | 20 menit |
Profil YCSB: sama seperti pengujian throughput baca baris tunggal.
Perintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200 -p target=5000Pemindaian rentang
| Parameter | Nilai |
|---|---|
| Rentang kueri | 10 juta baris |
| Baris per pemindaian | 50 |
| Thread | 100 |
| OPS maksimum | 5.000 |
| Pemanasan | 20 menit |
| Pengujian resmi | 20 menit |
Profil YCSB: sama seperti pengujian throughput pemindaian rentang.
Perintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200 -p target=5000Penyisipan baris tunggal
| Parameter | Nilai |
|---|---|
| Kolom per penyisipan | 1 |
| Ukuran kolom | 20 byte |
| Threads | 200 |
| OPS maksimum | 50.000 |
| Durasi pengujian | 20 menit |
Profil YCSB: sama seperti pengujian throughput penyisipan baris tunggal.
Perintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=testwrite -threads 200 -p columnfamily=f -p maxexecutiontime=1200 -p target=50000Penyisipan batch
| Parameter | Nilai |
|---|---|
| Kolom per penyisipan | 1 |
| Ukuran kolom | 20 byte |
| Ukuran batch | 100 baris |
| Threads | 100 |
| OPS maksimum | 2.000 |
| Durasi pengujian | 20 menit |
Profil YCSB: sama seperti pengujian throughput penyisipan batch.
Perintah pengujian beban:
bin/ycsb run hbase10 -P <workload> -p table=testwrite -threads 100 -p columnfamily=f -p maxexecutiontime=1200 -p target=2000Pengujian rasio kompresi
Setiap pengujian rasio kompresi memuat 5 juta baris ke kedua kluster, lalu memicu flush dan kompaksi mayor. Setelah kompaksi selesai, bandingkan ukuran tabel di disk antara kedua kluster.
Jalankan prosedur ini untuk setiap konfigurasi kolom berikut:
| Kolom per baris | Ukuran kolom (byte) |
|---|---|
| 1 | 10 |
| 20 | 10 |
| 20 | 20 |
| 100 | 10 |
Profil YCSB (ganti <fieldcount> dan <fieldlength> dengan nilai dari tabel di atas):
recordcount=5000000
operationcount=150000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=<fieldcount>
fieldlength=<fieldlength>
readproportion=1.0
requestdistribution=uniformPerintah muat data:
bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -sSetelah pemuatan selesai, picu flush dan kompaksi mayor secara manual, lalu periksa ukuran tabel di kedua kluster.