Contenu connexe
Similaire à 대규모 서비스를 지탱하는 기술 ch6 (10)
대규모 서비스를 지탱하는 기술 ch6
- 4. 정수 데이터를 컴팩트하게 가져가기
- 디스크 I/O를 줄일 수 있다.
- RDBMS의 늘어나는 데이터 크기를 줄일 수 있
다.
- 거대한 정수열을 다룰 때 용이
- 6. 정수열을 압축하는 알고리즘
- Unary code
- Gamma (g) code
- Delta (d) code
- VB Code (Variable Byte Code)
*문자열은 Huffman
- 8. Gap의 활용
[3, 5, 20, 21, 23, 76, 77, 78]
=> [3, 2, 15, 1, 2, 53, 1, 1 ]
- 작은 값이 많아지고 큰값이 적어짐
- 치우친 정도에 따라 압축효과가 다르다
- 12. VB Code로 바꿔보면..?
0 ≤ x < 128 : 1byte (2^(8-1))
128 ≤ x < 16384 : 2bytes (2^(2(8-1)))
16384 ≤ x < 2097152 : 3bytes (2^(3(8-1)))
- 15. 인코딩
def vb_encode(number):
bytes = []
while True:
bytes.insert(0, number % 128)
if number < 128:
break
number /= 128
bytes[-1] += 128
return pack('%dB' % len(bytes), *bytes)
- 16. 디코딩
def vb_decode(bytestream):
n = 0
numbers = []
bytestream = unpack('%dB' % len(bytestream), bytestream)
for byte in bytestream:
if byte < 128:
n = 128 * n + byte
else:
n = 128 * n + (byte - 128)
numbers.append(n)
n = 0
return numbers
- 20. - Unary code
n / n-1 0
n=1, 0
n=3, 110
n=9, 111111110
- 간단하고 빠르다.
- n이 크다면..? 글쎄?...