-
[DB] UUID를 고유 값이나 Key로 사용하면 안되는 이유Spring Boot/DB 2023. 6. 30. 12:00
1. UUID를 고유 값으로 쓰면 안되는 이유
- RDB 기준 사용시 성능 이슈 + 충돌 가능성이 있기 때문이다. (https://velog.io/@injoon2019/UUID-vs-ULID)
- 인덱스는 기본적으로 B-tree 인덱스를 사용하는데, 무작위 렌덤의 uuid를 사용하면 sort를 사용할 수 없다.
- int, bigint를 사용하는 것에 비해 uuid를 pk로 사용하면 상대적으로 성능이 낮다.
- uuid 단독으로 사용하면 생성시 충돌 가능성이 있다.
- 128비트의 공간을 지속적으로 차지하는 단점
- (uuid를 사용하면 DB 마이그레이션이 편한 이점 있음)
2. 해결책
- [결제 고유 번호 uuid + 날짜_회원정보] 이런식으로 저장해야한다. (스노플레이크 접근이라고 한다. https://thalals.tistory.com/440)
- UUID 생성 라이브러리 사용하기 (AWS에서 sorting key로 추천 - https://www.youtube.com/watch?v=I7zcRxHbo98&t=2s)
- KSUID (https://www.npmjs.com/package/ns-ksuid)
- sorting 가능한 uuid
- 예전에 dynamodb 붙이려고 공부할때 알게 된 라이브러리
- GO로 만들어졌으며, 생성시간에 따라 정렬되고, 충돌 없음 보장 (https://github.com/segmentio/ksuid)
- ULID (https://github.com/ulid/javascript)
- ULID는 생성 순서를 밀리세컨 단위로 기록할 수 있어서, 생성 순서대로 정렬, 충돌 가능성 x
- KSUID (https://www.npmjs.com/package/ns-ksuid)
3. Reference- RDB pk uuid 베스트 프렉티스 : https://vladmihalcea.com/uuid-database-primary-key/
- https://velog.io/@devkingsejong/RDB에서-UUID를-무작정-사용하지-말아야-하는-이유
반응형'Spring Boot > DB' 카테고리의 다른 글
Kafka 기본개념 정리 (0) 2024.04.16 DB Replication이란? 사용 이유 (0) 2024.03.19 [DB] ACID란? Transaction이란? (0) 2023.06.28 [M1 Mac] Mysql 명령어 정리 (+ docker로 설치) (0) 2023.06.27 [SQL] Or 와 In 조건 뭐가 더 좋을까? SELECT OR vs IN, which is better performance. (0) 2022.07.15 - RDB 기준 사용시 성능 이슈 + 충돌 가능성이 있기 때문이다. (https://velog.io/@injoon2019/UUID-vs-ULID)