3.2. Team Bloom Filter

1)write_buffer_size

가설 : write buffer size를 키울수록 쓰기 성능이 향상될 것으로 추정되나 이를 너무 과하게 키운다면 어딘가의 overhead가 너무 커져
오히려 성능 저하가 발생할 수 있으므로 최대한 크기를 키우되 성능 저하가 적어 최고의 성능이 나오는 값을 찾는 것을 목표로 해야할 것이다.

측정 : 기존의 값 64MB를 사용한 결과 LOAD에 걸리는 시간은 대부분 비슷했고 LOAD에 걸린 시간과 RUN에 걸린 시간이 비례한 반면
이를 128MB로 늘리자 LOAD에 필요한 시간이 상당히 줄어들었고 LOAD와 RUN의 Runtime이 비례하지 않게 되었다.
Runtime은 기존보다 증가하거나 감소하였는데, 증가량에 비해 감소량이 훨씬 컸으며 대체로 runtime은 감소하는 경우가 많았다.
가장 성능 변화에 큰 영향을 준 옵션이였으며 기존 보다 오히려 시간이 증가하는 경우를 다른 옵션을 통해 최소화하는 방향으로 진행하였다.
128MB 이상으로 늘렸을땐 128MB와 큰 차이가 없거나 오히려 성능이 떨어졌다.

2)max_file_size

가설 : 최대 파일 크기에 제한을 둔다는 점에서 해당 값을 줄일수록 성능은 향상될 것이나, 그럴 경우 데이터베이스 사용에 제약이 걸릴 것으로 추정된다.

측정 : 값을 여러번 바꿔보았으나 측정에서 유의미한 차이는 얻지 못하였다.

3)cache_size

가설 : 캐시 메모리는 뛰어난 속도를 지닌 메모리이므로 캐시 사이즈를 늘릴수록 성능이 뛰어나질 것으로 추측하였다.

측정 : 예상과 달리 기존 값 128MB에서 이를 2배로 늘리자 성능이 저하했고, 반대로 64MB로 절반으로 감소시키자 성능이 증가했다.
64mb의 cache 사이즈로 충분하며 이 이상의 사이즈 증가는 되려 overhead를 증가시키는 것으로 추정된다.

4)filter_bits

가설 : 블룸 필터의 비트 값은 디폴트로 10비트를 사용한다. 허나 이 때의 최적의 해시 개수는 10 * 0.69 = 6.9개 인데 실제론 소숫점을 없애 6이란 값을 사용하므로,
9 필터 비트에 6개의 해시를 사용한다면 false positive가 줄어 성능이 향상될 것이라 가설을 세웠다.

측정 : 비트를 10 비트에서 9 비트로 줄인 결과 큰차이는 아니였지만 약간 더 균일한 값이 나왔다.
추가로 max file size를 늘림으로써 결과값이 불규칙해졌기에 filter bits를 대폭 늘려보기도 하였으나 큰 효과는 없었다.

5)block_size

가설 : 블록 사이즈의 경우 tradeoff가 명확한 옵션이라 생각되어 default 값이 가장 적절한 값일 것이라 추정하였다.

측정 : 크게 유의미한 차이는 없었으나 default 값이 평균적으로 가장 좋은 성능을 보여주었다.

6)block_restart_interval

가설 : 블록간의 간격을 나타내는 값이므로 줄이는 것이 성능 향상에 도움이 될 것으로 추정했다.

측정 : 값을 줄이는 것이 성능 향상에 소폭 도움이 되는 경향을 보였다.

최종 결과

optionsresult
write_buffer_size128MB
max_file_size64MB
cache_size64MB
filter_bits9
block_size8KB
block_restart_interval4