작은 비트 수의 경우 Glorfindel이 지적한 것처럼 많은 비트를 저장하는 것은 불가능합니다 . 그러나 사용중인 도메인에 비트가 몇 개 더 있으면 시작 값과 델타로 범위를 인코딩하여 평균 사례를 크게 절약 할 수 있습니다.
도메인이 정수이므로 32 비트라고 가정하겠습니다. 순진한 접근 방식으로 범위를 저장하려면 64 비트 (시작, 끝)가 필요합니다.
(start, delta) 인코딩으로 전환하면 그 범위의 끝을 구성 할 수 있습니다. 최악의 경우 시작은 0이고 델타는 32 비트입니다.
2 ^ 5는 32이므로 델타의 길이를 5 비트 (0 길이 없음, 항상 1 추가)로 인코딩하면 인코딩은 (시작, 길이, 델타)가됩니다. 최악의 경우, 32 * 2 + 5 비트이므로 69 비트입니다. 최악의 경우 모든 범위가 길면 순진 인코딩보다 나쁩니다.
가장 좋은 경우에는 32 + 5 + 1 = 38 비트가 필요합니다.
즉, 많은 범위를 인코딩해야하고 해당 범위가 각각 도메인의 작은 부분에만 적용되는 경우이 인코딩을 사용하면 평균적으로 더 적은 공간 을 사용하게됩니다. 시작에 항상 32 비트가 걸리기 때문에 시작이 어떻게 분배되는지는 중요하지 않지만 범위의 길이가 어떻게 분배되는지는 중요합니다. 길이가 짧을수록 압축률이 높을수록 도메인의 전체 길이를 포괄하는 범위가 많을수록이 인코딩이 더 나빠집니다.
당신이 가지고있는 경우, 많은 유사한 시작점 주위 그룹화 범위를 (예를 들어 당신이 센서의 값을 얻을 수 있기 때문에), 당신은 더 큰 절감 효과를 얻을 수 있습니다. 동일한 값을 시작 값에 적용하고 바이어스를 사용하여 시작 값을 오프셋 할 수 있습니다.
범위가 10000이라고 가정하겠습니다. 범위는 특정 값을 기준으로 그룹화됩니다. 바이어스를 32 비트로 인코딩합니다.
순진한 접근 방식을 사용하면 모든 범위를 저장하려면 32 * 2 * 10 000 = 640 000 비트가 필요합니다.
바이어스 인코딩에는 32 비트가 필요하며 각 범위를 인코딩하는 데 가장 적합한 경우 5 + 1 + 5 + 1 = 12 비트가 사용되며 총 120 000 + 32 = 12032 비트가됩니다. 최악의 경우 총 740 032 비트에 5 + 32 + 5 + 32 비트가 필요하므로 74 비트가 필요합니다.
이는 인코딩에 32 비트가 걸리는 도메인의 10,000 값에 대해
- 최상의 경우 스마트 델타 인코딩을 사용한 12032 비트
- 순진한 시작, 끝 인코딩을 사용하는 640 000 비트 (항상 최상의 경우는 없음)
- 최악의 경우 스마트 델타 인코딩으로 740 032 비트
순진한 인코딩을 기준으로 삼 으면 최대 81.25 % 또는 최대 15.625 % 더 많은 비용을 절약 할 수 있습니다.
귀하의 가치가 어떻게 분배되는지에 따라, 이러한 절감 효과는 상당합니다. 귀하의 비즈니스 도메인을 알고 계십시오! 인코딩하려는 것을 알고 있습니다.
확장으로 바이어스를 변경할 수도 있습니다. 데이터를 분석하고 값 그룹을 식별하는 경우 데이터를 버킷으로 정렬하고 각 버킷을 고유 한 바이어스로 개별적으로 인코딩 할 수 있습니다. 즉,이 방법을 단일 시작 값을 기준으로 그룹화 된 범위뿐만 아니라 여러 값을 기준으로 그룹화 된 범위에도 적용 할 수 있습니다.
시작점이 균등하게 분배되면이 인코딩이 실제로 제대로 작동하지 않습니다.
이 인코딩은 인덱스하기에 매우 나쁘다. 단순히 x 번째 값을 읽을 수 없습니다. 순차적으로 만 읽을 수 있습니다. 네트워크 또는 벌크 스토리지 (예 : 테이프 또는 HDD)를 통한 스트리밍과 같은 일부 상황에 적합합니다.
데이터를 평가, 그룹화 및 올바른 바이어스를 선택하는 것은 상당한 작업 일 수 있으며 최적의 결과를 얻으려면 약간의 조정이 필요할 수 있습니다.