RDBMS (관계형 데이터베이스 관리 시스템)
– 테이블 마다 스키마를 정의해야 함.
– 데이터 타입과 제약을 통해서 데이터의 정확성을 보장함.
– 데이터를 Column 과 Row 형태로 저장.
– SQL이라는 RDBMS의 데이터를 관리하기 위해 설계된 프로그래밍 언어를 사용한 질의문을 통해
데이터를 다룰 수 있음.
– 데이터의 update가 빠름.
– 데이터 처리에 대한 부하 발생시, 처리가 어려움.
– 성능을 높이려면 하드웨어를 고성능으로 교체해야 함.
(고성능 하드웨어는 가격이 비싸, RDBMS의 성능을 높이거나 확장하기 어려움)
– 하나의 정보를 만들기 위해 여러 테이블로 쿼리를 사용하게 되며 그렇기 때문에 트랜잭션 처리를 중요시 함.
NoSQL
– RDB의 확장성 이슈를 해결하기 위해 나온 데이터베이스 모델임.
– 분산 컴퓨팅 활용이 목적으로 비교적 저렴한 가격에 DB 성능을 높일 수 있음.
– 데이터간의 관계를 정의하지 않으며, join이 불필요.
– 테이블에 스키마가 정해져 있지 않아 데이터 저장이 비교적 자유로우며
데이터의 구조가 같지 않아도 영향을 미치지 않음.
– key-value 방식으로 데이터를 관리하며, SQL을 사용하지 않음.
– 많은 양의 데이터를 저장, 처리 할 수 있음.
– 스키마가 정해져 있지 않아 구조 변경이 용이하고 데이터 형식이 다양하며 바꾸기 쉬워
정확성보다는 데이터 양이 중요한 빅데이터에 주로 사용함.
– 데이터의 update가 비교적 느림.
– 데이터 모델로는 도큐먼트 모델, 그래프 모델, 키/값 모델, 와이드 컬럼 모델이 있음.
In-Memory DB
NoSQL 방식에 속하는 데이터베이스로 key-value 방식을 사용하고 있음.
– Memory의 가격이 용량 대비, 충분히 낮아지면서 빠른 데이터베이스 성능을 위해서 등장함.
– 디스트(Disk) 대신 메모리(Memory)를 사용함으로써, I/O(input/output)의 성능을 높여줌.
– 대표적으로 Redis가 있음.
RDB vs NoSQL
– RDB는 관계형으로 데이터를 저장하지만, NoSQL은 그렇지 않다.
– RDB는 스키마가 정적이지만, NoSQL은 유연한 스키마 구조를 갖는다.
– RDB는 수직 확장이 용이하고, NoSQL은 수평 확장이 용이하다.
(즉, RDB는 서버 용량을 늘리는 게 쉽고, NoSQL은 서버를 여러 대 늘리는 게 쉽다)
– 위와 관련해서, RDB는 확장 시 다운타임이 있을 수 있지만, NoSQL은 거의 없다.
– RDB는 복잡한 쿼리와 Join 연산이 가능하다. NoSQL은 구조화된 쿼리 언어가 없는 경우도 많고, 일반적으로 Join이 없다.
– RDB는 OLTP에 적합하고, NoSQL은 OLAP에 적합하다.
(즉, RDB는 트랜잭션 처리에 용이하고, NoSQL은 분석 처리에 용이하다)
* OLTP
직역하면 온라인 트랜잭션 처리를 의미.
복잡하게 말하면 복수의 사용자 PC에서 발생되는 트랜잭션(Transaction)을 DB서버가 처리하고, 그 결과를 요청한 사용자PC에 결과값을 되돌려주는 과정을 뜻함.
즉, 1개의 트랜잭션에서 발생되는 INSERT, UPDATE, DELETE의 과정을 무결성을 보장하여 처리하고 그 결과를 SELECT 하는 과정을 말함.
* OLAP
데이터웨어하우스(DW), 쉽게 말해 DB에 저장되어 있는 데이터를 분석하고, 데이터 분석을 통해 사용자에게 유의미한 정보를 제공해주는 처리방법을 의미.
즉, 기존에 저장되어 있는 데이터를 사용자의 요구와 목적에 맞게 분석하여 정보를 제공하는 개념을 의미.
* OLTP vs OLAP
OLTP는 현재의 데이터 처리가 얼마나 정확하고, 무결한지가 중요.
그렇기 때문에 주로 데이터의 저장, 삭제, 수정 등의 실질적인 데이터를 수정하는 작업을 의미하는 용어.
OLAP는 이미 저장된 데이터를 바탕으로 어떤 정보를 제공하는지가 중요.
따라서 OLAP는 데이터가 무결하고, 정확하다는 전재를 바탕으로 고객 또는 사용자가 원하는 정보를 어떤식으로 표현하고 제공하는지를 의미하는 용어.