728x90

what is data modeling?

즉 데이터가 어떤 관계성을 가지면서 어떤 구조로 되어있는지에 대한 설명/추상화

 

data modeling을 위해서 데이터에 대한 여러 요청들을 수집해야 한다. buisness에 필요한 데이터들이 어떻게 연결되어 있는지 정리한다. 그리고 스키마와 테이블, 컬럼의 컨셉을 정한다.

그리고 DDL(Data definition language)로 스키마와 테이블을 정의하는 명령어를 실행한다. 

why important?

후에 데이터가 실제로 사용될 때 이를 위한 다양한 작업을 할때 그 방식의 효율성을 결정하기도 한다.

(쿼리 조인이 생기느냐 안해도 되느냐 등)

Relational and NoSQL Database

relational model

oracle : 대부분의 기업에서 사용된다. 트랜잭션을 다룬다. 대표적으로 금융회사에서 많이 사용된다. 

sqlite : 개발 단계에서 간단한 태스크를 수행하기 위해 사용된다.

 

 

 

 

 

 

RDBMS를 사용하는 이유

  • SQL을 통해 db에 접근하여 데이터를 활용하기 쉽다
  • 관계성을 기반으로 하고 있기 때문에 join이 가능하다.
  • 데이터 집계와 분석이 가능하다(group by, order by 등..)
  • 작은 데이터들을 관리하기 용이하다
  • adhoc 쿼리고 business 요청을 바꾸기 용이하다
  • 쿼리 사용의 유연성
  • 데이터를 모델링한 것이지 쿼리를 모델링 한것이 아니다.(NoSQL와 비교된다.)
  • secondary index 설정 가능(for quick searching)
  • ACID 트랜잭션 : 데이터 일관성 유지 가능

ACID 트랜잭션

-> 은행거래가 가장 대표적인 트랜잭션의 예이다

Atomicity : all or nothing

consistency : 일관성

isolation :  각 트랜잭션은 독립적이다.

durability : 시스템 실패가 발생하고 한번 일어난 트랜잭션은 데이터 시스템에 저장되는 유지성

 

 

 

 

-> 트랜잭션에서 commit이 가장 중요하다. 하나의 트랜잭션을 실제로 데이터 베이스에 "실행'한다는 액션이다.

 

RDBMS를 사용하면 안되는 경우

  • 대량의 데이터를 다룰때(RDBMS는 scale out이 어렵다.)
  • 서로 다른 데이터 포맷을 다룰 필요가 있을 때
  • 빠르게 작업해야 할때(fast read) - ACID 트랜잭션이 프로세스의 효율성을 낮추기 때문
  • 유연한 스키마가 필요할 때
  • 수평적으로 scale out이 필요할 때(node 나 server를 추가할 필요가 있을 때) - RDBMS는 이러한 수평적인 확장이 불가능하다
  • 높은 가용성이 필요할 때(high availability)

 

 

Posgresql - RDBMS 중 하나

- 오픈소스 관계형 데이터베이스이며, SQL쿼리를 사용한다. 

 

NoSQL Database

 

-> RDBMS의 성능에 대한 문제를 제기하면서 등장했다. 

 

Apache Cassandra - NoSQL 중 하나

 

NoSQL을 사용해야 하는 경우( = RDBMS를 사용하면 안되는 이유)

  • 대량의 데이터(for bigdata)
  • 수평적인 scale out이 필요할 때
  • 높은 효율성/빠른 속도
  • 유연한 스키마
  • 높은 가용성
  • 다른 데이터 포맷을 저장해야할 때

 

NoSQL을 사용하면 안되는 경우( = RDBMS를 사용해야 하는 경우)

  • ACID 트랜잭션 
  • JOIN 해야 하는 경우
  • 데이터 집계가 필요한 경우 - cassandra와 spark의 조합으로 가능하긴 하지만 RDBMS 만큼의 결과는 얻지 못한다. 
728x90

+ Recent posts