트랜잭션 이란? - 논리적인 작업 단위 

 

 

  • 원자성 ( Atomicity )
    • 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것을 말합니다.
    • 즉, All or Noting의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미합니다.
  • 일관성 ( Consistency )

    • 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것을 말합니다.

    • 여기서 말하는 일관성이란, 위의 송금 예제에서 금액의 데이터 타입이 정수형(integer)인데, 갑자기 문자열(string)이 되지 않는 것을 말합니다.

      • 즉, 송금 전후 모두 금액의 데이터 타입은 정수형이여야 한다는 것이 일관성입니다.

  • 격리성 ( Isolation )

    • 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 말합니다.

    • 즉, 트랜잭션끼리는 서로를 간섭할 수 없습니다.

  • 지속성 ( Durability )

    • 성공적으로 수행된 트랜잭션은 영원히 반영이 되는 것을 말합니다.

    • commit을 하면 현재 상태는 영원히 보장됩니다.

'데이터베이스' 카테고리의 다른 글

DB SubQuery  (0) 2019.07.24

SQL 튜닝 결과보고

- 오라클 기준

- 8가지 사례소개

 

*블록IO

- 블록IO 를 줄이면 수행시간 단축 가능

- DBMS에서 IO는 블록단위로 이루어짐

- 레코드를 읽을때 레코드가 속한 블록 전체를 읽게됨

- 따라서 블록IO개수는 쿼리 실행할때 읽게되는 블록의 개수

- 보통 한번 가져올때 블록 128개 가져옴

- 인덱싱된 로우 가져올때는 싱글블록IO(블록1개만가져올수잇음)

- MSSQL 에서는 페이지라는 용어 사용

 

*스칼라 서브쿼리

- 스칼라 서브쿼리 쓰면 버퍼캐시에 캐싱이 되기때문에 부하감소

- 예를 들어 1을 입력한후 다음번에도 1을 입력하면 미리 캐시된 값이 나가서 시간 단축

- 리컬시브 콜을 감소

- 근데 입력값이 유니크한것보다 변별력없을때 성능이 더 좋아짐

- 사용시 밑져야 본전이므로 스칼라서브쿼리 사용을 표준으로 잡는것도 나쁘지않음

 

*쿼리변환

- 결합된 쿼리 개선 > 결합을 풀거나 다른방식으로 진행

- 보통은 옵티마이저가 알아서 잘해주지만... 잘 안될때도잇음

 

*인덱스

- 인덱스를 쓰면 빠르다고 생각하는데 인덱스를 타서 테이블로 가는것도 부하가 생기므로 건수가 적으면 안쓰는게 나음

- 예를들어 3만건이면 풀스캔이 나음 인덱스쓰면 3만번도는거

 

*파티션 프루닝

- 읽지않아도되는 파티션을 제외시키는 법

 

*NL조인?

- Nested Loops

 

*view push predicate

- 힌트를 줘서 WITH 문 부터 실행하는게 아니라 인라인을 먼저 실행해서 WITH문에 더 좋은조건을 주는것

- WITH절에 무조건 이걸 쓰는게 좋은건 아니고 해당하는 케이스에만 사용

 

*SQL 튜닝의 시작 책

 

*View Merging

- 큰쿼리안에 작은쿼리 감싸고 있는 경우 작은쿼리를 큰쿼리 레벨로 올리는 것

- 뷰머징이 실패할 경우가 많음 >내부로직이 복잡해서 > 노머징 힌트를 주고 반대로 작은쿼리로 데이터를 던져주는방식으로 view push predicate 유도

  • 인터페이스는 객체 사용 설명서 (공통API의 역할)
    인터페이스의 메소드는 전부 abstract 메소드 (키워드 생략)
  • 자바7까지는 추상메소드만 선언가능했는데
    자바8에서부터는 디폴드메소드, 정적메소드도 선언가능
  • 코드수정없이 객체를 변경할 수 있다
    > 동일기능의 구현객체를 새로만들고 선언부만 변경 가능
  • 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출
  • 인터페이스의 구현클래스에서 메소드를 작성할때 더 낮은 접근제한을 지정할수없음
    (추상메소드는 디폴트로 public)
    인터페이스 설계의 핵심은 선언부를 얼마나 추상화하여 작성할 것인가...
  • 인터페이스는 다중상속 가능
  • 디폴트 메소드 필요성
    - interfaceA 를 사용하다가 추가할 기능이 생겼을때 추상메소드를 추가하면 interfaceA 구현체에 모두 추가해줘야하는데
    디폴트메소드는 추상메소드가 아니기 때문에 구현클래스에서 모두 작성해줄 필요가 없음
    - 리턴타입 앞에 default 작성
  • 인터페이스 vs 추상클래스
    접근제한자 모두 public / 접근제한자 지정 가능
    구현객체가 동일기능을 구현 / 핵심로직은 추상클래스에서 정의하고 달라지는 부분만 구현객체에서 작성
    > 나중에 디자인패턴에서 쓰임 비교해보기


1번 - 3
2번 - 4
3번 -

public class Cat implements Soundable {
  @Override
  public String sound() {
  	return "야옹";
  }
}
public class Dog implements Soundable {
  @Override
  public String sound() {
  	return "멍멍";
  }
}


4번 -

public interface DataAccessObject {
  void select();
  void insert();
  void update();
  void delete();
}
public class OracleDao implements DataAccessObject {
  public void select() {
  	sysout("OracleDB에서 검색")
  }
  public void insert() {
  	sysout("OracleDB에서 삽입")
  }
  public void update() {
  	sysout("OracleDB에서 수정")
  }
  public void delete() {
  	sysout("OracleDB에서 삭제")
  }
}
  
public class MySqlDao implements DataAccessObject {
  public void select() {
  	sysout("MySqleDB에서 검색")
  }
  public void insert() {
  	sysout("MySqleDB에서 삽입")
  }
  public void update() {
  	sysout("MySqleDB에서 수정")
  }
  public void delete() {
  	sysout("MySqleDB에서 삭제")
  }
}


5번 -

Action action = new Action() {
	public void work() {
		sysout("복사를 합니다.");
	}
};

'Language > Java' 카테고리의 다른 글

자바 커뮤니티2 - 상속  (0) 2019.05.28
자바 커뮤니티1 - Class  (0) 2019.05.22
Java 문자열 객체  (0) 2018.08.04
Java 배열 선언, 초기화  (0) 2018.08.04
Java 접근지정자 (Access Modifier)  (0) 2018.08.04

+ Recent posts