해결된 질문
24.07.13 19:28 작성
·
130
·
수정됨
0
안녕하세요!
좋은 강의 감사합니다!
이력 테이블의 대용량 데이터를 저장하기 위해
pk값 설정 시 정수형은 제한이 있다고 생각해서
시간+uuid로 복합키를 설정하려고 하는데요! 레인지 파티션도 사용하려구 하구요! 이렇게 할 경우 결국엔 String타입으로 저장되서 클러스터링 인덱스가 제대로 저장이 될까? 고민이 있었는데요!
이런 고민을 갖고 강의를 보게 되었는데, 강의 내용을 참고해보면
uuid값이 정수형보다 길어서 pk로 사용할 경우
메모리를 많이 차지해서 메모리크기가 큰 인스턴스를 사용해야 하므로 비용처리가 드는걸로 이해했습니다.
uuid대신 snowflake나 sonyflake 라이브러리로 대체하는게 더 좋다고 말씀해주셨는데, 해당 라이브러리가 망하거나(?) 제대로 작동을 안할경우의 위험성도 고려해봐야할것 같다는 생각이 들어서요! 제가 요 라이브러리는 잘 몰라서 여쭤보고자합니다!
그래서 질문은 아래 3가지 입니다!
Q1. 시간+uuid로 복합키로 pk를 설정하거나, 애플리케이션단에서 시간+uuid만든 String 타입을 pk를 설정하는것보다, snowflake 라이브러리 하나만 사용하는게 더 메모리가 효율적인게 맞을까요?
Q2. snowflake가 실제로 현업에서도 많이 쓰이는지 해당 라이브러리가 추후에 제대로 작동을 안할 경우에는 어떻게 대처를 해야 하는지 궁금합니다!
Q3. 추가적으로 uuid관련 내용이 Real Mysql 2권 중 어디에 있는지도 궁금합니다! 목차에서는 찾을 수가 없어서요 ㅠㅠ
답변 2
1
2024. 07. 19. 12:25
세진님, 안녕하세요.
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