2016-09-05 1 views
2

, I는 발견카산드라에서 블룸 필터의 역할은 무엇입니까? 카산드라의 문서 개의 상이한 링크에서

link 1

행 데이터가 디스크에 SSTables 액세스하기 전에 memtable에 존재하는지 확인하여 메모리에 저장 구조

Cassandra는 블룸 필터를 검사하여 요청 SSTables가 요청 파티션 데이터를 가질 가능성이 있는지를 확인합니다.

내 질문에 위의 두 문장 모두 맞습니까? 그렇다면 블룸 필터가 Memtable 및 SSTable에 대해 별도로 유지 관리됩니까? 미리 감사드립니다.

답변

11

Bloom filter은 요소가 집합에 있는지 여부를 확인하는 데 사용되는 일반 데이터 구조입니다. 이 알고리즘은 오 탐지 (false positive)를 반환하는 위험을 무릅 쓰고 극히 빠르게 설계되었습니다. SSTables 중 실제로 (고가의 IO 작업을 피하고 이렇게하고) 그 내용을 읽을 필요없이 요청 된 파티션 키 여부, 을 포함 할 가능성이있는 경우

카산드라는 테스트 블룸 필터를 사용합니다.

블룸 필터가 주어진 파티션 키에 대해 false을 반환하면 파티션 키가 해당 SSTable에 존재하지 않는다는 것이 확실합니다. 그러나 true을 반환하면 SSTable은 가능성이 높습니다.에 파티션 키가 포함되어 있습니다. 이러한 상황이 발생하면 Cassandra는 SSTable을 읽을 필요가 있는지 여부를 결정하기 위해 더 복잡한 기술에 의존합니다. bloom 필터는 대부분의 읽기에 대해 참조되며 일부 쓰기 (memtable이 디스크로 플러시되는 경우) 중에 만 업데이트됩니다. Cassandra의 읽기 경로 here에 대한 자세한 내용을 볼 수 있습니다. 질문으로 돌아 가기

는 :

1) 첫 번째 문은 ("행 데이터가 디스크에 SSTables에 액세스하기 전에 memtable에 존재하는지 확인 메모리에 저장된 구조")는 이럴 정확하지 않습니다 : 꽃 필터는 참으로 memtable이 디스크로 플러시 될 때 업데이트되지만 memtable을 참조하지 않습니다.

2) 블룸 필터는 SSTable마다 유지된다. 즉, 디스크의 각 SSTable은 메모리에 블룸 필터를 가져온다.

+0

감사합니다. Adutra, 귀하의 답변은 매우 유익합니다. –

0

읽기 경로에서 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과 느린 디스크가

  1. 사용자 초과 IO 작업을 피하기 위해 수치 낮은 숫자 (예 : 0.01) 에 bloom_filter_fp_chance를 설정하는 혜택을 누릴 수 있습니다. 적은 RAM, 더 조밀 한 노드, 또는 매우 빠른 디스크를

  2. 사용자 초과 IO 작업

    거의 읽을 워크로드에서
  3. , 또는의 비용으로 RAM을 절약하기 위해 더 높은 bloom_filter_fp_chance을 허용 할 수있다 전체 데이터 세트 (예 : 분석 워크로드)를 스캔하여 읽기만 수행하면 bloom_filter_fp_chance를 훨씬 높은 수로 설정하면됩니다.