문제

내 응용 프로그램에서 많은 반복 문자열 값 (XML 문서의 엔티티 이름을 생각)을 포함하는 데이터를 저장하고 전송해야합니다. 제안 된 두 가지 솔루션이 있습니다.

  • a) 문서를 따라 저장할 문자열 테이블을 작성한 다음 문서 본문에서 인덱스 참조 (멀티 바이트 인코딩 사용)를 사용하거나 또는
  • b) GZIP 또는 유사한 압축 알고리즘을 사용하여 문서를 압축하기 만하면됩니다.

속도와 데이터 크기 측면에서 어느 것이 더 잘 수행 될 수 있습니까? (분명히 이것은 구현의 품질에 따라 다르지만 옵션 A는 문자열 배열을 동적으로 구축하고 문서 본문을 어떤 방식으로 인코딩한다고 가정합니다)).

또한 옵션 B 인 경우 GZIP 이외의 더 적합한 압축 방법을 권장합니까?

도움이 되었습니까?

해결책

GZIP는 CPU 시간 비용에 비해 전송/저장 비용이 너무 높지 않은 경우에만 좋은 알고리즘입니다. BZIP2, 7ZIP 및 특히 자연 언어를 사용하여 더 나은 압축 비율을 얻을 수 있습니다. ppm 알고리즘.

물론, 그것은 중요한 계산 (및 정적 대 동적 메모리 요구 사항)과 압축 비율이 중요 할뿐만 아니라 다양한 압축 형식은 다양한 정도의 효율적인 임의 액세스 찾기, 낮은 대기 시간 스트림 디코딩 및 지핑 데이터의 연결을 허용합니다 (EG cat a.gz b.gz | gunzip -c 와 같다 gunzip -c a.gz;gunzip -c b.gz

다른 팁

단순히 GZIP를 사용하는 것은 확실히 가장 쉽고 충분할 것입니다. 스트링 테이블을 시도한 다음 gzip 단독보다 약간 더 나은 압축이 있는지 확인하는 것이 좋습니다.

그것은 당신의 게시물에서 다루지 않은 많은 것들에 의존 할 것입니다.

구현하기 쉬운 Zip 메소드를 먼저 시도해 보지 않겠습니까? 그런 다음 속도/압축 요구 사항을 충족하면 다음 기능으로 이동할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top