1.데이터베이스의 종류

데이터베이스(database)

데이터베이스는 정보를 수집하고 보관하기 위한 시스템으로 우리가 흔히 프로그래밍의 언어를 배울때 항상 배우는 파일 입출력 (File I/O)보다 향상되게 데이터를 접근하고 관리할 수 있다. 

 

데이터베이스의 종류에는 

1) 계층형 데이터베이스, 2) 네트워크형 데이터베이스, 3) 관계형 데이터 베이스, 그리고 4) NoSQL 데이터베이스가 있다. 

1. 계층형 데이터 베이스는 데이터의 관계를 트리 구조로 정의하고, 부모, 자식 형태를 갖는 구조이다. 풀어서 말하면 상위에 레코드가 복수의 하위 레코드를 갖는 구조이다. 하지만 데이터의 중복이 문제가 생긴다. 

2. 네트워크형 데이터베이스는 계층형 데이터의 데이터 중복 문제를 해했고, 레코드간의 다양한 관계를 그물처럼 갖는 구조이다. 하지만 복잡한 구조 때문에 추후에 구조를 변경한다면 많은 어려움이 따른다. 

3. 관계형 데이터베이스는 우리가 흔히 표현하는 행(Column), 열(Record)로 구성된Table간의 관계를 나타낼때 사용한다. 우리는 이렇게 표현된 데이터를  SQL(Structured Query Language)을 사용하여 데이터 관리 및 접근을 한다.

4. NoSQL 데이터베이스는 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용한다. 키(key) 값(value)형태로 저장되고, 키를 사용해 데이터 관리 및 접근을 한다.

 

1.관계형 데이터베이스
종류)mysql mariaDb Oracle Ms SQL server
데이터 이름 달고 ->>>실제 데이터 기입

  • 장점
  • 다양한 용도로 사용이 가능하고, 일반적으로 높은 성능을 보여주고 있다 (범용적 / 고성능)
  • 데이터의 일관성을 보증한다.
  • 정규화에 따른 갱신 비용 최소화
  • 대부분 SQL이라는 언어를 써야함 빠르고 효율적임
  • 단점
  • 대량의 데이터 입력 처리
  • 갱신이 발생한 테이블의 인덱스 생성 및 스키마 변경
  • 컬럼의 확장의 어려움
  •  3차원의 데이터를 못다룸 =>표를 더만들어서 작성함

 

2.NoSQL

mongoDB

 SQL 쓰기 싫을떄 쓰는거임SQL을 사용하지 않는다는 의미로, Not Only SQL (SQL이 필요 없다는 의미가 아니고, 개선/ 보안의 의미)

  • Non-Relational Operational Database SQL (관계형 데이터베이스가 아니다.) 
  • 대용량 데이터
  • 데이터 분산 처리
  • Cloud Computing
  • 빠른 읽기/쓰기 속도
  • 유연한 데이터 모델링
  • 휘발성/영속성
  • Memchached, Tokyo Tyrant, Flare, Roma, Redis
  • Big Table(Column 형) DB
  • 뛰어난 확장성, 검색에 유리
  • Hbase, Casandara, Hypertable
  •  

1. 비구조적인 대용량의 데이터를 저장하는 경우

NoSQL 데이터베이스는 관계에 중점을 둔 SQL 데이터베이스보다 자유로운 형태로 데이터를 저장할 수 있으므로 필요에 따라서 새로운 데이터 유형을 추가할 수 있습니다. 소프트웨어 개발에 정형화되지 않은 많은 양의 데이터가 필요한 경우, NoSQL이 효율적일 수 있습니다.

2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우

NoSQL 데이터베이스는 데이터베이스를 클라우드 기반으로 쉽게 분리 할 수 있도록 지원하여, 저장 공간을 효율적으로 사용합니다. 시스템이 커지면서 DB를 증설해야 하는 시점이 오면, SQL 데이터베이스에서는 수직적 확장의 형태로 DB를 증설합니다. 수직적으로 확장된 데이터베이스는 관리가 어려워질 수 있는데에 반해, NoSQL은 수평적 확장의 형태로 증설하므로, 이론상 무한대로 서버를 계속 분산시켜 DB를 증설할 수 있습니다.

3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없어서, 개발을 빠르게 해야하는 경우에 매우 적합합니다. 시장에 빠르게 프로토타입을 출시해야 하는 경우나, 소프트웨어 버전별로 많은 다운타임(데이터베이스의 서버를 오프라인으로 전환하여 작업하는 시간) 없이 데이터 구조를 자주 업데이트 해야하는 경우에는 일일이 스키마를 수정해주어야 하는 관계형 데이터베이스 보다 NoSQL 기반의 비관계형 데이터베이스가 더 효율적입니다.

   데이터 사이에 관계가 존재하면 SQL 데이터베이스를 사용하고,
   데이터 사이에 관계가 필요 없으면 NoSQL 데이터베이스를 사용하면 된다. 
  SNS를 개발할때 User, Feed, Comment 등 다양한 데이터가 존재하고, 데이터 사이에 관계가 존재하기 때문에 SQL을 사용하면 보다 빠르게 데이터를 접근 할 수 있다. 만약 이 내용을 NoSQL로 구현을 했다면 모든 내용을 하나의 Document로 저장하면 되겠지만, 그렇게되면 데이터의 중복이 엄청나기 때문에 올바르지 못하다. 데이터 중복을 피하기 위해 만약 User, Feed, Comment 등의 값들을 각각 key-value로 저장하고 있다면, 데이터 접근 후 하나의 객체로 만드는 과정의 비용이 상당할 것이다. 생각만해도 클라이언트가 답답해 하는 소리가 들린다. 
  하지만 인터넷에 있는 기사를 긁어오는 스크랩 코드를 구현했다면 url + @로 key, 하나의 페이지를 value로 저장한다면 빠르고 쉽게 저장/접근이 가능하다. 이럴때는 NoSQL이 적절하지 않을까 싶다. 



출처: https://ourcstory.tistory.com/30 [불로]

출처:코딩애플

데이터의 중복이 많고 데이터 사이의 관계가 많다 -> SQL

데이터의 양이 방대하고 간단하다 ->NoSQL

복사했습니다!