Global Unique ID는
왜 필요할까?
charsyam@naver.com
트위터 같은 서비스를
만든다고 가정해 봅시다.
트윗을 하나 남깁니다.
해당 글을 찾을 수 있는
ID는 어떻게 만들어야 할까요?
트위터는 해당 글을
다음과 같은 형태로 표현합니다.
https://twitter.com/charsyam/status/586531712944840704
겹치면 될까요?
겹치면 될까요?
당연히 앙되용!!!
가장 간단한 방법은?
RDBMS의
Auto Increment
RDBMS가 알아서 해줍니다.
Auto Increment(tweet table)
ID(Auto Increment) User tweet Like_count Created_At
Insert into tweet values
(0, 0, ‘test’, 0, now());
를 실행하면
Auto Increment(tweet table)
ID(Auto Increment) User tweet Like_count Created_At
1 0 test 0 2019-06-07 00:50:36
Insert into tweet values
(0, 0, ‘test’, 0, now());
를 실행하면
Auto Increment(tweet table)
ID(Auto Increment) User tweet Like_count Created_At
1 0 test 0 2019-06-07 00:50:36
또 Insert into tweet values
(0, 0, ‘test’, 0, now());
를 실행하면
Auto Increment(tweet table)
ID(Auto Increment) User tweet Like_count Created_At
1 0 test 0 2019-06-07 00:50:36
2 0 test 0 2019-06-07 00:50:43
또 Insert into tweet values
(0, 0, ‘test’, 0, now());
를 실행하면
Auto Increment(tweet table)
ID(Auto Increment) User tweet Like_count Created_At
1 0 test 0 2019-06-07 00:50:36
2 0 test 0 2019-06-07 00:50:43
자동으로 table 에서 유니크한
값으로 계속 증가합니다.
모든게 해결?
여러분의 서비스가 너무 잘되서
디비 하나에 모든 tweet이
저장이 되지 않습니다.
DB가 두 대가 필요해졌어요.
DB서버가 꽉 찼어요.
Tweet #1
Tweet #2
Tweet #3
Tweet #4
Tweet #5
DB서버 #1
어떻게 해야할가요?
제일 쉬운 방법
현재 DB서버 #1에
1~100000
번 까지 저장되어 있다면
그 뒤에 생기는 100001 부터
전부 DB 서버 #2에만
생성되게 한다.
(auto increment에 시작값을 줄 수 있어요.)
DB 서버가 2 대…
Tweet #100001Tweet #1
Tweet #2
Tweet #3
……
Tweet #100000
Tweet #100002
새로 생성은
DB 서버 #2로
DB서버 #1 DB서버 #2
그러면 잘 돌까요?
그런데 이러면
새로 생성되는 작업은
디비 서버 2에서만
발생합니다.
DB 서버 #2만 부하가 !!!
Tweet #100001Tweet #1
Tweet #2
Tweet #3
……
Tweet #100000
Tweet #100002
새로 생성은
전부!!!!
DB 서버 #2로
DB서버 #1 DB서버 #2
심지어 DB 서버 #1에서는
데이터가 지워지기도
Tweet #100001Tweet #1
Tweet #2
Tweet #3
……
Tweet #100000
Tweet #100002
새로 생성은
전부!!!!
DB 서버 #2로
DB서버 #1 DB서버 #2
데이터가 더 늘어서
DB 서버 #3이 생기면
이제 3번만 일하게 됩니다.
DB 서버 #3만 부하가 !!!
Tweet #100001Tweet #1
Tweet #2
Tweet #3
……
Tweet #100000
Tweet #100002
DB서버 #1 DB서버 #2
Tweet #200001
Tweet #200002
DB서버 #3
새로 생성은
전부!!!!
DB 서버 #3로
Tweet #100003
……
Tweet #200000
우리의 목표는
다들 비슷하게 일하게 하는 것
데이터를 섞으면
되지 않을까요?
아까 그 DB 서버 2대…
Tweet #100001Tweet #1
Tweet #2
Tweet #3
……
Tweet #100000
Tweet #100002
DB서버 #1 DB서버 #2
어떻게 섞어야 하나요?
이러면 Auto Increment 값은?
Tweet #100001Tweet #1
Tweet #2 Tweet #3
……
Tweet #100000Tweet #130002
DB서버 #1 DB서버 #2
다른 경우를 한번 생각해 봅시다.
게임 서버 처럼
완전 서로 독립이라면?
서로 독립적이라…
Tweet #1
Tweet #2
Tweet #3
티스라오 서버 카먼 서버 노센레이어 서버
Tweet #1
Tweet #2
Tweet #3
Tweet #1
Tweet #2
Tweet #3
…… …… ……
서버를 줄여서
데이터를 합쳐야 한다면?
어떻게 합쳐야 할까요?
그냥 처음부터
절대로 유니크한 값(GUID)을
쓰면 되지 않을까?
GUID를 만드는 방법은
다음 슬라이드를 참고하세요.
https://www.slideshare.net/charsyam2/guid-40504314
Thank you!

Why GUID is needed