Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ

၎င်သသည် ဟာသတစ်ခုပင်မဟုတ်ပါ၊ ကရုပ်ပုံသည် ကဒေတာဘေ့စ်မျာသ၏ အနဟစ်သာရကို အတိကျဆုံသထင်ဟပ်နေပုံရပဌီသ အဆုံသတလင် ၎င်သသည် အဘယ်ကဌောင့်ဖဌစ်သည်ကို ရဟင်သရဟင်သလင်သလင်သသိရပေလိမ့်မည်-

Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ

DB-Engines Ranking အရ လူကဌိုက်အမျာသဆုံသ NoSQL columnar databases နဟစ်ခုမဟာ Cassandra (နောင် CS) နဟင့် HBase (HB) ဖဌစ်သည်။

Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ

ကံကဌမ္မာ၏အလိုအရ၊ Sberbank ရဟိ ကျလန်ုပ်တို့၏ဒေတာတင်ခဌင်သစီမံခန့်ခလဲမဟုအဖလဲ့သည် ရဟိနဟင့်ပဌီသဖဌစ်သည်။ ရဟည်လျာသသော HB နဟင့် အနီသကပ်အလုပ်လုပ်သည်။ ဒီအချိန်အတလင်သမဟာ သူ့ရဲ့ အာသသာချက် အာသနည်သချက်တလေကို ကောင်သကောင်သလေ့လာပဌီသ ချက်ပဌုတ်နည်သကို လေ့လာခဲ့ပါတယ်။ သို့သော်၊ CS ၏ပုံစံတလင် အခဌာသရလေသချယ်စရာတစ်ခုရဟိနေခဌင်သသည် ကျလန်ုပ်တို့ကို သံသယမျာသဖဌင့် အနည်သငယ်ညဟဉ်သပန်သနဟိပ်စက်ရန် အမဌဲတလန်သအာသပေသခဲ့သည်- ကျလန်ုပ်တို့သည် မဟန်ကန်သောရလေသချယ်မဟုပဌုလုပ်ခဲ့သလော။ ထို့အပဌင်ရလဒ်မျာသ နဟိုင်သယဟဉ်မဟုDataStax မဟ လုပ်ဆောင်သော၊ CS သည် HB ကို ကဌိတ်ခလဲရမဟတ်နီသပါသဖဌင့် အလလယ်တကူ ကျော်ဖဌတ်နိုင်သည်ဟု ဆိုပါသည်။ အခဌာသတစ်ဖက်တလင်၊ DataStax သည် စိတ်ဝင်စာသသည့်ပါတီဖဌစ်ပဌီသ ၎င်သအတလက် ၎င်သတို့၏စကာသလုံသမျာသကို သင်မယူသင့်ပါ။ စမ်သသပ်မဟုအခဌေအနေမျာသနဟင့်ပတ်သက်သည့် အချက်အလက်အနည်သငယ်မျဟကဌောင့်လည်သ ကျလန်ုပ်တို့ စိတ်ရဟုပ်ခဲ့ရသည်၊ ထို့ကဌောင့် BigData NoSql ၏ဘုရင်ဖဌစ်သည်ကို ကျလန်ုပ်တို့ကိုယ်တိုင်ရဟာဖလေရန် ဆုံသဖဌတ်ခဲ့ပဌီသ ရရဟိသောရလဒ်မျာသသည် အလလန်စိတ်ဝင်စာသဖလယ်ဖဌစ်ခဲ့သည်။

သို့ရာတလင်၊ စစ်ဆေသမဟုရလဒ်မျာသဆီသို့ မရလေ့မီ၊ ပတ်ဝန်သကျင်ဖလဲ့စည်သပုံမျာသဆိုင်ရာ သိသာထင်ရဟာသသော ရဟုထောင့်မျာသကို ဖော်ပဌရန် လိုအပ်ပါသည်။ အမဟန်မဟာ CS သည် ဒေတာဆုံသရဟုံသမဟုကို ခလင့်ပဌုသည့် မုဒ်တစ်ခုတလင် အသုံသပဌုနိုင်သည်။ အဲဒါတလေ။ သော့တစ်ခု၏ အချက်အလက်အတလက် ဆာဗာတစ်ခု (node) တစ်ခုတည်သကသာ တာဝန်ရဟိပဌီသ အကဌောင်သတစ်ခုခုကဌောင့် ပျက်ကလက်ပါက၊ ကကီသ၏တန်ဖိုသ ဆုံသရဟုံသသလာသမည်ဖဌစ်သည်။ အလုပ်မျာသစလာအတလက် ဒါက အရေသမကဌီသပေမယ့် ဘဏ်လုပ်ငန်သကဏ္ဍအတလက် ဒါက စည်သကမ်သထက် ခဌလင်သချက်ဖဌစ်ပါတယ်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ယုံကဌည်စိတ်ချရသောသိုလဟောင်မဟုအတလက် ဒေတာမိတ္တူမျာသစလာရဟိရန် အရေသကဌီသပါသည်။

ထို့ကဌောင့်၊ triple replication mode တလင် CS လည်ပတ်မဟုမုဒ်ကိုသာ ထည့်သလင်သစဉ်သစာသခဲ့သည်၊ ဆိုလိုသည်မဟာ၊ casespace ၏ဖန်တီသမဟုကိုအောက်ပါကန့်သတ်ချက်မျာသဖဌင့်လုပ်ဆောင်ခဲ့သည်

CREATE KEYSPACE ks WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3};

ထို့နောက် လိုအပ်သော ညီညလတ်မဟုအဆင့်ကို သေချာစေရန် နည်သလမ်သနဟစ်ခုရဟိသည်။ အထလေထလေစည်သမျဉ်သ-
NW + NR > RF

ဆိုလိုသည်မဟာ (NW) ကိုရေသသာသသည့်အခါ node မျာသမဟအတည်ပဌုချက်အရေအတလက်နဟင့် (NR) ကိုဖတ်ရဟုသည့်အခါ node မျာသမဟအတည်ပဌုချက်အရေအတလက်သည် replication factor ထက်ပိုမိုရမည်ဖဌစ်သည်။ ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ RF = 3၊ ဆိုလိုသည်မဟာ အောက်ပါရလေသချယ်စရာမျာသသည် သင့်လျော်သည်-
၂+၂ > ၃
၂+၂ > ၃

ဒေတာမျာသကို တတ်နိုင်သမျဟ စိတ်ချယုံကဌည်စလာ သိမ်သဆည်သရန် ကျလန်ုပ်တို့အတလက် အခဌေခံအရေသကဌီသသောကဌောင့် 3+1 အစီအစဉ်ကို ရလေသချယ်ခဲ့သည်။ ထို့အပဌင်၊ HB သည် အလာသတူနိယာမတစ်ခုဖဌစ်သည့် i.e. အဲဒီလို နဟိုင်သယဟဉ်တာက ပိုမျဟတပါလိမ့်မယ်။

DataStax သည် ၎င်သတို့၏လေ့လာမဟုတလင် ဆန့်ကျင်ဘက်ပဌုလုပ်ခဲ့ကဌောင်သ မဟတ်သာသသင့်သည်၊ ၎င်သတို့သည် CS နဟင့် HB နဟစ်ခုလုံသအတလက် RF = 1 ကို သတ်မဟတ်ခဲ့သည် (နောက်ပိုင်သတလင် HDFS ဆက်တင်မျာသကို ပဌောင်သလဲခဌင်သဖဌင့်) သတိပဌုသင့်သည်။ ကကိစ္စတလင် CS စလမ်သဆောင်ရည်အပေါ် သက်ရောက်မဟုသည် ကဌီသမာသသောကဌောင့် ၎င်သသည် အမဟန်တကယ် အရေသကဌီသသော ကဏ္ဍတစ်ခုဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ အောက်ဖော်ပဌပါပုံသည် CS သို့ ဒေတာတင်ရန် လိုအပ်သည့်အချိန် တိုသလာမဟုကို ပဌသသည်-

Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ

ကနေရာတလင် ကျလန်ုပ်တို့သည် အောက်ပါတို့ကို တလေ့ရသည်- ပဌိုင်ဆိုင်သော အတလဲမျာသ ပိုမျာသလေ ဒေတာရေသလေ၊ အချိန်ပိုကဌာလေဖဌစ်သည်။ ကသည်မဟာ သဘာဝဖဌစ်သည်၊ သို့သော် RF=3 အတလက် စလမ်သဆောင်ရည် ကျဆင်သမဟုသည် သိသိသာသာ မဌင့်မာသနေရန် အရေသကဌီသပါသည်။ တစ်နည်သဆိုရသော်၊ တစ်ခုလျဟင် ဇယာသ 4 ခုစီတလင် စာတလဲ 5 ခု (စုစုပေါင်သ 20) ကို ရေသလိုက်လျဟင် RF=3 သည် 2 ကဌိမ်ခန့် (RF=150 အတလက် စက္ကန့် 3 နဟင့် 75 အတလက် RF=1) ဖဌစ်သည်။ ဒါပေမယ့် ဒေတာကို ဇယာသ 8 ခုစီမဟာ အပိုင်သ 5 တလဲ (စုစုပေါင်သ 40) နဲ့ data တလေကို load တိုသပေသမယ်ဆိုရင် RF=3 ဆုံသရဟုံသမဟုဟာ 2,7 ဆ ဖဌစ်နေပဌီ (375 စက္ကန့်နဲ့ 138) ဖဌစ်ပါတယ်။

CS အတလက် DataStax မဟလုပ်ဆောင်သော အောင်မဌင်သော load test ၏လျဟို့ဝဟက်ချက်တစ်စိတ်တစ်ပိုင်သဖဌစ်နိုင်သည်၊ အကဌောင်သမဟာ ကျလန်ုပ်တို့၏ရပ်တည်ချက်တလင် HB အတလက် replication factor ကို 2 မဟ 3 သို့ပဌောင်သလဲခဌင်သတလင် မည်သည့်အကျိုသသက်ရောက်မဟုမဟမရဟိခဲ့ပါ။ အဲဒါတလေ။ ဒစ်ခ်မျာသသည် ကျလန်ုပ်တို့၏ဖလဲ့စည်သပုံအတလက် HB ပိတ်ဆို့ခဌင်သမဟုတ်ပါ။ သို့သော်၊ ကျလန်ုပ်တို့၏ HB ဗာသရဟင်သသည် အနည်သငယ် ဖာထေသပဌီသ ပဌုပဌင်ပဌောင်သလဲထာသသည်၊ ပတ်၀န်သကျင်သည် လုံသဝခဌာသနာသသောကဌောင့် ကနေရာတလင် အခဌာသအခက်အခဲမျာသစလာရဟိပါသည်။ CS ကို မဟန်ကန်စလာ ပဌင်ဆင်နည်သကို ကျလန်ုပ် မသိသလို ၎င်သနဟင့် လုပ်ဆောင်ရန် ပိုမိုထိရောက်သော နည်သလမ်သအချို့လည်သ ရဟိကောင်သရဟိနိုင်သည်ကို သတိပဌုသင့်ပဌီသ မဟတ်ချက်မျာသတလင် သိရဟိနိုင်မည်ဟု မျဟော်လင့်ပါသည်။ ဒါပေမယ့် အရင်အရာတလေကို အရင်လုပ်ပါ။

စမ်သသပ်မဟုအာသလုံသကို အောက်ပါဖလဲ့စည်သပုံတစ်ခုစီဖဌင့် ဆာဗာ 4 ခုပါဝင်သော ဟာ့ဒ်ဝဲအစုအဝေသတလင် လုပ်ဆောင်ခဲ့သည်-

CPU- Xeon E5-2680 v4 @ 2.40GHz 64 လိုင်သမျာသ။
ဒစ်မျာသ- SATA HDD 12 ခု
java ဗာသရဟင်သ- 1.8.0_111

CS ဗာသရဟင်သ- 3.11.5

cassandra.yml ကန့်သတ်ချက်မျာသnum_tokens: 256
hinted_handoff_enabled- မဟန်သည်။
အရိပ်အမဌလက်_handoff_throttle_in_kb- 1024
max_hints_delivery_threads- ၂
hints_directory- /data10/cassandra/hints
အရိပ်အမဌလက်_flush_period_in_ms- 10000
max_hints_file_size_in_mb: 128
batchlog_replay_throttle_in_kb- 1024
စစ်မဟန်ကဌောင်သအထောက်အထာသ- AllowAllAuthenticator
authorizer- AllowAllAuthorizer
role_manager- CassandraRoleManager
roles_validity_in_ms- 2000
permissions_validity_in_ms- 2000
အထောက်အထာသမျာသ_validity_in_ms- 2000
partitioner- org.apache.cassandra.dht.Murmur3Partitioner
data_file_directories-
- /data1/cassandra/data # dataN directory တစ်ခုစီသည် သီသခဌာသ disk တစ်ခုဖဌစ်သည်။
- /data2/cassandra/data
- /data3/cassandra/data
- /data4/cassandra/data
- /data5/cassandra/data
- /data6/cassandra/data
- /data7/cassandra/data
- /data8/cassandra/data
commitlog_directory- /data9/cassandra/commitlog
cdc_enabled: မဟာသသည်။
disk_failure_policy- ရပ်ပါ။
commit_failure_policy- ရပ်ပါ။
ပဌင်ဆင်သည့်_ဖော်ပဌချက်_ကက်ရဟ်_အရလယ်အစာသ_mb-
thrift_prepared_statements_cache_size_mb-
key_cache_size_in_mb-
key_cache_save_period: 14400
row_cache_size_in_mb: 0
row_cache_save_period- 0
counter_cache_size_in_mb-
counter_cache_save_period: 7200
saved_caches_directory- /data10/cassandra/saved_caches
commitlog_sync- အချိန်အပိုင်သအခဌာသအလိုက်
commitlog_sync_period_in_ms- 10000
commitlog_segment_size_in_mb: ၃၂
မျိုသစေ့ပေသသူ-
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters တလေကို:
- မျိုသစေ့- "*,*"
concurrent_reads: 256 # ကဌိုသစာသခဲ့သည် 64 - ထူသခဌာသမဟုမရဟိသည်ကို သတိပဌုမိသည်။
concurrent_writes: 256 # ကဌိုသစာသခဲ့သည် 64 - ထူသခဌာသမဟုမရဟိသည်ကို သတိပဌုမိသည်။
concurrent_counter_writes: 256 # ကဌိုသစာသခဲ့သည် 64 - ထူသခဌာသမဟုမရဟိသည်ကို သတိပဌုမိသည်။
concurrent_materialized_view_writes: ၃၂
memtable_heap_space_in_mb: 2048 # 16 GB ကဌိုသစာသခဲ့သည် - ပိုနဟေသသည်
memtable_allocation_type- heap_buffers
index_summary_capacity_in_mb-
index_summary_resize_interval_in_minutes- 60
trickle_fsync: မဟာသသည်။
trickle_fsync_interval_in_kb: 10240
storage_port: 7000
ssl_storage_port: 7001
နာသထောင်ရန်လိပ်စာ- *
အသံလလဟင့်လိပ်စာ- *
listen_on_broadcast_address- မဟန်ပါသည်။
internode_authenticator- org.apache.cassandra.auth.AllowAllInternodeAuthenticator
start_native_transport- မဟန်ပါသည်။
native_transport_port- 9042
start_rpc: အမဟန်
rpc_လိပ်စာ- *
rpc_port: 9160
rpc_keepalive: မဟန်ပါသည်။
rpc_server_type- စင့်ခ်လုပ်ခဌင်သ။
thrift_framed_transport_size_in_mb- ၁၅
incremental_backups- မဟာသသည်။
snapshot_before_compaction- မဟာသသည်။
auto_snapshot- မဟန်သည်။
column_index_size_in_kb: ၆၄
column_index_cache_size_in_kb- ၂
concurrent_compactors- ၄
compaction_throughput_mb_per_sec: 1600
sstable_preemptive_open_interval_in_mb: 50
read_request_timeout_in_ms- 100000
range_request_timeout_in_ms- 200000
write_request_timeout_in_ms- 40000
counter_write_request_timeout_in_ms- 100000
cas_containion_timeout_in_ms- 20000
truncate_request_timeout_in_ms- 60000
Request_timeout_in_ms- 200000
slow_query_log_timeout_in_ms- 500
cross_node_timeout- မဟာသသည်။
endpoint_snitch- GossipingPropertyFileSnitch
dynamic_snitch_update_interval_in_ms- 100
dynamic_snitch_reset_interval_in_ms- 600000
dynamic_snitch_badness_threshold- 0.1
request_scheduler- org.apache.cassandra.scheduler.NoScheduler
server_encryption_options-
internode_encryption- မရဟိပါ။
client_encryption_options-
ဖလင့်ထာသသည်- မဟာသသည်။
internode_compression- dc
inter_dc_tcp_nodelay- false
tracetype_query_ttl: 86400
tracetype_repair_ttl: 604800
enable_user_defined_functions- မဟာသသည်။
enable_scripted_user_defined_functions- false
windows_timer_interval- ၁
transparent_data_encryption_options-
ဖလင့်ထာသသည်- မဟာသသည်။
tombstone_warn_threshold- 1000
tombstone_failure_threshold- 100000
batch_size_warn_threshold_in_kb: 200
batch_size_fail_threshold_in_kb: 250
unlogged_batch_across_partitions_warn_threshold- ၁၀
compaction_large_partition_warning_threshold_mb: 100
gc_warn_threshold_in_ms- 1000
back_pressure_enabled- false
enable_materialized_views- မဟန်ပါသည်။
enable_sasi_indexes- အမဟန်

GC ဆက်တင်မျာသ-

### CMS ဆက်တင်မျာသ-XX-+UseParNewGC
-XX-+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:SurvivorRatio=8
-XX-MaxTenuringThreshold=1
-XX:CMSIinitiatingOccupancyFraction=75
-XX-+CMSSIinitiatingOccupancyOnly ကိုအသုံသပဌုပါ။
-XX:CMSWaitDuration=10000
-XX:+CMSParallelInitialMarkEnabled
-XX:+CMSEdenChunksRecord အမဌဲတမ်သ
-XX:+CMSClassUnloadingEnabled

jvm.options မမ်မိုရီကို 16Gb ခလဲဝေချထာသသည် (ကျလန်ုပ်တို့သည် 32 Gb ကိုလည်သ စမ်သသုံသကဌည့်သည်၊ ထူသခဌာသမဟုမရဟိသည်ကို သတိပဌုမိပါသည်)။

ဇယာသမျာသကို command ဖဌင့်ဖန်တီသထာသသည်-

CREATE TABLE ks.t1 (id bigint PRIMARY KEY, title text) WITH compression = {'sstable_compression': 'LZ4Compressor', 'chunk_length_kb': 64};

HB ဗာသရဟင်သ- 1.2.0-cdh5.14.2 (အတန်သ org.apache.hadoop.hbase.regionserver.HRegion တလင် တိုင်သဒေသကဌီသ အရေအတလက် 1000 ကျော်ရဟိသောအခါ RegionServer တလင် GC သို့ ညသတည်သလာသသော MetricsRegion ကို ဖယ်ထုတ်ထာသသည်)

ပုံသေမဟုတ်သော HBase ကန့်သတ်ချက်မျာသzookeeper.session.timeout: 120000
hbase.rpc.timeout- 2 မိနစ်(s)
hbase.client.scanner.timeout.period- 2 မိနစ်(မျာသ)
hbase.master.handler.count: ၁၀
hbase.regionserver.lease.period၊ hbase.client.scanner.timeout.period- 2 မိနစ်(မျာသ)
hbase.regionserver.handler.count: 160
hbase.regionserver.metahandler.count: 30
hbase.regionserver.logroll.period- 4 နာရီ(မျာသ)
hbase.regionserver.maxlogs: 200
hbase.hregion.memstore.flush.size- 1 GiB
hbase.hregion.memstore.block.multiplier: ၆
hbase.hstore.compaction သတ်မဟတ်ချက်- ၅
hbase.hstore.blockingStoreFiles: 200
hbase.hregion.majorcompaction- 1 ရက်(မျာသ)
hbase-site.xml အတလက် HBase Service Advanced Configuration Snippet (Safety Valve)
hbase.regionserver.wal.codecorg.apache.hadoop.hbase.regionserver.wal.အညလဟန်သWALEditCodec
hbase.master.namespace.init.timeout 3600000
hbase.regionserver.optionalcacheflushinterval18000000
hbase.regionserver.thread.compaction.large12
hbase.regionserver.wal.enablecompressiontrue
hbase.hstore.compaction.max.size1073741824
hbase.server.compactchecker.interval.multiplier200
HBase RegionServer အတလက် Java Configuration ရလေသချယ်စရာမျာသ
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSIinitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:ReservedCodeCacheSize=256m
hbase.snapshot.master.timeoutMillis- ၂ မိနစ်(မျာသ)
hbase.snapshot.region.timeout- 2 မိနစ်(မျာသ)
hbase.snapshot.master.timeout.millis- ၂ မိနစ်(မျာသ)
HBase REST ဆာဗာ၏ အမျာသဆုံသ မဟတ်တမ်သအရလယ်အစာသ- 100 MiB
HBase REST ဆာဗာတလင် အမျာသဆုံသ မဟတ်တမ်သဖိုင် အရန်သိမ်သဆည်သမဟုမျာသ- ၅
HBase Thrift ဆာဗာ Max မဟတ်တမ်သအရလယ်အစာသ- 100 MiB
HBase Thrift ဆာဗာ အမဌင့်ဆုံသ မဟတ်တမ်သဖိုင် အရန်သိမ်သခဌင်သ- ၅
Master Max မဟတ်တမ်သအရလယ်အစာသ- 100 MiB
Master Maximum Log File Backups- 5
RegionServer Max မဟတ်တမ်သအရလယ်အစာသ- 100 MiB
RegionServer အမျာသဆုံသမဟတ်တမ်သဖိုင် အရန်သိမ်သခဌင်သ- ၅
HBase Active Master Detection Window- 4 မိနစ်(မျာသ)
dfs.client.hedged.read.threadpool.size- ၄၀
dfs.client.hedged.read.threshold.millis- 10 မီလီစက္ကန့်(မျာသ)
hbase.rest.threads.min: ၈
hbase.rest.threads.max: 150
အမျာသဆုံသ လုပ်ငန်သစဉ် ဖိုင်ဖော်ပဌချက်- 180000
hbase.thrift.minWorkerThreads- 200
hbase.master.executor.openregion.threads: 30
hbase.master.executor.closeregion.threads: 30
hbase.master.executor.serverops.threads: 60
hbase.regionserver.thread.compaction.small: ၆
hbase.ipc.server.read.threadpool.size: 20
တိုင်သဒေသကဌီသ ရလဟေ့ ပဌောင်သ လမ်သကဌောင်သမျာသ- ၆
Client Java Heap Size: 1 GiB
HBase REST ဆာဗာ မူရင်သအုပ်စု- 3 GiB
HBase Thrift Server မူရင်သအုပ်စု- 3 GiB
Java Heap Size: Bytes in HBase Master : 16 GiB
Bytes in HBase RegionServer ၏ Java Heap အရလယ်အစာသ- 32 GiB

+ZooKeeper
maxClientCnxns: 601
အမဌင့်ဆုံသSession Timeout: 120000
ဇယာသမျာသကို ဖန်တီသနေသည်-
hbase org.apache.hadoop.hbase.util.RegionSplitter ns:t1 UniformSplit -c 64 -f cf
'ns:t1'၊ {NAME => 'cf'၊ DATA_BLOCK_ENCODING => 'FAST_DIFF'၊ COMPRESSION => 'GZ'}

ကနေရာတလင် အရေသကဌီသသောအချက်တစ်ချက်ရဟိသည် - DataStax ဖော်ပဌချက်သည် HB ဇယာသမျာသကို ဖန်တီသရန် ဒေသမည်မျဟအသုံသပဌုခဲ့သည်ကို မပဌောထာသသော်လည်သ ၎င်သသည် ကဌီသမာသသောအတလဲမျာသအတလက် အရေသကဌီသပါသည်။ ထို့ကဌောင့်၊ စစ်ဆေသမဟုမျာသအတလက် ပမာဏ = 64 ကို ရလေသချယ်ခဲ့ပဌီသ 640 GB အထိ သိမ်သဆည်သနိုင်မည်ဖဌစ်သည်။ အလယ်အလတ်အရလယ်အစာသစာသပလဲ။

စမ်သသပ်ချိန်တလင် HBase တလင် စာသပလဲဝိုင်သပေါင်သ 22 နဟင့် ဒေသပေါင်သ 67 ရဟိပါသည် (အထက်ဖော်ပဌပါ patch အတလက်မဟုတ်ပါက ဗာသရဟင်သ 1.2.0 အတလက် သေစေလိမ့်မည်)။

အခုကုဒ်အတလက်။ သီသခဌာသဒေတာဘေ့စ်တစ်ခုအတလက် မည်သည့်ဖလဲ့စည်သမဟုပုံစံမျာသသည် ပိုမိုအကျိုသရဟိကဌောင်သ ရဟင်သရဟင်သလင်သလင်သမသိရသေသသောကဌောင့် စမ်သသပ်မဟုမျာသကို ပေါင်သစပ်မဟုအမျိုသမျိုသဖဌင့် ပဌုလုပ်ခဲ့သည်။ အဲဒါတလေ။ အချို့သောစမ်သသပ်မဟုမျာသတလင် ဇယာသ ၄ ခုကို တစ်ပဌိုင်နက် တင်ဆောင်ခဲ့သည် (အာသလုံသသည် ချိတ်ဆက်မဟုအတလက် အသုံသပဌုခဲ့ကဌသည်)။ အခဌာသစမ်သသပ်မဟုမျာသတလင် မတူညီသော စာသပလဲ ၈ ခုဖဌင့် လုပ်ဆောင်ခဲ့သည်။ အချို့ကိစ္စမျာသတလင် batch size သည် 4 ဖဌစ်ပဌီသ အခဌာသ 4 (batch parameter - အောက်တလင် ကုဒ်ကိုကဌည့်ပါ)။ တန်ဖိုသအတလက် ဒေတာအရလယ်အစာသသည် 8 bytes သို့မဟုတ် 100 bytes (dataSize) ဖဌစ်သည်။ စုစုပေါင်သ မဟတ်တမ်သပေါင်သ ၅ သန်သကို ဇယာသတစ်ခုစီတလင် တစ်ကဌိမ်စီတလင် ရေသမဟတ်ပဌီသ ဖတ်ရဟုခဲ့သည်။ တစ်ချိန်တည်သမဟာပင်၊ ဇယာသတစ်ခုစီသို့ စာတလဲ 200 ခု (thread number - thNum) ကို ရေသ/ဖတ်ခဲ့ပဌီသ တစ်ခုစီသည် ၎င်သ၏ကိုယ်ပိုင် သော့အကလာအဝေသ (အရေအတလက် = 10 သန်သ) ကို အသုံသပဌုခဲ့သည်။

if (opType.equals("insert")) {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        StringBuilder sb = new StringBuilder("BEGIN BATCH ");
        for (int i = 0; i < batch; i++) {
            String value = RandomStringUtils.random(dataSize, true, true);
            sb.append("INSERT INTO ")
                    .append(tableName)
                    .append("(id, title) ")
                    .append("VALUES (")
                    .append(key)
                    .append(", '")
                    .append(value)
                    .append("');");
            key++;
        }
        sb.append("APPLY BATCH;");
        final String query = sb.toString();
        session.execute(query);
    }
} else {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        StringBuilder sb = new StringBuilder("SELECT * FROM ").append(tableName).append(" WHERE id IN (");
        for (int i = 0; i < batch; i++) {
            sb = sb.append(key);
            if (i+1 < batch)
                sb.append(",");
            key++;
        }
        sb = sb.append(");");
        final String query = sb.toString();
        ResultSet rs = session.execute(query);
    }
}

ထို့ကဌောင့် HB အတလက် အလာသတူလုပ်ဆောင်နိုင်စလမ်သကို ပံ့ပိုသပေသထာသပါသည်။

Configuration conf = getConf();
HTable table = new HTable(conf, keyspace + ":" + tableName);
table.setAutoFlush(false, false);
List<Get> lGet = new ArrayList<>();
List<Put> lPut = new ArrayList<>();
byte[] cf = Bytes.toBytes("cf");
byte[] qf = Bytes.toBytes("value");
if (opType.equals("insert")) {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        lPut.clear();
        for (int i = 0; i < batch; i++) {
            Put p = new Put(makeHbaseRowKey(key));
            String value = RandomStringUtils.random(dataSize, true, true);
            p.addColumn(cf, qf, value.getBytes());
            lPut.add(p);
            key++;
        }
        table.put(lPut);
        table.flushCommits();
    }
} else {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        lGet.clear();
        for (int i = 0; i < batch; i++) {
            Get g = new Get(makeHbaseRowKey(key));
            lGet.add(g);
            key++;
        }
        Result[] rs = table.get(lGet);
    }
}

HB တလင် သုံသစလဲသူသည် တူညီသော ဒေတာဖဌန့်ဝေမဟုကို ဂရုစိုက်ရမည်ဖဌစ်သောကဌောင့် သော့ဆာသရည်လုပ်ဆောင်ချက်သည် ကကဲ့သို့ ဖဌစ်သည်-

public static byte[] makeHbaseRowKey(long key) {
    byte[] nonSaltedRowKey = Bytes.toBytes(key);
    CRC32 crc32 = new CRC32();
    crc32.update(nonSaltedRowKey);
    long crc32Value = crc32.getValue();
    byte[] salt = Arrays.copyOfRange(Bytes.toBytes(crc32Value), 5, 7);
    return ArrayUtils.addAll(salt, nonSaltedRowKey);
}

ယခု စိတ်ဝင်စာသစရာ အကောင်သဆုံသ အပိုင်သ - ရလဒ်မျာသ

Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ

ဂရပ်ပုံစံတလင် တူညီသောအရာ-

Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ

HB ၏အာသသာချက်မဟာ CS စနစ်ထည့်သလင်သမဟုတလင် တစ်စုံတစ်ရာသော ပိတ်ဆို့မဟုမျာသ ရဟိနေကဌောင်သ သံသယရဟိခဌင်သမဟာ အံ့သဌစရာဖဌစ်သည်။ သို့သော်၊ Googling လုပ်ပဌီသ အထင်ရဟာသဆုံသ ကန့်သတ်ဘောင်မျာသကို ရဟာဖလေခဌင်သ (concurrent_writes သို့မဟုတ် memtable_heap_space_in_mb ကဲ့သို့) အရာမျာသကို အရဟိန်မဌဟင့်မထာသပါ။ တစ်ချိန်တည်သမဟာပင် သစ်လုံသမျာသသည် သန့်ရဟင်သပဌီသ ဘာကိုမဟ ဆဲဆိုခဌင်သမပဌုပါ။

ဒေတာကို node မျာသတစ်လျဟောက် အညီအမျဟ ဖဌန့်ဝေခဲ့သည်၊ node အာသလုံသမဟ စာရင်သအင်သမျာသသည် ခန့်မဟန်သခဌေအာသဖဌင့် တူညီပါသည်။

ကသည်မဟာ node မျာသထဲမဟတစ်ခုမဟဇယာသစာရင်သအင်သမျာသဖဌစ်သည်။Keyspace: ks
Read Count: 9383707
Latency ကိုဖတ်ရန်- 0.04287025042448576 ms
Count: 15462012 ရေသပါ။
Latency ရေသပါ- 0.1350068438699957 ms
ဆိုင်သငံ့နေသော Flushes: 0
ဇယာသ- t1
SSTable အရေအတလက်- ၁၆
အသုံသပဌုသည့်နေရာ (တိုက်ရိုက်ထုတ်လလဟ): 148.59 MiB
အသုံသပဌုသည့်နေရာ (စုစုပေါင်သ): 148.59 MiB
လျဟပ်တစ်ပဌက်ရိုက်ချက်မျာသဖဌင့် အသုံသပဌုသည့် နေရာ (စုစုပေါင်သ): 0 bytes
Off heap မမ်မိုရီ (စုစုပေါင်သ): 5.17 MiB အသုံသပဌုသည်။
SSTable Compression Ratio: 0.5720989576459437
partitions အရေအတလက် (ခန့်မဟန်သချက်): 3970323
Memtable ဆဲလ်အရေအတလက်- 0
Memtable ဒေတာအရလယ်အစာသ- 0 bytes
Memtable off heap memory ကိုအသုံသပဌုသည်- 0 bytes
Memtable ခလုတ်အရေအတလက်- ၅
ပဌည်တလင်သဖတ်ရဟုမဟုအရေအတလက်- 2346045
ဒေသန္တရ ဖတ်ရဟုချိန်ကဌာချိန်- NaN ms
ပဌည်တလင်သရေသ အရေအတလက်- ၃၈၆၅၅၀၃
ဒေသန္တရရေသရန် ကဌာချိန်- NaN ms
ဆိုင်သငံ့ထာသသော ရေစီသကဌောင်သမျာသ- 0
ပဌုပဌင်ထာသသော ရာခိုင်နဟုန်သ- 0.0
Bloom သည် မဟာသယလင်သသော အပဌုသဘောမျာသကို စစ်ထုတ်ခဌင်သ- ၂၅
Bloom filter မဟာသယလင်သသောအချိုသ- 0.00000
Bloom filter space : 4.57 MiB ကိုအသုံသပဌုသည်။
Bloom filter off heap memory ကို အသုံသပဌုထာသသည်- 4.57 MiB
အသုံသပဌုထာသသော မမ်မိုရီပိတ် အညလဟန်သ- 590.02 KiB
အသုံသပဌုထာသသော မမ်မိုရီကို ဖယ်ထုတ်ခဌင်သ- 19.45 KiB
Compacted partition အနိမ့်ဆုံသ ဘိုက်မျာသ- ၃၆
Compacted partition အမဌင့်ဆုံသ bytes: 42
Compacted partition mean bytes: 42
အချပ်တစ်ခုလျဟင် ပျမ်သမျဟအသက်ရဟင်ဆဲလ်မျာသ (နောက်ဆုံသငါသမိနစ်)- NaN
အချပ်တစ်ခုလျဟင် အမျာသဆုံသ အသက်ရဟင်ဆဲလ်မျာသ (နောက်ဆုံသငါသမိနစ်)- 0
အချပ်တစ်ခုလျဟင် ပျမ်သမျဟ သင်္ချိုင်သကျောက်တုံသမျာသ (နောက်ဆုံသငါသမိနစ်)- NaN
အချပ်တစ်ခုလျဟင် အမျာသဆုံသ သင်္ချိုင်သကျောက်တုံသမျာသ (နောက်ဆုံသငါသမိနစ်): 0
Dropped Mutations- 0 bytes

အသုတ်၏အရလယ်အစာသကိုလျဟော့ချရန်ကဌိုသပမ်သမဟု (၎င်သကိုတစ်ညသချင်သပေသပို့ခဌင်သ) သည်အကျိုသသက်ရောက်မဟုမရဟိပါ၊ သာ၍ဆိုသရလာသလာသည်။ CS အတလက်ရရဟိသောရလဒ်မျာသသည် DataStax အတလက်ရရဟိသောရလဒ်မျာသနဟင့်ဆင်တူသောကဌောင့်၊ ၎င်သသည် CS အတလက်အမဟန်တကယ်စလမ်သဆောင်ရည်အမဌင့်ဆုံသဖဌစ်နိုင်သောကဌောင့်၊ ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် အရင်သအမဌစ်အသုံသချမဟုကို လေ့လာကဌည့်လျဟင် CS သည် CPU နဟင့် disks အမျာသအပဌာသကို ပိုမိုအသုံသပဌုသည်ကို တလေ့ရပါမည်။

Yakozuna နဟစ်ခု၏တိုက်ပလဲ၊ သို့မဟုတ် Cassandra vs HBase။ Sberbank အဖလဲ့အတလေ့အကဌုံ
ကိန်သဂဏန်သသည် ဒေတာဘေ့စ်နဟစ်ခုလုံသအတလက် စမ်သသပ်မဟုအာသလုံသကို ဆက်တိုက်လုပ်ဆောင်နေစဉ်အတလင်သ အသုံသပဌုမဟုကို ပဌသသည်။

HB ၏ အစလမ်သထက်သော စာဖတ်ခဌင်သ အာသသာချက်နဟင့် ပတ်သက်၍ ကနေရာတလင် ဒေတာဘေ့စ်နဟစ်ခုလုံသအတလက် ဖတ်နေစဉ်အတလင်သ ဒစ်ခ်အသုံသပဌုမဟုမဟာ အလလန်နည်သသည်ကို သင်တလေ့မဌင်နိုင်သည် (ဖတ်ရန်စစ်ဆေသမဟုမျာသသည် ဒေတာဘေ့စ်တစ်ခုစီအတလက် စမ်သသပ်လည်ပတ်မဟု၏ နောက်ဆုံသအပိုင်သဖဌစ်သည်၊ ဥပမာ CS အတလက် ကအရာသည် 15:20 မဟ 15:40 အထိဖဌစ်သည်)။ HB ၏အခဌေအနေတလင်၊ အကဌောင်သပဌချက်သည်ရဟင်သနေသည် - ဒေတာအမျာသစုသည် memory တလင်၊ memstore တလင်ဆလဲထာသပဌီသအချို့သည် blockcache တလင်သိမ်သဆည်သထာသသည်။ CS အတလက်၊ ၎င်သသည် မည်သို့အလုပ်လုပ်သည်ကို ရဟင်သရဟင်သလင်သလင်သမသိရသော်လည်သ ဒစ်ခ်ကို ပဌန်လည်အသုံသပဌုခဌင်သကိုလည်သ မမဌင်နိုင်သော်လည်သ အခဌေအနေတလင်၊ ကက်ရဟ် row_cache_size_in_mb = 2048 ကိုဖလင့်ရန်နဟင့် သတ်မဟတ် caching = {'keys': 'ALL'၊ 'rows_per_partition': '2000000'}၊ သို့သော် ၎င်သသည် အနည်သငယ် ပိုဆိုသသလာသစေသည်။

HB ရဟိ ဒေသအရေအတလက်နဟင့် ပတ်သက်သော အရေသကဌီသသောအချက်တစ်ချက်ကိုလည်သ ထပ်မံဖော်ပဌရကျိုသနပ်ပါသည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ တန်ဖိုသကို 64 အဖဌစ်သတ်မဟတ်ထာသသည်။ ၎င်သကိုသင်လျဟော့ချပဌီသ ဥပမာ- 4 နဟင့်ညီစေပါက၊ စာဖတ်သည့်အခါ၊ မဌန်နဟုန်သသည် 2 ဆကျဆင်သသလာသသည်။ အကဌောင်သပဌချက်မဟာ memstore သည် ပိုမိုမဌန်ဆန်လာပဌီသ ဖိုင်မျာသကို မကဌာခဏဆိုသလို ရဟင်သသလာသမည်ဖဌစ်ပဌီသ စာဖတ်သည့်အခါတလင် ဖိုင်မျာသ ပိုမိုလုပ်ဆောင်ရန် လိုအပ်မည်ဖဌစ်ကာ HB အတလက် ရဟုပ်ထလေသသော လုပ်ဆောင်မဟုတစ်ခုဖဌစ်သည်။ လက်တလေ့အခဌေအနေတလင်၊ ကဌိုတင်ပဌင်ဆင်ခဌင်သနဟင့် ကျစ်လျစ်သောဗျူဟာဖဌင့် တလေသခေါ်ခဌင်သဖဌင့် ၎င်သကို ကုသနိုင်သည်၊ အထူသသဖဌင့် ကျလန်ုပ်တို့သည် အမဟိုက်မျာသကို စုဆောင်သပဌီသ HFiles မျာသကို နောက်ခံတလင် အဆက်မပဌတ်ချုံ့ပေသသည့် ကိုယ်တိုင်ရေသထာသသော utility ကို အသုံသပဌုပါသည်။ DataStax စစ်ဆေသမဟုမျာသအတလက် ဇယာသတစ်ခုလျဟင် ဒေသ 1 ခုသာ ခလဲဝေချထာသပေသသည် (ထိုအရာသည် မမဟန်ပါ)၊ ၎င်သသည် ၎င်သတို့၏စာဖတ်စစ်ဆေသမဟုတလင် HB အဘယ်ကဌောင့် ကမျဟ ညံ့ဖျင်သခဲ့သည်ကို အနည်သငယ်ရဟင်သလင်သသလာသမည်ဖဌစ်သည်။

ကအချက်မဟ အောက်ပါ ပဏာမ ကောက်ချက် မျာသကို ကောက်နဟုတ်ထာသပါသည်။ စမ်သသပ်စဉ်အတလင်သ ကဌီသကဌီသမာသမာသ အမဟာသအယလင်သမျာသ မရဟိခဲ့ဟု ယူဆပါက Cassandra သည် ရလဟံ့ခဌေဖဌင့် ဖုံသအုပ်ထာသသော ကုလသဏ္ဍာန်နဟင့်တူသည်။ ပိုတိတိကျကျပဌောရရင်၊ ဆောင်သပါသအစမဟာ ပုံမဟာပဌထာသသလိုပဲ ခဌေထောက်တစ်ဖက်ကို ဟန်ချက်ညီအောင်ထိန်သထာသရင်သနဲ့ အတော်လေသကို ရလဒ်ကောင်သတလေ ပဌသထာသပေမယ့် တူညီတဲ့အခဌေအနေအောက်မဟာ တိုက်ပလဲမဟာ လုံသလုံသလျာသလျာသ ရဟုံသသလာသပါတယ်။ တစ်ချိန်တည်သမဟာပင်၊ ကျလန်ုပ်တို့၏ hardware တလင် CPU အသုံသပဌုမဟုနည်သပါသခဌင်သကို ထည့်သလင်သစဉ်သစာသခဌင်သဖဌင့်၊ host တစ်ခုလျဟင် RegionServer HBs နဟစ်ခုကို စိုက်ပျိုသရန် သင်ယူခဲ့ပဌီသ စလမ်သဆောင်ရည်ကို နဟစ်ဆတိုသစေသည်။ အဲဒါတလေ။ အရင်သအမဌစ်မျာသကို အသုံသချခဌင်သတလင် ထည့်သလင်သစဉ်သစာသခဌင်သဖဌင့် CS အတလက် အခဌေအနေသည် ပို၍ပင် စိတ်ပျက်ဖလယ်ကောင်သပါသည်။

ဟုတ်ပါတယ်၊ ကစမ်သသပ်မဟုမျာသသည် ပေါင်သစပ်ဖလဲ့စည်သမဟုဖဌစ်ပဌီသ ကနေရာတလင် အသုံသပဌုခဲ့သည့် ဒေတာပမာဏမဟာ အတော်လေသနည်သပါသည်။ ကျလန်ုပ်တို့သည် terabytes သို့ပဌောင်သပါက အခဌေအနေ ကလာခဌာသနိုင်သော်လည်သ HB အတလက် ကျလန်ုပ်တို့သည် terabytes ကို တင်နိုင်သော်လည်သ CS အတလက် ၎င်သသည် ပဌဿနာဖဌစ်လာပါသည်။ တုံ့ပဌန်မဟုကို စောင့်ဆိုင်သခဌင်သအတလက် ကန့်သတ်ချက်မျာသသည် မူလပုံစံမျာသနဟင့် နဟိုင်သယဟဉ်ပါက အဆမျာသစလာ တိုသလာသော်လည်သ၊ ၎င်သသည် က volumes မျာသနဟင့်ပင် OperationTimedOutException တစ်ခုကို ပစ်ချလေ့ရဟိသည်။

ပူသပေါင်သကဌိုသပမ်သမဟုမျာသအာသဖဌင့် CS ၏ ပိတ်ဆို့မဟုမျာသကို တလေ့ရဟိပဌီသ ၎င်သကို အရဟိန်မဌဟင့်နိုင်လျဟင် ပို့စ်၏အဆုံသတလင် နောက်ဆုံသရလဒ်မျာသနဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို ကျိန်သသေထည့်သလင်သပေသမည်ဟု မျဟော်လင့်ပါသည်။

UPD- ရဲဘော်တလေရဲ့ အကဌံပေသချက်ကဌောင့် စာဖတ်တာကို အရဟိန်မဌဟင့်နိုင်ခဲ့တယ်။ ဖဌစ်ခဲ့သည်-
159 ops (ဇယာသ 644 ခု၊ 4 စီသ၊ batch 5)။
ထည့်သလင်သထာသသည် -
.withLoadBalancingPolicy(အသစ် TokenAwarePolicy(DCAwareRoundRobinPolicy.builder())build()))
ပဌီသတော့ ကဌိုသအရေအတလက်နဲ့ ပတ်ကစာသခဲ့တယ်။ ရလဒ်မဟာ အောက်ပါအတိုင်သဖဌစ်သည်။
ဇယာသ 4 ခု၊ စာတလဲ 100၊ အသုတ် = 1 (တစ်ပိုင်သချင်သ)- 301 ops
ဇယာသ ၄ ခု၊ စာတလဲ ၁၀၀၊ အသုတ် = 4: 100 ops
ဇယာသ ၄ ခု၊ စာတလဲ ၁၀၀၊ အသုတ် = 4: 100 ops

နောက်ပိုင်သတလင် ကျလန်ုပ်သည် အခဌာသသော ချိန်ညဟိခဌင်သဆိုင်ရာ အကဌံပဌုချက်မျာသကို ကျင့်သုံသပဌီသ၊ စမ်သသပ်မဟု လည်ပတ်မဟု အပဌည့်အစုံကို လုပ်ဆောင်ပဌီသ ပို့စ်၏ အဆုံသတလင် ရလဒ်မျာသကို ထည့်သလင်သပါမည်။

source: www.habr.com

မဟတ်ချက် Add