티스토리 뷰
How do Identity, Sequence, and Table (sequence-like) generators work in JPA and Hibernate
sanook 2020. 3. 1. 12:45https://jojoldu.tistory.com/295
Spring Boot Data JPA 2.0 에서 id Auto_increment 문제 해결
안녕하세요? 이번 시간엔 Spring Boot JPA 2.0 에서 PK의 Auto_increment 문제를 알아보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Gi..
jojoldu.tistory.com
https://vladmihalcea.com/hibernate-identity-sequence-and-table-sequence-generator/
How do Identity, Sequence, and Table (sequence-like) generators work in JPA and Hibernate - Vlad Mihalcea
Introduction In my previous post I talked about different database identifier strategies. This post will compare the most common surrogate primary key strategies: IDENTITY SEQUENCE TABLE (SEQUENCE) IDENTITY The IDENTITY type (included in the SQL:2003 stand
vladmihalcea.com
Identity
요청에 따라 integer/bigint를 자동으로 증가시킬 수 있다.
증가 프로세스는 현재 실행 중인 트랜잭션 외부에서 발생하므로 롤백으로 인해 이미 할당된 값을 폐기할 수 있다.
증가 프로세스는 더 무거운 트랜잭션 코스 계량 잠금과 달리 데이터베이스 내부 경량 잠금 메커니즘을 사용하기 때문에 매우 효율적이다.
단점은 INSERT 문을 실행하기 전에 새로 할당된 값을 알 수 없다는 것이다. 이러한 제한은 하이버네이트가 채택한 transactional write-behind을 방해하고 있다. 이 때문에 하이버네이트는 IDENTITY 생성기를 사용하는 엔티티를 지속할 때 JDBC 일괄 처리를 사용할 수 없다.
-> insert 쿼리 실행하고 그리고 하나 실행하고 해야함
JDBC 일괄 처리를 비활성화하는 것 외에 식별자가 동일한 하위 클래스 엔티티가 여러 개 있을 수 있고 기본 클래스 쿼리가 동일한 식별자를 가진 엔티티를 검색하게 될 수 있기 때문에 IDENTITY 생성기 전략은 TABLE_PER_CLASS 상속 모델에서 작동하지 않는다(다른 유형에 속하더라도).
Sequence
연속된 각 요청에 대해 증분 정수를 생성하는 데이터베이스 객체다. 다음과 같은 이유로 IDENTIFIER 열보다 훨씬 유연하다.
-테이블이 없으며 동일한 시퀀스를 여러 열 또는 테이블에 할당할 수 있다.
-성능을 개선하기 위해 값을 사전 할당할 수 있음
-"풀링된" Hilo 알고리즘의 이점을 얻을 수 있는 증분 단계를 정의할 수 있다.
-최대 절전 JDBC 일괄 처리를 제한하지 않음
-최대 절전 모드 상속 모델을 제한하지 않음
Table(sequence)
식별자 시퀀스 카운터를 고정하기 위해 하나 또는 여러 개의 테이블을 사용할 수 있다. 그러나 그것은 데이터베이스 이식성을 위해 쓰기 성능을 포기하는 것을 의미한다.
위의 2개는 트랜잭션 없는 반면, 데이터베이스 테이블을 사용하여 여러 개의 동시 ID 생성 요청을 동기화하도록 ACID를 위임한다
이는 IDENTITY 또는 SEQUENCE 발전기보다 더 높은 비용으로 제공되는 row-level locking을 사용하여 가능하다.
시퀀스는 별도의 데이터베이스 트랜잭션에서 계산해야 하며, 이를 위해서는, 로컬(JDBC)과 글로벌(JDBC) 모두를 지원해야 하는 IsolationDelegate 메커니즘이 필요하다.
-로컬 트랜잭션의 경우 새로운 JDBC 연결을 열어야 하므로 현재 연결 풀링 메커니즘에 더 많은 압력을 가해야 한다.
-글로벌 거래의 경우 현재 실행 중인 거래의 중지를 요구한다. 시퀀스 값이 생성되면 실제 트랜잭션을 재개해야 한다. 이 프로세스에는 자체 비용이 있으므로 전체 애플리케이션 성능에 영향을 미칠 수 있다.
테이블 생성기는 JDBC 일괄 처리를 허용하지만 업데이트 쿼리를 위해 select으로 변경된다. 행 레벨 잠금은 확실히 네이티브 IDENTITY 또는 SQUENCE를 사용하는 것보다 효율성이 낮다.
ACID
- Atomicity
- Consistency
- Isolation
- Durability
..
- Total
- Today
- Yesterday
- 이동 윈도우 로깅 알고리즘
- 고정 윈도우 카운터 알고리즘
- 처리율제한
- 알고리즘
- 누출 버킷 알고리즘
- 처리율 제한 알고리즘
- 회고
- 이동 윈도우 카운터 알고리즘
- 글또
- 개발자
- 카카오프로젝트100
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |