읽기 경로에서 Cassandra는 디스크 (SSTable)의 데이터를 RAM (memtables)의 데이터와 병합합니다. 요청되는 파티션에 대한 모든 SSTable 데이터 파일을 검사하지 않기 위해 Cassandra는 블룸 필터라는 데이터 구조를 사용합니다.
블룸 필터는 카산드라가 다음 두 가지 상태 중 하나를 결정할 수있는 확률적인 데이터 구조입니다. - 주어진 파일에 데이터가 분명히 존재하지 않거나 - 주어진 파일에 데이터가있을 가능성이 있습니다.
블룸 필터는 주어진 SSTable에 데이터가 존재한다는 것을 보장 할 수 없지만 더 많은 RAM을 소비하도록함으로써 블룸 필터를보다 정확하게 만들 수 있습니다.운영자는 bloom_filter_fp_chance를 0에서 1 사이의 부동 소수점으로 조정하여 테이블 당이 동작을 조정할 수 있습니다.
Bloom_filter_fp_chance의 기본값은 LeveledCompactionStrategy를 사용하는 테이블의 경우 0.1이고 다른 모든 경우는 0.01입니다.
블룸 필터는 RAM에 저장되지만 오프 힙으로 저장되므로 운영자는 최대 힙 크기를 선택할 때 블룸 필터를 고려하지 않아야합니다. 정확도가 향상됨에 따라 (bloom_filter_fp_chance가 0에 가까워짐에 따라) 메모리 사용량이 비선형 적으로 증가합니다. bloom_filter_fp_chance = 0.01의 블룸 필터는 bloom_filter_fp_chance = 0.1 인 경우 동일한 테이블의 약 3 배의 메모리가 필요합니다.
일반적으로 Blood_filter_fp_chance의 일반적인 값은 Cassandra가 행에 대한 SSTable을 스캔 할 수있는 거짓 긍정 확률 인 경우 0.01 (1 %) ~ 0.1 (10 %) 사이이며 대개 디스크에 존재하지 않는 것을 찾습니다. 매개 변수는 사용 사례에 의해 조정되어야한다 : 더 많은 RAM과 느린 디스크가
사용자 초과 IO 작업을 피하기 위해 수치 낮은 숫자 (예 : 0.01) 에 bloom_filter_fp_chance를 설정하는 혜택을 누릴 수 있습니다. 적은 RAM, 더 조밀 한 노드, 또는 매우 빠른 디스크를
사용자 초과 IO 작업
거의 읽을 워크로드에서
, 또는의 비용으로 RAM을 절약하기 위해 더 높은 bloom_filter_fp_chance을 허용 할 수있다 전체 데이터 세트 (예 : 분석 워크로드)를 스캔하여 읽기만 수행하면 bloom_filter_fp_chance를 훨씬 높은 수로 설정하면됩니다.
감사합니다. Adutra, 귀하의 답변은 매우 유익합니다. –