Redis
[redis] 인스타그램에서의 hash, string 비교
'김용환'
2015. 12. 23. 09:42
2011년 인스타그램 블로그에 쓰여진 글이지만, 여전히 시사하는 바가 커서 내용을 공유한다.
인스타그램(Instagram)은 3 억건의 media ID로 user ID를 저장해야 하는 사례가 있었다.
이를 위해 인스타그램은 테스트를 진행했다. String과 Hash를 이용하여 레디스 프로토타입을 Pieter Noordhuis의 도움을 받아 벤치마크했었다.
String을 이용할 때는 미디어 ID 당 하나의 키와 약 21GB의 메모리를 사용했다.
Hash를 이용할 때는 일부 설정(hash-zipmap-max-entrie)을 수정하여 약 5 GB를 사용했다. (https://github.com/antirez/redis/blob/unstable/src/zipmap.c)
*참고
redis의 hash에 대한 메모리 최적화는 http://redis.io/topics/memory-optimization를 참조할 수 있다.
ziplist는 메모리 효율화를 위해 만들어졌다. ziplist에 저장되는 숫자는 문자가 아닌 integer로 저장되기 때문에 메모리 효율이 좋게 만들어졌다. 하지만 검색 속도가 느릴 수 있다. (안 좋게 말하면 hashtable보다 cpu를 훨씬 더 사용할 수 있다.)
대신 hash table은 메모리 효율화는 되지 않지만, 속도하나만큼은 안정적으로 쓸 수 있다.