streaming 으로 map/reduce를 하면서 STDIO 를 통해 문자열 와리가리를 하던 중,
reduce 스테이지에서 램 사용량도 적으면서 CPU 로드만 엄청나게 높이고,
당최 reduce 진행이 안되는 상황에 직면하여 이리저리 보던중,
reduce에서 루프를 통해 STDIN 을 읽을 때 들어오는 문자열 1라인이 엄청 커서 문제가 있다고 진단했다.
(물론 그 문자열은 delimiter 로 잘라서 또 루프를 돌며 뭔가를 한다...)
그래서 어떻든 문자열의 길이를 한 번 줄여보자 싶어서 문자열 압축을 하려고,
map 스테이지에서 reduce로 넘길 때 gzencode 를 써서 압축을 해서 넘기고,
reduce 스테이지에서 gzdecode 를 이용해 압축을 해제한 다음 작업을 하려고 했는데,
gzdecode() 라는 함수가 없다는 에러가 나왔다.
아니 이게 무슨 소리냐고,
encode 는 있는데 decode 가 없는 병신같은 상황이 말이 되냐고 구글신에게 문의해 본 결과,
아직 zlib 의 모든 함수가 PHP로 완벽하게 이식된 상황이 아니라는 결론을 얻었다.
gzdecode는 PHP6 에서 추가될 예정.
이리저리 둘러보다 단순 문자열의 경우 header랑 footer를 떼고 간략하게 압축해제할 수 있는 함수를 얻었다.
zlib 압축 알고리즘을 까보는 수고를 하고 싶지는 않아서 100%인지 확인은 못했으나 대략 내가 테스트 해본 건 되는 듯.
참조: http://www.php.net/gzdecode
function gzdecode($data)
{
return gzinflate(substr($data, 10, -8));
}
'PHP' 카테고리의 다른 글
[PHP] 지역변수, 클래스 멤버변수에 배열대입시 시간 (local variable, class member) (0) | 2012.09.07 |
---|---|
[PHP] Jaccard's coefficient를 위한 intersect, union 구하는 방법. (0) | 2012.08.29 |
[PHP] 이미지 바이너리 데이터 가져와서 <img> 태그를 이용해 출력하기. (0) | 2012.08.26 |
[PHP] 흥미도 측정 (Interestingness measure) (2) | 2012.05.16 |
[PHP] date('W') 의 버그(?) (0) | 2012.05.11 |