ααααα·ααααααΆααΏααααααααααααα ααΆα αΆααααΈααΌα ααΆααΌαααΆααα·αααααααααα»ααααα αΆαααααΆαααααΉαααααΌααααα»αα’αααΈααααΉαααΆαααααΌαααααΆααα·ααααααααΆααααα α αΎααα ααΈαααα ααααΆααΉαα αααΆααααΆα ααα»α’αααΈααΆαααΆα
αααααΆα ββDB-Engines Ranking ααΌαααααΆααα·αααααα NoSQL columnar αααααααα·αααααα»αααΊ Cassandra (ααα
ααα CS) αα·α HBase (HB) α
ααΆαααααααααααααΆαααΆ αααα»ααααααααααααΆααααα»ααα·ααααααααααααΎααα
Sberbank ααΆααα½α
α αΎα
αααααΆαααΆαααΆααααα αα»αααΉααααααα
ααααααααααΆαααααΎααααααααααΆαα’αα»αααα ααΆα
αΆαααΆα
αααααΌααααααΆα’αααΈαα·αααααΆαααααΆαααααααΆαααααααα
ααΆααααααααααα·ααααΆαα ααΆααα·αααΊααΆ CS α’αΆα
ααααΌαααΆαααααΎαα
αααα»ααααααααα’αα»ααααΆαα±ααααΆααααααα·ααααααα ααΆαααααα αααααΊααΆαααααααααΆαααΈααααααα½α (ααααΆαα) ααα½ααα»αααααΌαα
αααααα·ααααααααααααΆααααΆαααα½α α αΎαααααα·αααΎα ααα»αααα½αα
ααα½αααΆαααΆααα αααααααααααααααααΉαααΆαααααα αααααΆααααΆαααΆαααΆα
αααΎαααααα·αααααΆαααα ααα»αααααααααΆαααα·ααααααΆααΆα αααααΊααΆααΆαααΎααααααΆααΆαα
αααΆααα αααα»αααααΈααααααΎα ααΆααΆαααΆααααααΆααααΆαααααα»αααΆαααΆαα
αααΆααα
αααααα·ααααααααΆα
αααΎααααααΆααααΆααααα»ααααα’αΆα
αα»αα
α·αααααΆαα
ααΌα ααααααΆαααααααααααα·ααααα·ααΆα CS αα αααα»αααααα ααααααΈααααα»ααααααααααααΌαααΆααα·α αΆαααΆ αααααΊα§α ααΆααααααΎα casespace ααααΌαααΆαα’αα»ααααααΆαα½αααΉααααΆαααΆααααααααΌα ααΆαααααα:
CREATE KEYSPACE ks WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3};
αααααΆααααααΆααα·ααΈααΈααααΆαααΎααααΈααΆααΆααΆαααΌαααααα·αααααΆααααΈαααααΆααααααΆαααααααΌαααΆαα α
αααΆααααΌαα
α
NW + NR > RF
αααααΆααααααΆα
ααα½αααααΆααααααΆααααΈααααΆαααα
αααααααα (NW) ααΌαααΉαα
ααα½αααααΆααααααΆααααΈααααΆαααα
αααα’αΆα (NR) ααααΌαααααααΆααααααΆα
ααααα αααα»αααααΈααααααΎα RF = 3 αααααΆααααααΆαααααΎαααΆααααααααΊαααααα:
2 + 2 > 3
3 + 1 > 3
αααααΆαααΆααΆαααΆααααααΆααααΆααΌαααααΆααααααΆααααΎααααα»αααΆααααααΆαα»ααα·ααααααα±ααααΆαααΆαααΏααΆααααΆααααα’αΆα ααααΎαα ααΆα αααααααΆααα 3+1 ααααΌαααΆαααααΎαααΎαα ααΎαααΈαααααα HB ααααΎααΆαααΎαααααΆαααααααααααααΆ i.e. ααΆαααααααααααααααααΉαααΆαααΆααα»αααα·αααααΆαα
ααΆαα½αααααααΌαααΆαααααααααΆααααΆ DataStax ααΆαααααΎαααα»αααΈααΆααα·ααααΆαααααα½ααααα½αααααΆαααααα RF = 1 αααααΆααααΆαα CS αα·α HB (αααααΆααααααααααααΆαααααΆααααααΌαααΆαααααα HDFS) α αααααΊααΆαα·αααααΆαααααααΆαααα½α ααΈαααααα₯αααα·ααααΎααΆαα’αα»αααα CS αααα»αααααΈαααααΊαααααααΆααα α§ααΆα ααα ααΌαααΆαααΆαααααααααα αΆαααΈααΆαααΎαα‘αΎααααααααααΆαααααααΌαααΆαααΎααααΈαααα»ααα·αααααααα αααα»α CSα
αα
ααΈαααααΎαααΎαααΌα
ααΆαααααα: αααααααα‘αΆαααααα½αααααααααΆααααα
αααΎαααααααα·ααααααααΆααΆααααααΌαα αααβααΊβααΆβααααααΆαα· ααα»ααααβααΆβααααΆααβαααβααΆαβα
α»αβα’ααβααβααβααΆαβα’αα»ααααβαααααΆαα RF=3 ααΊβαααααβααΆαβααααΆααα αααααΆααααααααα·αααΎααΎαααααα 4 αααααα
ααΆ 5 ααΆααΆαααΈαα½αα (20 ααα»α) αααααΆαααα RF = 3 α
αΆαααααα αα 2 αα (150 αα·ααΆααΈαααααΆαα RF = 3 αααααΉα 75 αααααΆαα RF = 1) α ααα»ααααααααα·αααΎααΎααααααΎαααΆααααα»ααααααΆααααα»ααα·αααααααα
αααα»αααΆααΆα 8 αααααΆα 5 ααααααΈαα½αα (40 ααα»α) αααααΆαααΆααααα RF = 3 ααΊ 2,7 αααα½α
αα
α αΎα (375 αα·ααΆααΈαααααΉα 138) α
αααα ααααΆαααααΆα’αΆααααααΆαααα½ααααααααααΆαααααΎααααααααα»αααααααααααααααααΎα‘αΎαααα DataStax αααααΆαα CS ααΈααααααααααΆαα HB αα ααΈααΆααααααααΎαααΆαααααΆααααααΌααααααΆα ααααααΈ 2 αα 3 αα·αααΆααααααααΆααα’αααΈα‘αΎαα ααΆαααααα ααΆααα·ααααααΆα§ααααα HB αααααΆααααΆαααααααα ααΆααααααααααααααΎαααα ααααααΆαααΆααααα ααΆαα§αααααααΆα αααΎαααααα ααΈααα αααααααΆαα½ααααααααΆααααΆ αααα HB ααααααΎαααααΌαααΆααα½ααα»α αα·ααααααα½αααααα·α ααααα½α ααα·ααααΆααα»αααααΆααΆαααααα»αααα ααΆαααα½αα±ααααααααααΆαααααααααΆαααα ααααΆαααα»αααααΆαααααα·αααΉαααΈαααααααα α CS α±ααααΆαααααΉαααααΌα αα·αααΆααα·ααΈαααααΆαααααα·αααααΆααααααααααααΎααααΈααααΎααΆαααΆαα½αααΆ α αΎααααα»ααααααΉαααΆααΎαααΉαααααΎααα αααα»αααα·αααααα ααα»ααααααΏαααααΌαα
ααΆαααααΎαααααααΆααα’ααααααΌαααΆαα’αα»αααααα ααΎα ααααααααααααΉααααααΆααααΆαααΈαααα ααα½α 4 αααααΈαα½ααααΆαααΆαααααααα ααΆααααααααααΌα ααΆααααααα
αααΈααΈααΌα Xeon E5-2680 v4 @ 2.40GHz 64 ααααα
ααΆα: 12 ααααα SATA HDD
αααα javaα 1.8.0_111
αααα CS: 3.11.5
αααΆαααΆαααααα cassandra.ymlnum_tokensα α’α₯α¦
hinted_handoff_enabledα αα·α
hinted_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
α’ααααα·ααααα AllowAllAuthorizer
α’αααααααααααααα½ααΆααΈα CassandraRoleManager
αα½ααΆααΈ_αα»ααααΆα_αααα»α_msα α’α α α
permissions_validity_in_ms: 2000
credentials_validity_in_ms: 2000
ααΆαααΆαα org.apache.cassandra.dht.Murmur3Partitioner
data_file_directoriesα
- /data1/cassandra/data # αα dataN ααΈαα½ααααΊααΆααΆαααΆα
ααααα‘αα
- /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α αααααα
Prepare_statements_cache_size_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
αααΆαααΆαααααα:
- ααααΆααα "*,*"
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α α¦α
trickle_fsyncα αα·ααα·α
trickle_fsync_interval_in_kb: 10240
storage_port: 7000
ssl_storage_port: 7001
listen_α’αΆααααααΆαα *
α’αΆααααααΆαααααΆαα *
listen_on_broadcast_α’αΆααααααΆαα αα·α
internode_authenticatorα org.apache.cassandra.auth.AllowAllInternodeAuthenticator
start_native_transportα αα·α
native_transport_portα α©α α€α’
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α α‘α¦α α
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_contention_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α αα·ααα·α
tracetype_query_ttl: 86400
tracetype_repair_ttl: 604800
enable_user_defined_functionsα αα·ααα·α
enable_scripted_user_defined_functionsα αα·ααα·α
windows_timer_intervalα α‘
transparent_data_encryption_optionsα
ααΆαααΎαα αα·ααα·α
tombstone_warn_threshold: 1000
tombstone_failure_threshold: 100000
batch_size_warn_threshold_in_kbα α’α α
batch_size_fail_threshold_in_kbα α’α₯α
unlogged_batch_across_partitions_warn_thresholdα α‘α
compaction_large_partition_warning_threshold_mb: 100
gc_warn_threshold_in_msα α‘α α α
back_pressure_enabledα αα·ααα·α
enable_materialized_viewsα αα·α
enable_sasi_indexesα αα·α
ααΆαααααα GCα
### ααΆαααααα CMS-XX:+UseParNewGC
-XX:+ααααΎConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=1
-XX:CMSIinitiatingOccupancyFraction=75
-XX:+ααααΎCSI InitiatingOccupancyOnly
-XX:CMSWaitDuration=10000
-XX:+CMSParallelInitialMarkEnabled
-XX:+CMSEdenChunksRecordAlways
-XX:+CMSClassUnloadingEnabled
α’αααα αα αΆα jvm.options ααααΌαααΆααααα αα 16Gb (ααΎαααααΆαααΆααααα 32 Gb ααα ααΆαα·αααΆαα’αααΈααααααα)α
ααΆααΆαααααΌαααΆααααααΎαα‘αΎααααααΆααααααααΆα
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 ααΎαααΆαααα αα MetricsRegion αααααΆααα ααα GC αα ααααααα ααα½ααααααααΆαα αααΎαααΆα 1000 αα ααΎ RegionServer)
αααΆαααΆαααααα HBase αα·ααααααααΆαααΎαzookeeper.session.timeout: 120000
hbase.rpc.timeout: 2 ααΆααΈ
hbase.client.scanner.timeout.period: 2 ααΆααΈ
hbase.master.handler.count: 10
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α α’α α
hbase.hregion.memstore.flush.size: 1 GiB
hbase.hregion.memstore.block.multiplierα α¦
hbase.hstore.compactionThresholdα α₯
hbase.hstore.blockingStoreFiles: 200
hbase.hregion.majorcompaction: 1 αααα
HBase Service Advanced Configuration Snippet (Safety Valve) αααααΆαα hbase-site.xmlα
hbase.regionserver.wal.codecorg.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec
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
αααααΎαααααααα
ααΆαααααααα Java αααααΆαα HBase RegionServerα
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSIinitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:ReservedCodeCacheSize=256m
hbase.snapshot.master.timeoutMillis: 2 ααΆααΈ
hbase.snapshot.region.timeout: 2 ααΆααΈ
hbase.snapshot.master.timeout.millis: 2 ααΆααΈ
ααα ααααααα ααα»α’αα·ααααΆαααααααΆαααΈααα HBase REST: 100 MiB
αααΆαααΈααα HBase REST ααΆαααααα»ααα»αα―αααΆααααααα ααα»α’αα·ααααΆα α₯
ααα ααααααα ααα»α’αα·ααααΆαααααααΆαααΈααα HBase Thrift: 100 MiB
αααΆαααΈααα HBase Thrift ααΆαααααα»ααα»αα―αααΆααααααα ααα»α’αα·ααααΆα α₯
ααα α Master Max Log: 100 MiB
ααΆαααααα»ααα»αα―αααΆααααααα ααα»α’αα·ααααΆ Master: 5
RegionServer Max Log Size: 100 MiB
RegionServer ααΆαααααα»ααα»αα―αααΆααααααα ααα»α’αα·ααααΆα α₯
HBase Active Master Detection Window: 4 ααΆααΈ
dfs.client.hedged.read.threadpool.size: 40
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α α£α
hbase.master.executor.closeregion.threadsα α£α
hbase.master.executor.serverops.threads: 60
hbase.regionserver.thread.compaction.small: α¦
hbase.ipc.server.read.threadpool.size: 20
αααααααα‘αΆαααααΆααααααΌααααααα α¦
Client Java Heap ααα ααα·αααΆααα 1 GiB
HBase REST Server Default Group: 3 GiB
HBase Thrift Server Default Group: 3 GiB
ααα α Java Heap αα HBase Master ααΆαα: 16 GiB
ααα α Java Heap αα HBase RegionServer ααΆαα: 32 GiB
+ ZooKeeper
maxClientCnxnsα α¦α α‘
α’αα·ααααΆSessionTimeoutα 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 ααΆαα (ααΆααΉαααΆααααααααααΆαααααααΆαααααα 1.2.0 ααααα·αααΎαα·αααααααααΆαααααααααααΆααααααΆααααΆαααΎ) α
α₯α‘αΌαααααααααΆαααααααΌαα αααααΆαααΆαα·αα αααΆααααΆααΆαααααααα ααΆααααααααααΆαααααΆαααααααααααΆααααααΆααααΌαααααΆααα·ααααααααΆααααΆαα ααΆαααααΎαααααααααΌαααΆαα’αα»αααααα αααα»ααααααααααααα ααΆαααααα αα αααα»αααΆαααααΎααααααα½αα ααα½α ααΆααΆαα ααα½α 4 ααααΌαααΆααααα»ααααα»ααααααααΆαααααΆ (ααααΆααααΆαα 4 ααααΌαααΆαααααΎαααααΆααααΆααααααΆαα) α αα αααα»αααΆαααααΎααααααααααααα ααΎαααΆαααααΎααΆαααΆαα½ααα»α ααα½α 8 αααααααααΆα αααα»αααααΈααααααα αααΆα αααΊ 100 αα·ααααααααα 200 (αααΆαααΆααααααααΆα α - ααΌαααΎαααΌαααΆαααααα)α ααα ααα·αααααααααααΆαααααααααΊ 10 αα α¬ 100 αα (ααα ααα·αααααα)α ααΆααα»α αααααααααΆα ααα½α 5 ααΆαααααΌαααΆαααααα αα·αα’αΆααα αααα»αααΆααΆαααΈαα½ααααΆαααααα αααα»ααααααΆαα½αααααΆααα 5 αααααααα‘αΆαααααΌαααΆαααααα/α’αΆααα ααΆααααΆααΆαααΈαα½αα (ααααααααααα‘αΆα - thNum) αααααΈαα½ααααααΎαα½αααααααΆααααΆαα (ααΆαα = 1 ααΆα)α
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);
}
α₯α‘αΌααααααααααα½αα±ααα αΆααα’αΆαααααααααα»α - αααααα:
ααΏαααΌα
ααααΆαααα»αααααααααααΆα ααα
α’ααααααααααααα HB ααΊαα½αα±ααααααΆααααα’αΎαααΆαααααααΆαααΆαααααααααΆααΆαααΆαααΆαααααααα½αα
ααα½ααα
αααα»αααΆαααα‘αΎα CS α ααααααΆαααΆααααα ααΆαα αααΌα ααα αα·αααΆαααααααααααΆαααΆααααααααΆααααααααααα»α (ααΌα
ααΆ concurrent_writes α¬ memtable_heap_space_in_mb) αα·αααΆααααααΎαααααΏααααααα αααααΉαααΉαααα ααΎααααα’αΆα α αΎααα·αααααα’αααΈααΆααα’ααα
αα·ααααααααααΌαααΆαα ααα αΆαααααΎαααααΆαα ααΌααΆααααααΆαα αααα·αα·ααΈααααΆααααΆααα’ααααΊαααα ααααΌα ααααΆα
αααααΊααΆα’αααΈααααααα·αα·ααΆααΆαααΎααα
ααΌα
ααΈααααΆαααα½ααα
ααααααααααΉαα ks
α
ααα½αα’αΆαα 9383707
α’αΆαααΆαααΊααααΆαα 0.04287025042448576 ms
α
ααα½αααααα: 15462012
ααααα Latencyα 0.1350068438699957 ms
ααΉαα αΌααα·αααΆαααααααα
α α
ααΆααΆα: t1
α
ααα½α SSTable: 16
ααα ααααααΆαααααΎ (ααααΆαα)α 148.59 MiB
ααα ααααααΆαααααΎ (ααα»α): 148.59 MiB
α
ααααααααααααΎαααααΌααα (ααα»α)α 0 αα
α’αααβα
αα
αΆαβαα·αβα ααΆαβααΆαβααααΎ (ααα»α)α 5.17 ααααΆαα
αααΆααΆαααααΆααααα αΆαα SSTable: 0.5720989576459437
α
ααα½αααΆαααΆα (αααΆααααααΆα): 3970323
α
ααα½αβαααα‘αΆ Memtableα 0
ααα ααα·αααααααααα’αΆα
α
αα
αΆαααΆαα 0 αα
Memtable off heap memory ααΆαααααΎα 0 bytes
α
ααα½ααα»αααΆαα Memtableα α₯
α
ααα½αα’αΆααααα»ααααα»αα 2346045
ααΆαααΊαααααΆαα’αΆααααα»ααααα»αα NaN ms
α
ααα½αααααααααα»ααααα»αα 3865503
ααΆαααΊαααααΆαααααααααα»ααααα»αα NaN ms
ααΉαα αΌααα·αααΆαααααααα
α α
ααΆααααα½ααα»αα 0.0
Bloom α
αααααααα·αααααΆααα·ααα·αα α’α₯
Bloom filter ratio αα·ααα·αα 0.00000
ααα αααααα Bloom ααΆαααααΎα 4.57 MiB
Bloom filter off heap memory αααααααΎα 4.57 MiB
αα·αα·αααααααααααα·αα’αααα
αα
αΆα heap ααΆαααααΎα 590.02 KiB
αα·ααααααααααΆααααΆααααα αΆαααα·αα’αααα
αα
αΆα heap ααΆαααααΎα 19.45 KiB
ααΆαααΆαααααα½αα’αααααααΆα α£α¦
ααααα½αααΆαααΆαα’αα·ααααΆα α€α’
ααΆαααΆαααααα½ααααααα α€α’
αααα·ααΆααααααααΆααααΆααααααααα»ααα½αα
ααα·α (ααααΆαααΆααΈα
α»αααααα): NaN
αααα·ααΆααααααααΆααα’αα·ααααΆαααα»ααα½αα
ααα·α (ααααΆαααΆααΈα
α»αααααα)α 0
αααααααΌαααΆααααααααα»ααα½αα
ααα·α (ααααΆαααΆααΈα
α»αααααα): NaN
αααααααΌαα’αα·ααααΆαααα»ααα½αα
ααα·α (ααααΆαααΆααΈα
α»αααααα): 0
ααΆαααααΆααααααΌααααααΆααααααΆααα 0 αα
ααΆαααα»ααααααΎααααΈααΆαααααααααα αααααΆα α (ααΌααααΈαααααααΌαααΆαααα‘ααααΈααααΆ) αα·αααΆααααααααΆαααα ααΆααΆααααα’αΆααααααα αα ααΆα’αΆα αα αα½α αααααΆααΆααα·ααααααΊαα·αααΆααααΎαααΆαα’αα·ααααΆαααααΆαα CS α αΆααααΆααααΈαααααααααααα½αααΆααααααΆαα CS ααΊααααααααααΆαα ααΉααααααααααααα½αααΆααααααΆαα DataStax - αααα ααααΆααααααΆααααΆααααααα·ααααα·ααΆααααα»ααα½ααα·ααΆααΈα ααΎαααΈααα ααααα·αααΎααΎααααα‘ααααΎαααΆαααααΎααααΆααααααΆα ααΎαααΉαααΎαααΆ CS ααααΎααααΆαα CPU αα·α Disk ααΆα αααΎααααα
αα½ααααααα αΆαααΈααΆαααααΎααααΆαααααα»αα’αα‘α»ααααααααΎαααΆαααααΆαααααΎαααααααΆααα’αααααα»ααα½ααα½ααααααΆααααΌαααααΆααα·ααααααααΆααααΈαα
ααΆααααααΉαα’αααααααααααααααΆαα’αΆαααααΆαα₯αααα·αααααα HB α αα ααΈαααα’αααα’αΆα ααΎαααΎαααΆαααααΆααααΌαααααΆααα·ααααααααΆααααΈα ααΆαααααΎααααΆααααΆαααα‘α»ααααα’αΆαααΊααΆαααααΆαα (ααΆαααααΎαααααα’αΆαααΊααΆαααααα α»ααααααααααααααΆααααααααααΆααααΌαααααΆααα·ααααααααΈαα½αα α§ααΆα ααααααααΆαα CS αααααΊα αΆααααΈαααα 15:20 ααααααα 15:40)α αααα»αααααΈ HB α ααα»ααααΊα αααΆαα - αα·ααααααααΆαα αααΎααααα½ααα αααα»αα’αααα αα αΆααααα»α memstore α αΎαααααααααΌαααΆααα»ααααα»αααααΆαααααααΆαααααα»α blockcache α α αααα CS ααΆαα·αα αααΆααααΆααΆααααΎαααΆααααΆαααΆααααα ααα»ααααααΆαααα αααααΆααααα·αα’αΆα ααΎαααΎαααα ααα»αααααααα»αααααΈααΆαααΆαααα»αααααα½αααααΌαααΆαααααΎα‘αΎαααΎααααΈααΎαααααΎαααΆαααααΆαααααααΆαα row_cache_size_in_mb = 2048 α αΎααααααααααΆαααααααΆαα = {'keys': 'ALL', 'rows_per_partition': ' 2000000'} ααα»ααααααΆααΆαααααΎα±ααααΆααΆααααα’αΆαααααααααα·α α
ααΆααααΆααααααααααααααα»αααΆααα·ααΆααααααααααΌαα ααα»α ααααΆαααα½αα’αααΈα ααα½αααααααα αααα»α HB α αααα»αααααΈααααααΎααααααααααΌαααΆααααααΆααααΆ 64 α ααααα·αααΎααΎααααααααΆα αΎαααααΎα±ααααΆααααΎααΉαα§ααΆα ααα 4 αααααΆαααααα αααα’αΆαααααΏαααααΆααα α»α 2 ααα α ααα»ααααΊααΆ memstore ααΉααααααααΏαααΆααα»α α αΎαα―αααΆαααΉαααααΌαααΆαα αΌαααΉαααΆααααΆααα»α α αΎααα αααα’αΆα α―αααΆαααΆααααα αααΎαααΉαααααΌαααααΎαααΆα αααααΆααααα·ααααα·ααΆααααααα»αααααΆααααααΆαα HB α αα αααα»αααααααααααΆααααααα ααΆα’αΆα ααααΌαααΆαααααΆααΆααααααΆααα·αααΆαααααα»αααααΆααααααααααααΆαα»α αα·αααααα½α ααΆαα·αααααΎαααααΎα§αααααααααΎααααΆααααααααααααααααα½αα―αααααααααΌαααααΆα αα·αααααα½α HFiles ααΆαα·α αα αα αααα»αααααααΆααααααα ααΆα’αΆα αα αα½α αααααΆαααααΆααααΆαααααΎααααα DataStax αα½αααααΆααααα αααα 1 ααααααααα»ααα½αααΆααΆα (ααααα·αααααΉαααααΌα) α αΎααααααΉααααααΆααααΆαααααααΆα ααα»α’αααΈααΆαααΆ HB α’ααααΆααααα»αααΆαααααΎαααααα’αΆααααααα½αααα
ααΆαααααα·ααααΆααααααΆααααααααααΌαααΆαααα ααααΈαααα ααααααααααΆαα·αααΆαααα α»αααααΆαα½αααααΌαααΆαααααΎα‘αΎααααα»αα’αα‘α»ααααααααΎαααααααα Cassandra ααΎααα ααΌα ααΆ colossus ααΆαα½αααΉαααΎαααααΈα₯αααα α αααΆααααΆαααααα ααα αααααααααααΆαααΆααα»αααααΆααα ααΎααΎαααααΆα ααΌα αα αααα»αααΌαααΆααα ααΎαα’ααααα ααΆααααα αΆαααααααααα’ ααα»αααααα αααα»αααΆαααααα»ααααααααααααααααααΌα ααααΆ ααΆαα αΆααααΆαααααα»αα αααα»ααααααΆαα½αααααΆααα ααααα·αααΈααΆαααααΎααααΆαααααΈααΈααΌααΆααα ααΎαααααααΉαααααααΎα ααΎαααΆααααααΆα RegionServer HBs ααΈααααα»ααα½ααααΆαααΈα α αΎααααα ααα»αααα’αΆα αααααΎαααααα·αααααΆαααααααα ααΆαααααα ααααα·αααΈααΆαααααΎααααΆααααααΆα ααααΆαααΆααααααΆαα CS ααΊααΆααααα’αΆααααααα αα
ααΆααΆααα·αααΆαα ααΆαααααΎαααααααΆαααααααΊαα·αααΆααααα α αΎαα ααα½ααα·αααααααααααααΌαααΆαααααΎαα ααΈαααααΊαα·α αα½α α ααΆα’αΆα αα αα½α αααααΆααααα·αααΎααΎαααααΌααα terabytes αααααααΆαααΆαααΉααα»αααααΆ ααα»αααααααααΆαα HB ααΎαα’αΆα αααα»α terabytes αααααΆαα CS ααΆααααααΆααΆααααα αΆα ααΆααΏααααΆααΆααααα αα OperationTimedOutException αααααΈααΆααΆαααΆαααΆαααααααααα αααααΈααΆαααΆαααΆαααααααααααΆααααΆααααα αΆαααΆαααααΎαααααααΌαααΆαααΎαα‘αΎαα αααΎααααα½α ααα αΎα ααΎαααααααααα ααΉαααααΆαααΎααααααα
αααα»ααααααΉαααΆ ααΆαααααα·α αα αα·αααααααΉαααααααα½αααααΆ ααΎαααΉαααααΎαααΆαααΆαααααααααα CS α αΎαααααα·αααΎααΎαα’αΆα αααααΏαααΆ ααααα α α»ααααα αααααααααΆα αααα»αααΉαααααααααααααΆαα’αααΈααααααα α»ααααααα
UPD: α’ααα»αα
ααααααΆαααααΆααααααααα·ααα αααα»αααΆααααααααααααΆαα’αΆαααΏαααΆααα»αα ααΊα
159 ops (644 ααΆααΆα, 4 ααααααΈα, ααΆα
α 5) α
:ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ:
.withLoadBalancingPolicy(New TokenAwarePolicy(DCAwareRoundRobinPolicy.builder(.build())))
α αΎααααα»αααΆαααααα»ααα·αααΆαα½αααΉαα
ααα½ααααααααααα‘αΆαα ααααααααΆαααΌα
ααΆααααααα
4 αα», 100 αααααααα‘αΆα, ααΆα
α = 1 (αα»ααα½ααα»α): 301 ops
4 ααΆααΆα, 100 αααααααα‘αΆα, ααΆα
α = 10: 447 ops
4 ααΆααΆα, 100 αααααααα‘αΆα, ααΆα
α = 100: 625 ops
ααααααααααα»αααΉαα’αα»αααααααααΉααααααα½ααααααααα ααααΎαααΆαααααααΆααααααααααα αα·ααααααααααααααα
α
α»ααααα
αααααααααΆαα
ααααα: www.habr.com