고릴라(Gorilla) 시계열 압축 계산기
타임스탬프는 델타의 델타로, 값은 이전 값과의 XOR로 압축하는 페이스북 고릴라 알고리즘을 실제로 실행해 압축률과 왕복 검증 결과를 보여줍니다.
0이면 완전히 같은 값
압축률
2.5배
원본 7.81 KB → 압축 3.13 KB
사용 방법
- 1시작 타임스탬프와 간격(초), 개수를 정합니다.
- 2값의 기준선과 흔들리는 정도(잔물결 크기)를 정합니다.
- 3압축 후 크기와 압축률, 그리고 디코딩 결과가 원본과 정확히 일치하는지 확인합니다.
자주 묻는 질문
페이스북이 초당 수백만 개 지표를 다루는 모니터링 시스템을 위해 만든 무손실 시계열 압축 알고리즘입니다(VLDB 2015). 타임스탬프는 간격의 간격(델타의 델타)을, 값은 이전 값과의 XOR을 비트 단위로 압축합니다. Prometheus·InfluxDB 같은 시계열DB가 지금도 이 방식을 씁니다.
모니터링 지표는 대개 일정한 간격(예: 60초마다)으로 찍힙니다. 그러면 간격(델타) 자체는 거의 항상 같은 값이 반복되고, 그 델타의 델타는 거의 항상 0이 됩니다. 그래서 값 자체가 아니라 이 「델타의 델타」를 인코딩하면 대부분 비트 하나로 끝납니다.
연속된 측정값은 대개 비슷합니다. 두 부동소수점의 비트 패턴을 XOR하면 같은 부분은 0이 되고 다른 부분만 가운데 몰려서 남습니다. 그 앞뒤의 0비트를 빼고 진짜 다른 부분(알맹이)만 저장하면 됩니다.
값이 비슷한 정도가 일정하게 유지되면(온도 센서 잔물결처럼) XOR 결과에서 알맹이가 있는 위치도 매번 비슷합니다. 그러면 매번 위치 정보를 새로 적을 필요 없이, 바로 앞에서 썼던 위치 정보를 그대로 재사용하고 알맹이 비트만 이어 붙이면 되어 더 절약됩니다.
아닙니다. 값이 완전히 무작위로 흩어져 있으면 XOR 결과에 규칙이 없어 압축 효과가 거의 없거나 오히려 원본보다 커질 수 있습니다. 일정한 간격의 타임스탬프와 서서히 변하는 값(센서 데이터, 지표 모니터링)일 때 효과가 큽니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- Pelkonen et al., "Gorilla: A Fast, Scalable, In-Memory Time Series Database"(VLDB 2015)의 정의(델타의 델타 버킷 구간, XOR 후 선행·후행 0비트 계산, 이전 창 재사용 규칙)를 그대로 구현했습니다.
- 일정한 간격의 타임스탬프, 서서히 흔들리는 값, 완전히 들쭉날쭉한 값, 원소 0·1·2개 경계까지 인코딩→디코딩 왕복이 원본과 정확히 일치하는 것을 테스트로 확인했습니다(2026-09-05).
- 이 데모는 블록 경계(원 논문의 4시간 단위 헤더)를 가정하지 않아 첫 델타를 32비트 고정 폭으로 저장합니다. 선행 0비트 수는 5비트 필드(0~31)로 제한하는 원 논문·실제 구현(Prometheus 등)의 규칙을 그대로 따랐습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 5일 · 결과는 참고용 추정치입니다.