[MSSQL] CDC Role
·
DataBase/MSSQL
Role Enalbe/Disable for Database We must enable database before enable CDC on individual table. Product Role SQL Server sysadmin Azure SQL Server db_owner Azure SQL Managed Instance sysadmin Enable/Disable for Table Only `db_owner` can enable or disable CDC for individual table Access to a change table CDC 활성화시 다음과 같은 구문을 사용하는데 @role_name 을 지정하도록 되어있다. -- ========= -- Enable a Table Without Usin..
[JPA] 상속관계 매핑
·
JVM/JPA
Database 와 Object 간에는 기본적인 패러다임 차이가 존재한다. Database 관점 슈퍼타입 - 서브타입의 논리 모델이 존재한다. 이를 물리 모델로 구현할 수 있는 여러 전략이 존재한다. Joined Table 전략 Single table 전략 Table per class 전략 1. Joined Table 전략 슈퍼타입 테이블을 만들고 각각의 모든 서브타입 테이블을 별도로 생성하는 구조. Item 슈퍼타입 테이블에 별도의 `data_type` 컬럼을 두어 해당 테이블에서 어느 서브타입 테이블을 가리키는지 구분한다. 가장 정규화된 방식으로 저장 공간이 효율화됨. 정석적인 방법으로 JOIN 으로 인해 성능 저하 위험 존재한다고는 하나, 미미함. (JOIN을 잘쓴다면) 부모 - 서브타입 테이블에 ..
[JPA] auto_increment 전략 IDENTITY vs SEQUENCE
·
JVM/JPA
기본키 생성 전략에 따른 JPA 의 기본 동작 차이. IDENTITY IDENTITY 전략에서는 PK (auto_increment) 값이 Insert 쿼리가 DB에 COMMIT 되는 시점에 확정된다. 문제 상황 영속성 컨텍스트를 가진 JPA 입장에서 어떤 트랜잭션 내에서 COMMIT 하기 전에 PK (ID) 를 사용해야 한다면 어떻게 해야할까? em.persist(entity) 시점에 INSERT 쿼리를 실행한다. (아직 COMMIT 전) Member.java @Entity @Table(name = "member") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class Member { @Id @GeneratedValue(strat..
What's difference between index and key?
·
DataBase/Fundamental
Key Logical concept, structures to identify records within a table ex) Primary Key, Foreign key 통상 Key 를 생성하면 DBMS 에서 해당 key-column 에 index 를 같이 생성해 걸어준다. Index Physical structures to store the data and how to optimize data processing However, an index-only scan can return the contents of non-key columns without having to visit the index's table, since they are available directly from the index ..
[PostgreSQL] Use `identity` instead of `serial`
·
DataBase/PostgreSQL
Primary Key + Auto_Increment 를 하고싶을 때, Sequence, Serial 을 버려라. Sequence 특징 데이터 타입을 따로 명시해야하고. 테이블 생성시 같이 선언해야한다. 값을 업데이트할 경우, sequence 이름을 명시해야한다. Serial 특징 데이터 타입을 따로 명시할 필요가 없다. `INSERT` privilege 를 테이블 권한에 및 `USAGE` privilege 를 기저를 이루는 sequence 에 줘야한다. (Serial 도 결국 sequence 생성이 이뤄지기 때문에) ✅ PostgreSQL version 10부터는 Identity 가 국룰이다. 특징 컬럼의 데이터 타입을 명시해야하고 오로지 `INSERT` privilege 만 테이블에 부여하는 것으로 충..
[DB] Key (Index) 는 어떻게 동작하나?
·
DataBase
쿼리에서 Key를 타면 시간 복잡도? 예상 O(1) or O(log N) ✅ 복합키면 시간 복잡도? 위와 그대로 결국 DB도 해시테이블 구조라 해싱 컴퓨팅 비용만 들이고 미리 키만 저장하면 O(1)이 들거라 생각. 복합키면 해싱 비용이 더 들어갈 뿐이지 시간복잡도의 오르내림은 없을것. 틀렸다. 해시 테이블이 아니라 B-Tree의 O(Log N) Example table Full Table Scan 테이블의 전체 row 를 확인하는 것. -- name is not indexed column EXPLAIN ANALYZE SELECT id FROM test.public.users WHERE name='kkk'; 실행 결과 `Seq Scan` 이 이뤄짐을 알 수있다. postgresql 에서의 `Seq Scan..