드디어 Cassandra 를 In-memory에서 돌려보기 위한 준비가 끝났다.

Memtable threshold를 조정하여 가능한 한 disk로 flushing되지 않고 메모리에서 동작하게 해보자.


MemtableSizeInMB요소인 binary_memtable_throughput_in_mb 에서 지정된 값으로 이 값은 메모리의 Memtable 크기의 기준이고, Column indexing과 관련된 overhead탓에 커지게 될 heap 사용량은 아니다.


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가 보이는가!?

+ Recent posts