2012-04-02

NoSQL 조사

NoSQL DB 비교라는 문서를 기준으로 각 데이터베이스의 특성을 간략 조사해봤다.

mongodb

10gen 이라는 회사에서 운영. 오픈 소스. 컬럼 그룹 기반.

  • C++ based
  • SQL과의 호환성(쿼리, 인덱스)
  • protocol: BSON & custom
  • storage: memory mapped file
  • sharding
  • query: javascript expression
  • server script: javascript
  • 다이나믹 쿼리가 필요한 경우
  • map/reduce 보다 index 가 많은 경우
  • 데이터가 많을 때 성능이 중요한 경우
  • couch db 에 비해서 데이터가 자주 변하는 경우

Riak

  • Erlang & C (+ JS) based
  • fault tolerance 가 최우선
  • Protocol: HTTP/REST
  • map/reduce: by JS & Erlang

CouchDB

  • Erlang based
  • DB 안정성이 최우선. 손쉬운 사용.
  • Protocol: HTTP/REST
  • 자주 바뀌지 않는 데이터
  • 데이터 버전관리가 중요한 경우
  • ex> CMS, CRM

Redis

key-value store. github, disqus, digg, stackoverflow 에서 사용중이다.

특징

  • C/C++ based
  • 속도가 최우선
  • Protocol: telnet like?
  • disk backed in memory db ??
  • disk swap 지원 안함
  • set, list, hash, sorted set 등 다양한 타입 지원
  • 트랜잭션도 있다..
  • 데이터 용량 == 메모리에 올라 갈 정도의 크기여야 한다
  • 자주 데이터가 바뀌지만 크기는 예측 가능한 분야에 적절
  • ex> 주가, 분석, 실시간 데이터, 실시간 통신..

데이터 안정성

via 스냅샷

저장 방식
  • RDB(snapshot): 큰 파일 하나에 DB 전체를 저장.
  • AOF(Append Only File): 변경 사항(command)을 로그 파일에 계속 추가함. 서버가 뜰 때 이걸 쭈욱 읽어서 원본 데이터를 만들어낸다.
  • 둘 다 끄면 캐시 모드가 됨. 서버 끄면 사라짐.
  • 둘 다 적용하면, 마지막 rdb 다음부터의 AOF 를 읽어서 만들어냄
RDB 의 장점
  • 특정 시각의 데이터를 하나의 파일에 담았다
  • 백업/복구에 용이: 주기적으로 RDB를 만들어서 외부에 백업하기 쉽다
  • 성능면에서 최고
  • 빠른 재시작
RDB 단점
  • 데이터 손실 가능성: 파워 나감
  • 주기적으로 여러 RDB를 만들어야 된다.
  • 저장할 때마다 fork 한다. 이때 I/O 가 멈추거나 CPU가 스파이크 친다.
  • 물론 AOF 도 fork 를 하긴 한다.. 대신 조정이 가능.
AOF 장점
  • 보다 안정적. fsync 정책을 튜닝 가능(매 초마다, 모든 쿼리 마다)
  • 기본 정책은 1초마다. 백그라운드 쓰레드가 실행함.
  • append only 라서 데이터 커럽션이 없다. 마지막 데이터가 깨질 경우에도 쉽게 고칠 수 있다.
  • 로그가 너무 커지면 자동적으로 다른 파일로 분할한다.
  • 로그 포맷이 이해하기 쉽다.
AOF 단점
  • RDB 보다 파일 용량이 크다
  • RDB 보다 느리다
  • 데이터가 꼬일 확률이 존재한다. 과거에 그런 버그가 있었다. 근데 아직 버그 리포트는 없다.
결론
  • 둘 다 사용해야 함
  • 스냅샷: dump.rdb 를 남김.
  • 초 단위 주기. 또는 데이터셋의 변화량 단위.
    ex> save 60 1000 === 60초 마다, 1000 개의 변화 마다
  • fork 해서 자식 프로세스가 dump.rdb 를 저장하면 기존 파일을 변경
  • AOS:

cassandra

페이스북이 개발해서 오픈소스화. 지금은 아파치에서 관리중. 페이스북/트위터/Digg 에서 사용. 컬럼 그룹 형태의 데이터 모델. 데이터 일관성 잘 지원한다.

  • 자바 기반
  • 읽기 보다는 쓰기를 많이 할 때
  • 모든 컴포넌트가 다 자바일때
  • 은행, 금융.

couchbase(membase)

via Features

membase 가 couchbase 로 통합됨

  • Erlang & C 기반
  • memcache 호환성 + 영속성 + 클러스터링 이 중요
  • 존나 빠름
  • 디스크 영속성
  • web GUI
  • DB를 끄지 않고 업그레이드 가능
  • 데이터 접근 속도가 중요할 때, 많은 접근이 있을 경우, 높은 가용성 필요할 때
  • 징가 같은 highly concurrent web app

HBase

  • google big table 의 오픈 소스 클론

총평

유력한 후보들

  • mongodb: 팔방미인. blob
  • redis: 로그 & 캐시
  • couchbase(membase): 메모리 기반 but 용량 한계. 근데 node.js 클라 없다.

무시할 놈들

  • couchdb: 데이터가 자주 바뀐다…
  • cassandra: 자바 기반
  • riak: 머임..
  • hbase: 즐..
Category:programming
Tags:nosql

comments powered by Disqus