TIL 2023 10 20

김민준·2023년 10월 20일

얕은 정리

멀티스레드란?

프로세스 내에서 여러개의 스레드로 작업을 처리하는 것,
동시에 여러 스레드가 작동하는 것이 아니라 컨텍스트 스위칭으로 여러 스레드가 번갈아서 일하는 것이다.

장점

  • 응답성이 좋다. : 스레드하나가 오래걸려도 다른 스레드가 계속 일을 하고, 오류가 나면 새로운 스레드를 만든다.
    복잡한 계산, I/O 작업 또는 독립적으로 실행할 수 있는 작업이 포함된 앱에 적합하다.
  • 경제성 : 프로세스 내 자원과 메모리를 공유한다. 스레드간 컨텍스트 위위칭은 캐시 메모리를 비울 필요가 없다.
  • 멀티프로세서활용 : 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행할 수 있다.

단점

  • 운영체제의 지원이 필요하다.
  • 싱글코어 : 싱글코어 프로세스에서 멀티스레딩을 할 경우, 컨텍스트 스위칭, 동기화등의 이유로 스레드 생성 시간이 오버헤드로 작용해 단일 스레드보다 느리다.
  • 자원공유 : 자원공유가 잘못 될 경우 데이터 일관성 문제나 경쟁조건(복수의 스레드가 동일한 자원에 동시 접근하는 것)문제가 발생할 수 있어서, 동기화로 해결해야한다.
  • 프로그래밍 난이도가 높다.

멀티 프로세스보다 멀티 스레드가 나은이유

프로세스끼리는 자원을 공유하기 어렵지만 스레드끼리는 쉽기때문이다.
대신 자원의 공유중 문제가 생기거나 교착상태에 빠지는것에 주의해야한다.

관계형 DB와 비관계형 DB의 차이

관계형 DB / RDBMS

행과 열로 이루어진 테이블(표)에 데이터를 넣는 고전적인 방식
행 : 데이터의 속성
열 : 데이터 값

  • 트랜잭션이 하나의 단위로 적용된다.
  • 정규화 : DB 설계시 중복을 최소화하여 구조화한다.
    장점
  • 정규화에 따른 갱신 비용 최소화
  • 신뢰성이 높다 : 데이터의 무결성 보장
  • 데이터 성능이 좋다 : 정렬, 탐색, 분류가 빠르다.
    단점
  • 스키마를 바꾸기 어렵다.
  • DB의 부하를 분석하기 어렵다
  • 빅데이터 처리에 비효율적

비관계형 DB / NoSQL

데이터의 저장 및 검색에 특화되어있다.
큰 데이터 용량, 낮은 지연 그리고 유연한 데이터 모델을 요구하는 앱에 특화될 수 있다.

  • 거대한 Map으로 key-value 형식을 지원한다.
  • PK, FK, JOIN등의 관계를 정의하지 않는다.
  • 스키마에 대한 정의가 없다.
    장점
  • 데이터 모델링이 유연하다.
  • 대용량 DB 처리에 효율적
  • 관계형에 비해 읽기, 쓰기 모두 빠르다.
  • 복잡한 데이터 구조를 표현할 수 있다.
  • 응답속도, 처리효율이 뛰어나다 : 최적화된 키저장기법
  • 검색이 빠르다.
  • 쓰기가 빠르다.
    단점
  • 큰 크기의 문서에 성능저하 : 쿼리 처리시 데이터를 파싱 후 연산한다.

차이점

  • 구조
    RDBMS : 표로된 형식과 엄격한 규칙을 고려해야한다. 유지보수에 복잡한 쿼리가 필요하다.
    NoSQL : 데이터 변경에 더 유연하고 유용하다. 이미지,영상,문서, 기타 부정형 구조를 저장하는데 유용하다

  • 데이터 무결성 매커니즘 ACID (Atomicity Consistency Isolation Durability)
    RDBMS : 엄격한 ACID요소를 따른다.
    즉, 하나의 작업만 실패해도 전체가 실패한다.
    NoSQL : ACID를 지원하지 않는 경우가 많다. 그래서 즉각적인 일관성을 보장하지는 않는다.
    대신 가용성을 희생하거나 일부만 일관성을 요구하는 모델을 선택할 수 도 있다.

  • 성능
    RDBMS : 디스크 시스템에 따라 달라진다.
    * SSD : DB 성능 향상
    * RAID : 디스크 최적화, Redundant Array of Independent Disk
    * 최대성능 : 인덱스 최적화, 테이블구조, 쿼리
    NoSQL : 네트워크 지연, 하드웨어 클러스터 크기, 앱 호출(인덱스, 캐시)에 달려있다.

  • 확장성
    RDBMS : 스키마가 엄격하게 적용되어서 대규모 문제가 일어날 수 있다. CPU와 RAM을 추가하여 수직확장하며, 수평 확장에는 파티셔닝, 샤딩같은 특별한 방법이 필요하다
    NoSQL : 작업량을 여러 노드에 분산하기 쉬워서 확장성이 뛰어나다.

참조한 페이지

Single-Threaded vs. Multi-Threaded Programs in Java: A Comprehensive Comparison
싱글스레드(Single thread) vs 멀티스레드 (Multi thread)

What’s the Difference Between Relational and Non-relational Databases?
[database] 관계형 DB와 비관계형 DB의 차이점

profile
node 개발자

0개의 댓글