우리의 응용 프로그램은 클라이언트가 구성한 규칙의 구조에 따라 데이터를 처리합니다. 처리하는 동안 모든 단계에서 상세한 "로그"가 생성되므로 사용자가 최종 처리 결과 뒤에있는 이유 &의 논리를 이해하고 어떤 한계 (또는 규칙 또는 기타)가 발생했는지 이해할 수 있습니다.SQL 용 중복 텍스트 데이터 압축. 고정 된 사전?
어떻게이 데이터를 DB에 저장 하시겠습니까?
데이터의 95 % 이상이 하나의 로그 레코드에서 다음 로그 레코드까지 중복 될 수 있습니다. 나는 100 개의 레코드에서 결합 된 텍스트에 대해 LZMA를 실행했으며 출력은 2 %의 크기였습니다.
텍스트는 기본 키로 표시하기 위해 검색됩니다. 필터링이나 검색 목적으로는 절대로 질의되지 않습니다. 텍스트는 각 레코드에 대해 평균 약 25k입니다.
각 레코드의 텍스트를 압축하면 압축률이 10 % ... 2 %인데 비해 100 개 레코드가됩니다.
이상적으로 말하면 방대한 양의 기존 데이터에서 생성 된 일종의 고정 사전을 사용하고 싶습니다.
우리는 SQL 2005를 사용하고 있습니다. SQL 2008에 행 & 페이지 수준 압축 옵션이 있습니다. 그러나 전체 고객 기반을 업그레이드하는 것은 현재로서는 불가능합니다.
생각하십니까? 덕분에 !
업데이트 : 다음은 내가 수행 한 작업입니다. 실험을 읽는 1 주일 후, 나는 1000 개의 레코드가 결합 된 텍스트에 LZW 스타일 문자열 사전을 생성하는 절차를 작성했습니다. 그런 다음 다양한 방법으로 사전에 우선 순위를 매겼습니다. - 전체적으로 예상되는 비용 절감 (대체를 통해 바이트 단위) - 레코드 당 1 회 이하의 사전 항목 만 포함하는 예상 절감액.
샘플 레코드에서 가장 높은 우선 순위 X (100 & 1000 사이) 사전 항목을 단순 대체했습니다. 그런 다음 LZMA alg를 사용했습니다. 인코딩 된 출력을 압축합니다.
사전에 대해 다른 구성으로 재생하면 ... 나는 기껏해야 LZMA 압축을 약 1 % 향상시킬 수 있음을 발견했습니다. 대부분의 경우 엔 엔트로피를 더 많이 도입하기 때문에 인코딩 된 LZMA 압축 데이터는 이 더 큰 w/LZMA로 압축 된 것보다 큽니다.
LZMA에서 악용 될 수있는 각 레코드의 텍스트 내에 행 사이에있는 것보다 더 많은 중복이 있음을 확인했습니다.
아마도 나는 모든 텍스트를 LZMA하고 하루 만 부릅니다.
+1 큰 질문! –
은 로그의 전체 행을 다시 사용합니까? 또는 작은 차이가있는 대부분 같은 줄이 있습니까? 다시 말해, 한 로그 항목에서 다른 항목으로 동일한 정확한 텍스트를 다시 사용할 수있는 기회가 있습니까? – Randy
대부분 같은 텍스트입니다 .. 약간의 차이점이 있습니다. 예를 들어 ... 각 레코드에 "2008 년 연간 제한 계산 : $ xx.xx 발견"또는 "월간 최소 $ 300. 처리 중단"과 같은 줄이있을 수 있습니다. 날짜, 달러, 중단/계속 변경됩니다. –