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은 메모리 효율화는 되지 않지만, 속도하나만큼은 안정적으로 쓸 수 있다.
'Redis' 카테고리의 다른 글
[Redis] DBSIZE 커맨드 (0) | 2016.01.14 |
---|---|
[redis] info 커맨드 (0) | 2016.01.14 |
[redis] Lua의 무한 루프 실행시 대처 방법 (0) | 2016.01.11 |
[redis] pfadd - WRONGTYPE Key is not a valid HyperLogLog string value. (0) | 2015.12.29 |
[redis] redis list를 큐로 사용하는 시스템 (0) | 2015.12.21 |