SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCore.Today
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis wellDaeMyung Kang
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)진태 이
 
루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기
루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기
루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기Junghyun Park
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표NAVER D2
 
루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해
루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해
루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해Junghyun Park
 
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Platform
 

Tendances (9)

Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
 
루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기
루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기
루비온레일즈 API 서버 - 2) api 서버에 대한 이해 및 맛보기
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표
 
루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해
루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해
루비온레일즈 API 서버 - 1) 인터넷 구조에 대한 대략적인 이해
 
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
 

Plus de DaeMyung Kang

Plus de DaeMyung Kang (20)

Count min sketch
Count min sketchCount min sketch
Count min sketch
 
Redis
RedisRedis
Redis
 
Ansible
AnsibleAnsible
Ansible
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
Redis acl
Redis aclRedis acl
Redis acl
 
Coffee store
Coffee storeCoffee store
Coffee store
 
Number system
Number systemNumber system
Number system
 
Bloomfilter
BloomfilterBloomfilter
Bloomfilter
 
Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x(unstable)Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x(unstable)
 
Redis From 2.8 to 4.x
Redis From 2.8 to 4.xRedis From 2.8 to 4.x
Redis From 2.8 to 4.x
 
Soma search
Soma searchSoma search
Soma search
 
Redis 2017
Redis 2017Redis 2017
Redis 2017
 
Using spark data frame for sql
Using spark data frame for sqlUsing spark data frame for sql
Using spark data frame for sql
 
How to study
How to studyHow to study
How to study
 

Why GUID is needed