데이터베이스(1)

이승준·2024년 3월 4일
0

🤔 Relation DataBase

📌 관계형 데이터베이스란?

  • 데이터를 테이블로 저장하며,
    각 테이블은 하나 이상의 열과 행으로 구성되어 있다.
  • 테이블 간 관계를 설정하여 관계를 보다 쉽게 이해할 수 있고,
    관계를 통해 데이터 중복을 최소화하고 데이터 무결성을 유지한다.
  • SQL로 데이터를 조작한다.

📌 장단점과 사용해야하는 이유

장점

  1. 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장한다.
  2. 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.
    ➡️설계시 정규화를 통해 성능과 편의성을 더욱 높일 수 있다.

단점

  1. 시스템이 커질경우 많은 Join문과 함께 복잡한 쿼리가 생성될 수 있다.
    ➡️ 성능에 부정적인 영향
  2. 성능 향상을 위해 Scale-up 을 사용해야 하기 때문에 성능향상의 한계와 비용적인 부담이 커진다.
  3. 미리 정해진 스키마로 인해 데이터를 유연하게 저장하지 못한다.
    스키마 수정이 가능하지만, 번거롭고 안정성 면에서 떨어진다.

Scale-up 만 가능한 이유

  • RDMBS는 ACID원칙을 고수하여 트랜잭션을 작업 단위로 사용하는데,
    수평확장을 하여 여러 데이터베이스에서 트랜잭션의 일관성을 보장하려면
    복잡한 메커니즘을 사용해야하고, 성능에 부정적인 영향을 줄 수 있다.

Scale-up의 한계 해결방법.

  1. 데이터 샤딩 : 서버의 데이터베이스를 분할하여 독립적인 DB로 사용한다.
  2. 데이터 복제 : 일반적으로 읽기전용 DB를 만들어 부하를 분산시킨다.
  3. Nosql DB사용
  4. 캐싱 사용

외에도 다양한 기술과 아이디어를 활용해 해결방법을 찾을 수 있다.

🤔NoSQL DataBase

📌 비관계형 데이터베이스란?

  • 관계형 DB를 제외한 나머지 데이터유형의 DB를 칭한다.

📌 저장방식에 따른 종류와 특징

Document Database

  • 대표적으로 MongoDB가 존재한다.
  • key와 document형식으로 저장되며, document형식이기 때문에 테이블에 나눠서 저장할 필요가 없다.
  • key-value 형식과 동일하게 검색에 최적화 되어있다.
  • 데이터를 계층화하여 저장하는 JSON형식과 유사하게 BSON 데이터 형식을 따른다.
  • BSON의 장점
    • 이진 직렬화: BSON은 이진 형식으로 데이터를 직렬화하므로, 데이터의 크기가 작아져 시스템 간 통신 성능이 향상된다. 특히 대용량 데이터를 전송해야 하는 경우에 유리하다.
    • 처리 속도: BSON은 이진 형식으로 인해 처리 속도가 빠르며, 처리속도가 빠르므로 다른 시스템 간 통신에서 응답속도가 향상된다.
    • 다양한 데이터 유형 지원: BSON은 문자열, 숫자(정수, 부동 소수점, 십진수), 날짜, 이진 데이터, ObjectId 등 다양한 데이터 유형을 지원한다. 서로 다른 시스템 간에 다양한 데이터 유형을 쉽게 전송하고 저장할 수 있다.

요약하면 이진 직렬화 방식은 저장공간을 효율적으로 사용하며 처리속도가 빠르고, 트래버스 성능이 우수하기 때문에 데이터 순회나 처리속도가 우수하다

Key-Value

  • 대표적으로 Redis (REmote DIrectory Sever) 가 존재한다.
  • Key-Value Database에서는 데이터가 Key와 Value의 쌍으로 저장된다. Key는 레코드를 고유하게 실별하며 데이터베이스 내에서 저장과 검색을 하는데 사용된다. Value에는 어떤 형태의 데이터든지 담을 수 있다.
  • 구조를 정하지않고. key만 겹치지 않게 넣은 다음 최대한 flexible하게 value를 넣을 수있는 데이터베이스.
    key로 value를 찾을 수 있지만. 구체적인 검색은 불가.
  • Redis의 구조
  • Redis의 특징
    • 인 메모리 데이터 스토어 : 메모리에 저장해 응답속도가 빠르다. 따라서 세션상태 관리, 캐싱용도로 많이 사용된다.
    • 지속성 옵션 : 휘발성이긴 하나 스냅샷 기능이 있어 일정부분에서 데이터를 바이너리 파일로 영구적으로 저장할 수 있다.
    • Pub/Sub 메시징: Redis는 Pub/Sub(Publish/Subscribe) 메시징 시스템을 제공하여 메시지 기반의 통신을 지원한다. 이는 실시간 메시징 애플리케이션에 사용될 수 있다.
    • 클라이언트 캐싱: Redis는 클라이언트 캐싱을 위한 기능을 제공하여 애플리케이션 성능을 향상시키는데 사용할 수 있다.
  • 구조화 되어있지 않기 때문에 정교한 검색이 어렵다는 단점이 존재한다.

후기

사실 Mysql, MongoDB, Redis, S3 등을 공부하려고 했는데, 같은 종류의 DB에서도 각각 다른 기능을 제공하고, 많은 특징이 존재했다.
그 중에서도 먼저 저장 메커니즘과 탐색 메커니즘, 저장 데이터 구조에 대해서 심층적으로 공부하면 좋겠다고 생각이 들었고, 프로젝트에서 효율적으로 활용해야겠다.

출처

https://www.whatap.io/ko/blog/173/

https://hstory0208.tistory.com/entry/RDBMS%EC%99%80-NoSQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-%EA%B0%9C%EB%85%90-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC

https://colevelup.tistory.com/45

0개의 댓글