Ces tests comparatifs évaluent le débit, la latence des réponses et le taux de compression d’un cluster Apache HBase et d’un cluster Lindorm à l’aide de Yahoo Cloud Serving Benchmark (YCSB).
Déroulement du test :
Créez des tables dans les deux clusters en utilisant le même schéma.
Chargez 2 milliards de lignes de données avec YCSB.
Exécutez des tests de débit pour quatre scénarios avec le même nombre de threads.
Exécutez des tests de latence des réponses pour les mêmes quatre scénarios avec une cible OPS fixe.
Exécutez des tests de taux de compression pour quatre combinaisons de colonnes et de tailles.
Créer des tables
Les deux clusters utilisent le même schéma de table avec 200 partitions pré-découpées basées sur les données YCSB.
Pour savoir comment utiliser Lindorm Shell afin de créer des tables, consultez Utiliser Lindorm Shell pour se connecter à LindormTable.
Cluster Lindorm : utilise l’encodage INDEX (un algorithme exclusif à Lindorm activé en définissant DATA_BLOCK_ENCODING sur DIFF) et la compression 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")}"} }
Cluster Apache HBase : utilise l’encodage DIFF et la compression SNAPPY, comme recommandé par 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")}"} }
Charger les données
Chaque table contient 2 milliards de lignes, avec 20 colonnes par ligne et 20 octets par colonne.
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=uniform
Exécutez la commande suivante pour charger les données :
bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -s
Test de débit
Le test de débit exécute chaque scénario avec le même nombre de threads sur les deux clusters. Les quatre scénarios sont indépendants.
Tous les scénarios utilisent maxexecutiontime=1200 (exécution de 20 minutes). Pour les scénarios de lecture, effectuez une mise en chauffe de 20 minutes avant le test proprement dit. Déclenchez une compactation majeure et attendez sa fin avant de commencer.
Lecture d’une seule ligne
Simule une recherche ponctuelle à haute concurrence. Lit une ligne à la fois dans une plage de requête de 10 millions de lignes au sein de l’ensemble de données de 2 milliards de lignes. La plage de requête (recordcount=10000000) est inférieure au volume total de données afin de simuler un modèle de lecture de points chauds sur un volume de données réaliste.
| Paramètre | Valeur |
|---|---|
| Lignes dans l’ensemble de données | 2 milliards |
| Plage de requête | 10 millions de lignes |
| Colonnes par ligne | 20 |
| Taille de la colonne | 20 octets |
| Threads | 200 |
| Mise en chauffe | 20 minutes |
| Test proprement dit | 20 minutes |
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=uniform
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200
Analyse de plage
Simule des charges de travail d’analyse par lots. Lit 50 lignes consécutives par analyse dans une plage de requête de 10 millions de lignes.
| Paramètre | Valeur |
|---|---|
| Lignes dans l’ensemble de données | 2 milliards |
| Plage de requête | 10 millions de lignes |
| Colonnes par ligne | 20 |
| Taille de la colonne | 20 octets |
| Lignes par analyse | 50 |
| Threads | 100 |
| Mise en chauffe | 20 minutes |
| Test proprement dit | 20 minutes |
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=false
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200
Insertion d’une seule ligne
Simule des charges de travail d’écriture de lignes uniques à haute fréquence. Insère une colonne (20 octets) par opération.
| Paramètre | Valeur |
|---|---|
| Colonnes par insertion | 1 |
| Taille de la colonne | 20 octets |
| Threads | 200 |
| Durée du test | 20 minutes |
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=uniform
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200
Insertion par lots
Simule des charges de travail d’écriture en masse. Insère une colonne (20 octets) par opération, par lots de 100 lignes.
| Paramètre | Valeur |
|---|---|
| Colonnes par insertion | 1 |
| Taille de la colonne | 20 octets |
| Taille du lot | 100 lignes |
| Threads | 100 |
| Durée du test | 20 minutes |
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=uniform
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200
Test de latence des réponses
Le test de latence des réponses utilise les mêmes configurations de charge de travail que le test de débit, mais ajoute un indicateur -p target=<N> pour limiter les OPS à une valeur fixe. Cela maintient une charge identique sur les deux clusters, de sorte que les différences de latence reflètent les performances du cluster plutôt que les variations de charge.
Lecture d’une seule ligne
| Paramètre | Valeur |
|---|---|
| Plage de requête | 10 millions de lignes |
| Colonnes par ligne | 20 |
| Taille de la colonne | 20 octets |
| Threads | 200 |
| OPS max | 5 000 |
| Mise en chauffe | 20 minutes |
| Test proprement dit | 20 minutes |
Profil YCSB : identique au test de débit de lecture d’une seule ligne.
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200 -p target=5000
Analyse de plage
| Paramètre | Valeur |
|---|---|
| Plage de requête | 10 millions de lignes |
| Lignes par analyse | 50 |
| Threads | 100 |
| OPS max | 5 000 |
| Mise en chauffe | 20 minutes |
| Test proprement dit | 20 minutes |
Profil YCSB : identique au test de débit d’analyse de plage.
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200 -p target=5000
Insertion d’une seule ligne
| Paramètre | Valeur |
|---|---|
| Colonnes par insertion | 1 |
| Taille de la colonne | 20 octets |
| Threads | 200 |
| OPS max | 50 000 |
| Durée du test | 20 minutes |
Profil YCSB : identique au test de débit d’insertion d’une seule ligne.
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=testwrite -threads 200 -p columnfamily=f -p maxexecutiontime=1200 -p target=50000
Insertion par lots
| Paramètre | Valeur |
|---|---|
| Colonnes par insertion | 1 |
| Taille de la colonne | 20 octets |
| Taille du lot | 100 lignes |
| Threads | 100 |
| OPS max | 2 000 |
| Durée du test | 20 minutes |
Profil YCSB : identique au test de débit d’insertion par lots.
Commande de test de charge :
bin/ycsb run hbase10 -P <workload> -p table=testwrite -threads 100 -p columnfamily=f -p maxexecutiontime=1200 -p target=2000
Test de taux de compression
Chaque test de taux de compression charge 5 millions de lignes dans les deux clusters, puis déclenche un vidage et une compactation majeure. Une fois la compactation terminée, comparez la taille de la table sur le disque entre les deux clusters.
Exécutez cette procédure pour chacune des configurations de colonnes suivantes :
| Colonnes par ligne | Taille de la colonne (octets) |
|---|---|
| 1 | 10 |
| 20 | 10 |
| 20 | 20 |
| 100 | 10 |
Profil YCSB (remplacez <fieldcount> et <fieldlength> par les valeurs du tableau ci-dessus) :
recordcount=5000000
operationcount=150000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=<fieldcount>
fieldlength=<fieldlength>
readproportion=1.0
requestdistribution=uniform
Commande de chargement des données :
bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -s
Après le chargement, déclenchez manuellement un vidage et une compactation majeure, puis vérifiez la taille de la table dans les deux clusters.