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초.
'PHP' 카테고리의 다른 글
[PHP] MongoDB - shard keys must be less than 512 bytes 에러 (2) | 2017.06.02 |
---|---|
[PHP] Windows에서 COM 이용하여 InternetExplorer 실행/제어하기 (0) | 2016.09.08 |
[PHP] extension 빌드시 ZEND_FE_END undeclared 에러 발생 (0) | 2015.11.25 |
[PHP] 각종 평균 구하기 (average, mean, median, mode, midrange, trimmean) (0) | 2015.06.03 |
[PHP] linux shell의 clear 명령어 구현 (0) | 2015.03.12 |