primary key에 시간, uuid로 복합키로 설정하는 경우
안녕하세요!
좋은 강의 감사합니다!
이력 테이블의 대용량 데이터를 저장하기 위해
pk값 설정 시 정수형은 제한이 있다고 생각해서
시간+uuid로 복합키를 설정하려고 하는데요! 레인지 파티션도 사용하려구 하구요! 이렇게 할 경우 결국엔 String타입으로 저장되서 클러스터링 인덱스가 제대로 저장이 될까? 고민이 있었는데요!
이런 고민을 갖고 강의를 보게 되었는데, 강의 내용을 참고해보면
uuid값이 정수형보다 길어서 pk로 사용할 경우
메모리를 많이 차지해서 메모리크기가 큰 인스턴스를 사용해야 하므로 비용처리가 드는걸로 이해했습니다.
uuid대신 snowflake나 sonyflake 라이브러리로 대체하는게 더 좋다고 말씀해주셨는데, 해당 라이브러리가 망하거나(?) 제대로 작동을 안할경우의 위험성도 고려해봐야할것 같다는 생각이 들어서요! 제가 요 라이브러리는 잘 몰라서 여쭤보고자합니다!
그래서 질문은 아래 3가지 입니다!
Q1. 시간+uuid로 복합키로 pk를 설정하거나, 애플리케이션단에서 시간+uuid만든 String 타입을 pk를 설정하는것보다, snowflake 라이브러리 하나만 사용하는게 더 메모리가 효율적인게 맞을까요?
Q2. snowflake가 실제로 현업에서도 많이 쓰이는지 해당 라이브러리가 추후에 제대로 작동을 안할 경우에는 어떻게 대처를 해야 하는지 궁금합니다!
Q3. 추가적으로 uuid관련 내용이 Real Mysql 2권 중 어디에 있는지도 궁금합니다! 목차에서는 찾을 수가 없어서요 ㅠㅠ
Câu trả lời 2
1
세진님, 안녕하세요.
uuid대신 snowflake나 sonyflake 라이브러리로 대체하는게 더 좋다고 말씀해주셨는데, 해당 라이브러리가 망하거나(?) 제대로 작동을 안할경우의 위험성도 고려해봐야할것 같다는 생각이 들어서요! 제가 요 라이브러리는 잘 몰라서 여쭤보고자합니다!
Snowflake UID 라이브러리는 망해도 그 코드는 그대로 사용하시면 됩니다. Snowflake를 만든 회사를 믿고 사용하는 것이 아니라, In-House로 개발하는 시간을 단축하기 위해서 snowflake Uid를 사용하는 거라 보시면 됩니다. 이 라이브러리는 매우 매우 단순하고, 이미 많은 회사들에서 사용하고 있기 때문에 지금 코드의 안정성을 걱정하진 않으셔도 될거라 (개인적으로) 생각됩니다.
Q1. 시간+uuid로 복합키로 pk를 설정하거나, 애플리케이션단에서 시간+uuid만든 String 타입을 pk를 설정하는것보다, snowflake 라이브러리 하나만 사용하는게 더 메모리가 효율적인게 맞을까요?
UUID 값 하나라도 이미 충분히 긴 값인데, 여기에 시간까지 합치면 길이는 더 길어지는 거라.. 굳이 Snowflake랑 비교할 부분이 아닌 것 같아요.
Q2. snowflake가 실제로 현업에서도 많이 쓰이는지 해당 라이브러리가 추후에 제대로 작동을 안할 경우에는 어떻게 대처를 해야 하는지 궁금합니다!
이미 위에서 답변드린 듯 합니다.
Q3. 추가적으로 uuid관련 내용이 Real Mysql 2권 중 어디에 있는지도 궁금합니다! 목차에서는 찾을 수가 없어서요 ㅠㅠ
UUID 자체에 대한 내용은 없습니다. 다만 Real MySQL 서적에서는 UUID 컬럼 인덱스의 효율성에 대한 이해를 도울 수 있는 MySQL Clustering Index와 인덱스 키 값 크기에 대한 효율성 등을 자세히 설명드리는 챕터가 있으니, 참고 부탁드려요.
Real MySQL 8.0 (1 권)
4.2.1 프라이머리 키에 의한 클러스터링
8.3.3 B-Tree 인덱스 사용에 영향을 미치는 요소
8.3.3.1 인덱스 키 값의 크기
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
21
2
JPA Repository 질문이 있습니다!
1
29
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
31
1
DDD 는 마이바티스와 잘 맞지 않는건가요?
0
38
1
스프링부트 버전 문의드립니다.
0
28
1
Json 요청 처리
1
26
2
비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항
0
26
1
gRPC 실무에서 질문
0
30
2
수강기간 연장
0
18
1
Build 관련 문제 (테스트 관련 문제)
0
30
1
unique index가 걸린 상황에서 s-lock, x-lock 질문
0
506
2
질문드립니다.
0
250
1
Real MySQL 시즌1 part 2 에피소드 16의 인덱스가 null인 컬럼을 포함한다는 것에 대한 질문
0
170
1
시퀸셜하게 증가하지 않는 PK의 insert성능도 문제가 있을까요?
0
222
2
파티셔닝의 자원 사용 효율 증가 관련 질문
1
644
2
INSERT에서 shared lock을 거는 이유 질문
1
434
3
안녕하세요. 인덱스 관련 질문 있습니다.
0
370
2
테이블이 1:N 구조에서 N쪽 테이블에 유니크 제약조건에 의한 오류발생 회피 방법이 뭘까요?
0
262
1
복합 인덱스의 컬럼중 선행 컬럼을 조건에서 누락해도 인덱스가 사용될 수도 있나요?
0
239
1
SKIP LOCKED 부분에서 INNER JOIN이 아니고 LEFT JOIN이 걸릴수 있다면
0
184
1
단일 인덱스 크기, 전체 인덱스 크기 구하는 계산식
0
235
2
에피소드 21에 궁금한 점이 있어 질문드립니다.
0
233
2
에피소드 17번에서 skip locked 질문이 있습니다.
0
264
1
Real MySQL 시즌 1 - Part 1 or Part2 영상에 나오는 자료 공유 가능하나요?
1
364
1

