snappy는 구글에서 개발한 고속압축 라이브러리임.

압축률은 조금 떨어지지만 빠르게 압축/해제할 수 있도록 하여 "대강 압축해서 네트워크로 빨리 보내는 용도"로 개발된 라이브러리.

Core i7 64비트 싱글코어에서 초당 250MB 이상 압축할 수 있고, 초당 약 500MB의 압축해제가 가능하다고 한다.


딱 보면 여러대의 서버로 클러스터를 구성하여 각 서버간의 대용량 데이터 이동이 잦아서 CPU 보다 network I/O가 병목인 경우 CPU를 조금 더 쓰면서 network I/O를 줄이기 위한 용도로 쓰기 좋은 라이브러리다.

Hadoop이나 MongoDB(WiredTiger)에서도 사용한다.


PHP 라이브러리가 있길래 설치해서 테스트 해봤다.


[설치]

1. https://github.com/kjdev/php-ext-snappy <- 여기서 최신버전을 받음

2. 압축을 해제하고 아래와 같이 기본적인 php extension 빌드를 실행

(만약 PHP 버전이 5.3.7 미만이라면 참조: [PHP] extension 빌드시 ZEND_FE_END undeclared 에러 발생)

phpize

./configure

make

make install

3. php.ini에 snappy extension 지정

extension=snappy.so


[사용]

함수는 달랑 2개다.

// 압축
$compress = snappy_compress($string_data);
// 압축해제
$uncompress = snappy_uncompress($compress);


[테스트]

성능이 대박 처지는 가상서버에서 테스트를 해봤다.

php.ini 파일을 읽어들여서 100MB가 될 때까지 이어 붙여 저장한 텍스트 파일을 원본 문자열로 하고,

압축시 걸리는 시간은 평균 1.991초,

압축된 문자열의 사이즈는 48MB (50% 이상의 압축률)

압축해제시 걸리는 시간은 평균 0.648초.







Posted by bloodguy
,