성능관련 비교자료는 많으나 두가지가 추구하는 방향에 대한 비교자료는 많지 않은 것 같아 자료를 조사하고 정리할 예정임.
(벤치마크는 여러가지 환경요소에 따라 얼마든지 결과는 달라질 수 있다고 생각하기 때문에 결과보다도 테스트 환경을 유심히 봐야 한다. 서버환경, 클라이언트 환경, 그리고 개발하고자 하는 어플리케이션에서 필요한 캐시의 형태, 및 크기에 따라 얼마든지 달라질 수 있다.)
먼저 google trends 를 통해 확인(트랜드는 현재도 중요하지만 미래를 위해 - 레퍼런스가 많아지고 버그 및 기능향상이 활발해질 것이므로)
아래는 redis 와 memcached 와 memcachedDB 에 대한 비교자료이다.
(출처 : http://redis4you.com/articles.php?id=003 )
Redis vs Memcached comparison
Here is basic comparison of Redis, Memcached and Memcachedb.
Redis | Memcached | MemcacheDB | ||
---|---|---|---|---|
In Memory | 지원 | 지원 | ||
Virtual Memory | Deprecated | 지원 | Database save the data on disk if memory is not enought. | |
Persistent | 지원 | 지원 | Database backup the data on disk from time to time. | |
Atomic | 지원 | 지원 | 지원 | |
Consistent | 지원 | 지원 | 지원 | Changes are consistent and immediate. |
Replication | 지원 | 확인불가 | Master - Slave replication. | |
Authentication | 지원 | 확인불가 | 확인불가 | Login with password. |
Key / Value | 지원 | 지원 | 지원 | |
Key Enumeration | 지원 | 확인불가 | Most Key / Value databases can not enumerate keys e.g. Redis KEYS command. | |
Key / Value "buckets" | 지원 | 확인불가 | Redis sets can be used as "buckets". | |
Data Structures | 지원 | Redis supports hashes, lists, sets, sorted sets and more. | ||
Channel Pub/Sub | 지원 | Basic message queue implementation. | ||
Memory usage | 10-20% Smaller | |||
Speed | Slightly Faster | Very Slow |
아래는 Python/Django 에서의 writes/reads 비교자료이다.
(출처 : http://coder.cl/2011/05/comparing-redis-and-memcached/ )
현재 내 프로젝트에 있어서 고려해야 할 환경은 아래와 같다.
1. write 보다 read 의 성능이 우선 ( write : read 의 비율은 1: 수만~수백만 이 될 수 있다 )
2. key/value 의 형태는 String/String(Json String) 으로 value 의 사이즈는 1kbyte 이하임.
3. 현재는 알 수 없지만 향후 발생하는 thread 수에 있어서 성능저하가 얼만큼 발생하는지 확인이 필요
4. node.js 를 통해 웹서비스를 구축할 예정이므로, node.js 에서의 성능이 좋아야 함.
5. cache 데이터에 대한 안정성은 크게 중요하지 않음. (캐시가 날라가도 어플리케이션에 critical 하지 않음)
6. 단독 캐시시스템으로 구축할 예정임(분산환경이 불필요할 수 있음)
7. 전체 캐시 크기가 서버시스템 하나의 리소스(8GByte)를 넘어가지 않을 것으로 판단됨(replication도 불필요할 것으로 예상)
개인적으로 memcached 는 이미 경험이 있어 memcached 가 더 낳을 것으로 판단하고 있었으나, 다음 Article 이 성능지상주의의 욕구를 일으키며 redis 에 대해 미련을 갖게 만듬.
Java development 2.0: 현실적인 Redis
읽기 동작이 많은 애플리케이션에서는 Redis가 Memcached보다 우수한 이유
(원문 : http://www.ibm.com/developerworks/kr/library/j-javadev2-22/index.html?ca=drs- )
아무튼 redis 는 경험이 전무하므로 테스트 개발을 통해서라도 경험이 필요할것 같다.
Redis는 "REmote DIctionary System"의 약자로 메모리 기반의 Key/Value Store 혹은
Cassandra나 HBase와 같이 NoSQL DBMS로 분류되기도 하고, memcached와 같은 In memory 솔루션으로 분리되기도 한다고 함.
따라서 현재 구축하려는 시스템에서는 in-memory cache 가 필요하므로 redis 적용시 in-memory cache 로서의 architecture 를 봐야 할 것으로 판단됨.
참고자료
http://redis4you.com/articles.php?id=003
http://coder.cl/2011/05/comparing-redis-and-memcached/
http://knight76.tistory.com/entry/Memcached와-Redis-성능-테스트-비교-자료
http://bcho.tistory.com/654
네이버 미투데이에서의 응용 : http://www.slideshare.net/sdec2011/sdec2011-arcus-nhn-memcached-cloud-8467157
http://knight76.tistory.com/1393
http://www.ibm.com/developerworks/kr/library/j-javadev2-22/index.html?ca=drs-