모든 데이터를 2차원 테이블 형태로 표현한다.
2차원 구조 모델을 기반으로 수평적 구조로 구조를 사용한다.
데이터 중복을 최소화 하며, 일관성, 무결성, 보안성을 유지합니다.
데이블 간의 관계를 가질 수 있다.
정규화를 통해 기본키, 외래키 등을 사용하여 테이블들은 관계를 맺고 여러개의 테이블에 분산됩니다.
정해진(엄격한) 데이터 스키마에 따라 데이터를 저장합니다.
트랜잭션 및 조인이 가능하다.
성능을 확장 시키기 위해서는 수직적 확장(scale-up)
만 지원한다.
수직적 확장이란 데이터베이스의 서버를 확장 시키는 것이다.(CPU 성능 업그레이드)
한번만
수행함으로 상대적으로 빠르다
.재조립
하여 데이터를 읽어오는 속도가 상대적으로 느리다
.모든 데이터가 스키마가 없고, 관계가 없다.
이러한 특징때문에 데이터가 중복되기 때문에 불안정한 측면이 있다.
트랜잭션 및 조인이 불가능하다.
성능을 확장 시키기 위해서는 수직적(scale-up)
, 수평적(scale-out)
확장을 지원한다.
수평적 확장이란 기존의 데이터 서버를 두고 동일한 데이터 서버를 확장 및 분산하는 것이다.
중복
되어 있어 있다면, Update를 해야하는 경우 모든 컬렉션에서 수행해야하므로 느리다
.빠르다
. 스키마가 변경될 여지가 없고, 데이터를 자주 수정해야하는 경우
데이터를 사용자의 필요에 따라 조건 또는 정렬이 필요한 경우
데이터 처리의 정확성이 필요한 경우(트랜잭션)
정확한 데이터 구조가 없거나 변경 또는 확장이 잦은 경우
데이터 수정하는 경우가 거의 없고, 읽기만 하는 경우
데이터베이스를 수평으로 확장해햐하는 경우(막대한 양의 데이터를 다뤄야 하는 경우)
Key값으로 Value를 즉시 찾을 수 있도록
Hash
데이터 구조를 사용한다.
Memcached, Redis와 같은 Cache 솔루션이 여기에 속한다.
MySQL과 같은 RDB는 행 단위로 저장하는 Row Oriented Store다.
그에 반면, 열(column) 단위로 정보를 저장해놓는 구조를 말한다.
HBase, Cassandra와 같은 제품이 여기에 속한다.
데이터를 JSON 형태로 저장하는 구조. 그래서 스키마를 바꾸기 쉽다.
MongoDB, Elasticsearch와 같은 제품이 여기에 속한다.