드디어 Cassandra 를 In-memory에서 돌려보기 위한 준비가 끝났다.
Memtable threshold를 조정하여 가능한 한 disk로 flushing되지 않고 메모리에서 동작하게 해보자.
MemtableObjectCountInMillions의 memtable_throughput_in_mb는 Memtable에서 SSTable로 disk에 flushing하기 전에 단일 Memtable에 저장했던 coloumn의 최대 개수를 말한다.
기본값은 0.3이고, 이것은 약 333,000컬럼을 말한다.
또한 Memtable을 disk에 flushing한 뒤에 얼마나 오래 메모리에 남겨둘 것인가에 대한 threshold가 존재하는데 이것은 memtable_flush_after_mins 값을 변경하면 된다고 한다.
그리고 flush를 수행할 때, Memtable을 flush buffer에 쓰게 되는데, flush_data_buffer_size_in_mb값으로 buffer의 크기를 조절할 수 있다.
마지막으로 memtable_flush_writers값이 있는데 이것은 필요할 때 Memtable에 write명령을 수행하기 위한 thread의 개수를 지정하게 된다.
BUT!!
이렇게 쉽게 안 넘어갈 줄 알았다.
위의 값들은 0.8 대의 버전에서는 사용하지 않으며, 각각은 기본값으로 주석처리 되어 있고, 몇몇 값들은 아예 column family에 종속되어 버렸다.
따라서 우리는 이 값들을 다시 볼 필요가 있는데, Cassandra에서 column family의 정보를 보면 다음과 같이 나오는 것을 알 수 있다.
[default@usertable] show schema;
create keyspace usertable
with placement_strategy = 'NetworkTopologyStrategy'
and strategy_options = [{datacenter1 : 1}]
and durable_writes = true;
use usertable;
create column family data
with column_type = 'Standard'
and comparator = 'BytesType'
and default_validation_class = 'BytesType'
and key_validation_class = 'BytesType'
and memtable_operations = 2.3203125
and memtable_throughput = 495
and memtable_flush_after = 1440
and rows_cached = 0.0
and row_cache_save_period = 0
and keys_cached = 200000.0
and key_cache_save_period = 14400
and read_repair_chance = 1.0
and gc_grace = 864000
and min_compaction_threshold = 4
and max_compaction_threshold = 32
and replicate_on_write = true
and row_cache_provider = 'ConcurrentLinkedHashCacheProvider';
빨간색으로 칠해놓은 저 세가지의 threshold가 보이는가!?