Я выполняю стресс-тесты cassandra для сравнения производительности Cassandra 2 против Cassandra 3, используя только один узел.Я знаю, что Cassandra на самом деле не предназначена для установки с одним узлом, как описано, например, здесь https://grokbase.com/t/cassandra/user/161pp4x7gr/production-with-single-node. Я хочу сказать, что даже при сравнении Cassandra 2 и 3 на одном узле, я ожидаю, что Cassandra 3 даст лучшие результатычем Cassandra 2, поскольку версия 3, как утверждается, имеет улучшенную производительность как для операций чтения, так и для записи.
Однако, используя только тест вставки, я получаю следующее:
Cassandra 2.2.8 с кучей 4G, достигающей 406 потоков с 59 629 операциями / с, 33,5 секунды
Cassandra 3.9.0 с кучей 4G, достигающей 913 потоков с 37 758 операциями / с, 53 секунды (с406 потоков - это 24 976 операций в секунду, 80,1 секунды)
Я пробовал различные комбинации конфигурации версии 3, играя с кучей памяти, настройками gc (как для CMA, так и для G1), пакетированием, ведением журнала, одновременная запись, размеры кэша, очистка памяти, trickle fsync.Хотя я заметил некоторые незначительные улучшения, операционные возможности никогда не достигали производительности Cassandra 2. Здесь был задан похожий вопрос Cassandra v. 3, напишите проблему производительности с решением не использовать -XX: + AlwaysPreTouch опция, которая была добавлена в Cassandra 3. Однако это не оказало никакого влияния в моем случае.
Поэтому мой вопрос - возможно ли, что хотя Cassandra3 имеет (в соответствии с официальными примечаниями, а также его пользователями) в целом лучшую производительность, чем версия 2, это утверждение относится только к установке с несколькими узлами, а не к одному узлу (поэтому в обработке между узлами произошли значительные улучшения)?
Мой стресс-тест cassandra:
keyspace: test
keyspace_definition: |
CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};
table: elementstore
columnspec:
- name: key
size: fixed(3)
population: uniform(1..100)
- name: value
size: fixed(8)
population: uniform(1..100)
insert:
partitions: fixed(1)
batchtype: UNLOGGED
select: fixed(10)/10
Таблица elementstore уже входит в состав магазина с описанием:
CREATE TABLE test.elementstore (
key blob,
column1 blob,
value blob,
PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE
AND CLUSTERING ORDER BY (column1 ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
Я вставляю 2 000 000 записей
cassandra-stress user profile=file:../specification.yaml ops(insert=1) n=2000000
Спасибо за любой совет / мнение / поделился опытом.