RDBMS? NOSQL?
- 데이터의 읽기 쓰기 등 퍼포먼스에 치중한다면 NOSQL, 트랜잭션과 같은 정합성 위주의 시스템을 사용한다면 RDBMS
- RDBMS 컬럼 변경 용이하지 않음, NOSQL 컬럼 변경 용이
- NOSQL의 경우 sorting, join, grouping, range query, index 매우 취약
- RDBMS 학습 비용 x
- NOSQL 학습 비용 소요 (운영시 어떤 장애상황이 생길지 예측이 어려움)
- NOSQL 가장 큰 장점 (Scale-Out, RDBMS보다 상대적으로 빠른 쓰기/읽기)
NOSQL 분류
[ 키 밸류형 ] redis, memcached, Oracle Coherence
[ 컬럼형 ] Cassandra, HBASE, Cloud Datastore
[ 문서형 ] MongoDB, Couchbase, MarkLogic, PostgreSQL, MySQL, DynamoDB MS-DocumentDB
[ 그래프형 ] Neo4j
DataStore | 설 명 | 장 점 | 단 점 |
---|---|---|---|
Cassandra | - Facebook에 의해 2008년 아파치 오픈소스로 공개된 분산 데이터 베이스 (자바 언어 기반) - 컬럼 단위로 관리되어 컬럼형으로 분류 - 대용량의 데이터 트랜잭션에 대해 고성능 처리가 가능(실제 트위터 MYSQL -> Cassandra로 전환) |
- 대량으로 쓰기가 발생하는 서비스에 좋음 - 확장성이 뛰어남 - Apache Foundation에서 개발중이며커뮤니티 활발 - Scale-Out |
- 최소 3대 이상 구성(클러스터 환경) - 복잡한 조건 검색 불가 - 데이터 갱신 및 입력시 Atomic한 처리가 힘듬 |
HBase | - 대량 데이터를 우수한 성능으로 데이터 일관성을 보장하면서 다뤄야 할 때 주로 사용 - 대량 데이터 분석 및 처리를 위해 사용되는 Hadoop의 산하 프로젝트로 시작된 데이터베이스 (HDFS 및 MapReduce등과 함께 사용하기에 최적화) - 수십 테러바이트가 넘는 빅데이터에 적합 |
- 하둡 기반에서 동작하고 다양한 하둡 의 도구들과 상호 운영성이 좋음 - 데이터 일관성 보장 우수(상대적) |
- 5대 미만에서는 사용할 수 없다(대규모 전용) - 성능이 좋진 않다 (상대적) |
MongoDB | - MongoDB는 10gen 사에서 개발된 높은 성능과 확장성을 가지고 있는 데이터베이스 - NoSQL 데이터베이스에서는 문서형 데이터베이스로 분류(C언어 기반) - 데이터를 입력할때 데이터 구조 정보를 포함하여 BSON(JSON을 바이너리화한것)형식으로 저장하고, key value로 사용 - NON-SCHEMA -비정형 데이터, 파일 데이터등의 스키마프리(Scheme free)모델에서 적합 - SQL 과 비슷한 방식의 쿼리 사용 |
- 스키마 없이 사용 가능 - SQL 과 비슷한 방식의 쿼리 사용 - 몽고는 쓰기할때 메모리에 먼저 Write 후에 1분 단위로 Flushing하는 Write back 방식을 사용한기 때문에 write성능이 좋음 - Read시에는 파일의 Index를 메모리에 로딩해 놓고 찾는다(memory mapped file) - 빠름 - 다양한 기능 제공 |
- JOIN이나 트랜잭션 처리가 불가능 - 디스크에 쓰기가 비동기식으로 이루어진다. 때문에 경우에 따라 데이터가 유실될 가능성도 있다. |
[ Cassandra & HBase ]
- 카산드라 클러스터 설정 및 구성이 HBase 클러스터 구성보다 훨씬 쉽다.
- 카산드라가 일반적으로 write시 5배 이상의 더 나은 성능, read시 4배 이상의 성능을 보인다.
[ Cassandra & MongoDB ]
- Cassandra 노드가 추가될수록 MonogoDB 보다 훨씬 나은 선형적인 성능 향상을 보인다.
- 다중 Index가 필요한 구조라면 MongoDB를 선택하고, 데이터 항목 변경이 많고 unique access가 많은 경우라면 Cassandra가 적합
- http://db-engines.com/en/system/Cassandra;MongoDB