TIL 2023 10 20

김민준·2023년 10월 20일
0

얕은 정리

멀티스레드란?

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

장점

  • 응답성이 좋다. : 스레드하나가 오래걸려도 다른 스레드가 계속 일을 하고, 오류가 나면 새로운 스레드를 만든다.
    복잡한 계산, 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개의 댓글

관련 채용 정보