Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

대규모 서비스를 지탱하는 기술 ch6

415 views

Published on

대규모 서비스를 지탱하는 기술 ch6

Published in: Education
  • Be the first to comment

대규모 서비스를 지탱하는 기술 ch6

  1. 1. CH6. 압축 프로그래밍
  2. 2. 왜 압축인가..?- 압축과 I/O의 고속화- VB Code(Variable Byte Code)알고리즘
  3. 3. 정수 데이터를 컴팩트하게 가져가기[과제] 정수열이 기록된 CSV를 바이너리로 해서컴팩트하게 가져가기
  4. 4. 정수 데이터를 컴팩트하게 가져가기- 디스크 I/O를 줄일 수 있다.- RDBMS의 늘어나는 데이터 크기를 줄일 수 있다.- 거대한 정수열을 다룰 때 용이
  5. 5. 다룰 데이터 파일Google adsense 5406393,11616303issue tracking 541878
  6. 6. 정수열을 압축하는 알고리즘- Unary code- Gamma (g) code- Delta (d) code- VB Code (Variable Byte Code)*문자열은 Huffman
  7. 7. Gap의 활용[3, 5, 20, 21, 23, 76, 77, 78]=>*오름 차순 정렬
  8. 8. Gap의 활용[3, 5, 20, 21, 23, 76, 77, 78]=> [3, 2, 15, 1, 2, 53, 1, 1 ]- 작은 값이 많아지고 큰값이 적어짐- 치우친 정도에 따라 압축효과가 다르다
  9. 9. 일반적인 숫자의 표현(4bytes)
  10. 10. 일반적인 숫자의 표현(4bytes)
  11. 11. VB Code로 바꿔보면..?
  12. 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)))
  13. 13. 인코딩def vb_encode(number):bytes = []while True:bytes.insert(0, number % 128)if number < 128:breaknumber /= 128bytes[-1] += 128return pack(%dB % len(bytes), *bytes)
  14. 14. 디코딩def vb_decode(bytestream):n = 0numbers = []bytestream = unpack(%dB % len(bytestream), bytestream)for byte in bytestream:if byte < 128:n = 128 * n + byteelse:n = 128 * n + (byte - 128)numbers.append(n)n = 0return numbers
  15. 15. 다른 압축 알고리즘들- Unary code- Gamma (g) code- Delta (d) code
  16. 16. - Unary code- n을 인코딩을 한다면 (n-1)만큼의 1과 0이 따라온다.
  17. 17. - Unary coden / n-1 0n=1, 0n=3, 110n=9, 111111110
  18. 18. - Unary coden / n-1 0n=1, 0n=3, 110n=9, 111111110- 간단하고 빠르다.- n이 크다면..? 글쎄?...
  19. 19. refhttps://gist.github.com/utahta/747472

×