2011년 인스타그램 블로그에 쓰여진 글이지만, 여전히 시사하는 바가 커서 내용을 공유한다.

http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value



인스타그램(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은 메모리 효율화는 되지 않지만, 속도하나만큼은 안정적으로 쓸 수 있다. 




Posted by '김용환'
,