[CS공부] 22.10.14

minyoon·2022년 10월 17일
0

CS공부

목록 보기
8/12

트랜잭션


  • 작업의 완전성을 보장해 주는 것
  • 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리 못할 경우에는 원상태로 복구
  • 작업의 일부만 적용되는 현상 방지

트랜잭션 🆚 Lock


  • 잠금은 동시성을 제어하기 위한 기능
  • 트랜잭션은 데이터의 정합성을 보장하기 위한 기능
  • 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 때 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할
  • 트랜잭션은 하나의 논리적 작업셋에 작업 자체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장

트랜잭션의 특성


원자성 : 트랜잭션 중간에 문제가 생기면 어떤 작업도 수행되서는 안되며, 아무런 문제가 발생하지 않았을 때만 모든 작업 수행

일관성 : 트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기 전 상황과 동일하게 데이터의 일관성을 보장해야 한다.

고립성 : 각각의 트랜잭션은 서로 간섭 없이 독립적으로 수행되어야 한다.

영속성 : 트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업 결과가 저장되어야 한다.

트랜잭션의 상태


Active : 트랜잭션의 활동 상태, 트랜잭션이 실행중이며 동작중인 상태

Failed : 트랜잭션 실패 상태. 트랜잭션이 더이상 정상적으로 진행할 수 없는 상태

Partially Committed : 트랜잭션의 Commit 명령이 도착한 상태. 트랜잭션의 commit 이전 sql 문이 수행되고 최종적으로 commit만 남은 상태

Committed : 트랜잭션 완료 상태, 작업이 DB에 최종 적용된 상태

Statement ↔ PreparedStatement


Statement

  • SQL 구문을 실행하는 역할
  • 스스로 SQL 구문 이해 못함 (단지 String 전달)
  • SQL 관리 O + 연결 정보 X
    String name = "홍길동";
    
    String memo = "메모 테스트 입니다. 홍길동's 메모장";
    
    String priority = "1";
    
    String sql = String.format("insert into tblMemo values(memoSeq.nextval,'%s','%s',default,%s)", name, memo, priority);

PreparedStatement

  • Statement 클래스의 기능 향상
  • 인자와 관련된 작업이 특화(매개변수)
  • 코드 안전성⬆️, 가독성⬆️
  • 매개변수 set을 줘야하므로 코드량이 증가
  • 텍스트 SQL 호출
  • 같은 작업을 반복 수행할 때 유리
    sql = "insert into tblMemo values(memoSeq.nextval,?,?,default,?)";
    
    pstat = conn.prepareStatement(sql);
    
    //매개변수 값 대입 + 매개변수 유효화 처리.
    
    pstat.setString(1, name);
    
    pstat.setString(2, memo);
    
    pstat.setString(3, priority);
    [Java] PreparedStatement를 사용해야 하는 이유

NoSQL


  • 관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화
  • 느슨한 스키마 제공

NoSQL 분류


NoSQL강의) NoSQL 데이터 모델 종류 및 설명

Key-Value 모델

  • 키 하나로 데이터를 저장하고 조회할 수 있는 단일 키-값 구조
  • 복잡한 조회 연산 지원❌
  • 고속 읽기-쓰기에 최적화
  • 사용자의 프로필정보, 세션정보, 장바구니 정보, URL 단축 정보 저장 등에 사용

Document Model

  • 키-값 모델을 개념적으로 확장한 구조
  • 데이터 저장 방법이 RDB와 유사, 키값을 ID로 표현
  • 저장된 문서를 컬렉션으로 관리, 문서 저장과 동시에 문서 ID에 대한 인덱스 생성
  • 대부분 B-트리 인덱스 사용
  • B-트리는 읽기, 쓰기 비율이 7:3 정도일 때 가장 좋은 성능을 보임 ex) MongoDB

Column Model

  • 하나의 키에 여러개의 컬럼 이름과 컬럼 값의 싸으로 이루어진 데이터를 저장, 조회
  • 모든 컬럼은 항상 타임스탬프 값과 함께 저장
  • 쓰기에 특화
  • 메모리에 저장한후 응답하기 때문에 빠른 응답속도
profile
궁금한게 많은 사람🧐

0개의 댓글