본문 바로가기

etc infomation

초고속 알고리즘

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=52&MAEULNo=20&no=50277&ref=50277

http://encode.ru/threads/1253-LZO-Professional-and-SNAPPY-VERY-FAST-COMPRESSION-are-released

대용량 데이터 처리시 I/O가 보틀넥이 되는 경우가 있습니다.

예를 들어, 8000x8000 픽셀 크기 .raw 사진을 초고속으로 수천장 처리하는 영상처리 시스템이다.

이때 여러가지 방법을 생각해볼 수 있는데, 확장성을 고려하여 멀티 서버 구조로 간다고 하면 데이터 전송이 문제입니다.
요즘 뭐 10G 네트워크 지원 제품들도 많이 나오고 있긴 한데 아직 좀 고가고, 1G 기반 망이면 이론적 최고치가 초당 120MB/s 밖에 안됩니다. 실제로는 30~60% 정도밖에 안나오죠.

하지만 이런 경우에 CPU 자원에 약간 여유가 있다면 데이터 입출력을 압축해서 처리함으로써 전체적인 성능을 올릴 수 있다는 겁니다.
예를 들어, 압축율이 50%만 나와주면 처리 성능(throughput)이 2배 올라가는 상황이 생길 수 있습니다.

위 첫번째 링크에도 비슷한 맥락의 얘기가 있습니다.
2kb 데이터를 전송할 때 압축해서 전송하는 게 더 빠르다.. 뭐 그런거죠.

실제로 이런 걸 좀 해봤는데.. 역시 소문과 실재는 좀 다르더군요 ㅋ
일반적인 압축 알고리즘들은 대체로 압축율을 중시하고, 성능도 compress 보다는 decompress에 초점을 맞추는 경우가 많기 때문에 실시간 데이터 처리에는 사용하기 힘듭니다. 뭐 zlib나 gzip을 옵션을 조정해서 적용하면 좀 빨라지기는 하는데 기본적으로 한계가 있습니다.

그래서 좀 찾아보니 아예 초고속 압축이 따로 있더군요.

google snappy
http://code.google.com/p/snappy/

LZO
http://www.oberhumer.com/opensource/lzo/

LZO 같은 경우는 펜티엄 기준으로 memcpy 속도가 60MB/s인데 LZO 압축 속도가 5MB/s 나온다고 합니다.
미친듯이 빠른 거죠.

그런데 위 두번째 링크를 보면 구글 snappy도 LZO 못지않게 성능이 좋다고 합니다.
LZO가 나온지도 오래됐고, 자타가 공인하는 최고속도 라이브러리 였는데
구글에서 snappy를 만들면서 좀 밀리고 있는 게 아닌가 싶네요.

특히, LZO는 GPL 라이센스를 쓰거나 별도 상용 라이센스를 구입해야 하는 반면
snappy는 아파치 라이센스이므로 거의 공짜나 다름 없습니다.
대세는 snappy?

결론은 snappy가 좋다. 이거군요 ㅎㅎ



출처 : http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8540&page=3


일단 뭔소린지 잘 모르겠다. 인덱싱 해놨다가 필요할 때 읽고 분석 해봐야겠음.