2015-06-17 4 views
4

У меня есть следующие ColumnFamily определены в Кассандрепроизводительность Cassandra чтение с коллекцией

CREATE TABLE metric (
period int, 
rollup int, 
tenant text, 
path text, 
time bigint, 
data list<double>, 
PRIMARY KEY ((tenant, period, rollup, path), time) 
) WITH 
bloom_filter_fp_chance=0.010000 AND 
caching='KEYS_ONLY' AND 
comment='' AND 
dclocal_read_repair_chance=0.000000 AND 
gc_grace_seconds=864000 AND 
index_interval=128 AND 
read_repair_chance=0.100000 AND 
replicate_on_write='true' AND 
populate_io_cache_on_flush='false' AND 
default_time_to_live=0 AND 
speculative_retry='NONE' AND 
memtable_flush_period_in_ms=0 AND 
compaction={'class': 'SizeTieredCompactionStrategy'} AND 
compression={'sstable_compression': 'LZ4Compressor'}; 

размера списка данных влияют ли производительность чтения в Кассандре? Если да, то как мы можем его измерить ..?

Проблема заключается в том, что время, затрачиваемое на запрос Data-Set1 из cassandra для получения 8640 строк (где # элементов в списке данных для каждой строки - 90) для данной комбинации пути/периода/свертки больше, чем время, необходимое для запроса Data-Set 2, который составляет 8640 строк данных (где количество элементов в списке данных для каждой строки равно 10).

Кроме того, если я запускаю тест производительности с 10 пользователями, получающими доступ к Data-Set1 одновременно, то я начинаю видеть тайм-ауты cassandra в бэкэнд, и он тратит много времени на сборку Мусора, но то же самое не происходит, когда я делаю то же самое, запросив Data-Set2.

Итак, я заключу, что количество элементов в списке данных влияет на производительность.

Вы видите похожие проблемы с производительностью в вашем стеке cassandra ....?

ответ

1

Я бы не подумал, что 90 предметов в коллекции будут такими большими, но в вашем случае, я думаю, это так. Проблема в том, что когда вы запрашиваете столбец коллекции, Cassandra не может просто возвращать части коллекции. Он должен вернуть весь столбец (сбор). Эта операция не является бесплатной, но я не думаю, что 90 двухместных было бы большой проблемой.

Одна вещь, чтобы попытаться включить отслеживание. Это должно дать вам некоторое представление о том, что делает Cassandra, когда вы выполняете свой запрос.

[email protected]:stackoverflow> tracing on; 

Часто, включение трассировки может привести вас к cuplrit.

он проводит много времени в сборе мусора

Используете ли вы какие-либо специальные настройки виртуальной машины Java? Сколько у вас RAM на каждом узле? GC, который прерывает нормальные операции, указывает (мне), что может возникнуть проблема с настройками кучи JVM. Документ DataStax на Tuning Java Resources указывает, что вы должны использовать следующие рекомендации по калибровке вашей кучи на основе оперативной памяти вашего узла:

System Memory  Heap Size 

Less than 2GB  1/2 of system memory 
2GB to 4GB   1GB 
Greater than 4GB 1/4 system memory, but not more than 8GB 
Смежные вопросы