티스토리 뷰
728x90
반응형
https://www.mongodb.com/docs/manual/reference/method/ObjectId/
mongodb는 ObjectId라는 GUID 체계를 사용하고 있습니다
ObjectId는 총 12바이트로 구성이 되어있는데
4바이트는 유닉스 타임스탬프
5바이트는 프로세스별로 한번 생성되는 랜덤한 값
3바이트는 자동증가하는카운터
이렇게 구성이 되어있습니다
mongodb console에서
ObjectId().str
을 입력하면
아래와같이 24글자의 string이 리턴됩니다
62b65f304e0c4bc668968f95
mongodb를 사용한다면 익숙하게 생긴 값입니다
이는 mongodb objectId를 구성하는 12byte의 값이 헥사형태로 표현된 것입니다
1byte는 8bit죠, 2^8은 256이니깐, 16*16 으로 256을 표현할수 있기 때문에
16진수 2글자로 1byte가 표현됩니다
그래서 총 12byte를 헥사로 표현할때 24개의 문자열로 표현이 되는것이지요
그럼 한번 이 문자열을 쪼개서 진짜 맞는지 확인해보겠습니다
const ObjectId = require("mongodb").ObjectId;
for (let i = 0; i < 3; i++) {
const newObjectId = new ObjectId();
let ctr = 0;
const id = newObjectId.toString();
var timestamp = id.slice(ctr, (ctr += 8));
var machineID = id.slice(ctr, (ctr += 6));
var processID = id.slice(ctr, (ctr += 4));
var counter = id.slice(ctr, (ctr += 6));
console.log("===========");
console.log("id:", id);
console.log("timestamp:", timestamp);
console.log("machineID:", machineID);
console.log("processID:", processID);
console.log("counter:", counter);
console.log("timestamp:", parseInt(timestamp, 16));
console.log("machineID:", parseInt(machineID, 16));
console.log("processID:", parseInt(processID, 16));
console.log("counter:", parseInt(counter, 16));
console.log("timstamp:", newObjectId.getTimestamp().getTime() / 1000);
console.log("===========");
}
샘플코드입니다
id: 62b669348b1da528dc9f8967
timestamp: 62b66934
machineID: 8b1da5
processID: 28dc
counter: 9f8967
timestamp: 1656121652
machineID: 9117093
processID: 10460
counter: 10455399
timstamp: 1656121652
실행하면 이와 같은 결과가 나타나는데
동일한 머신, 동일한 프로세스에서 실행하는 경우 machine ID와 process ID는 항상 같은 값을 리턴하고
counter 값이 계속 증가합니다
timestamp는 당연히 생성된 시간을 나타내구요
이러한 구조로 mongodb는 sortable한 GUID로 사용가능한 objectId를 만들고 있습니다
728x90
반응형
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
m1, m2 silicon mac에서 cocoapods 설치하기 (0) | 2022.07.12 |
---|---|
무료 서버 제공주는 곳 정보 푼다 (0) | 2022.07.06 |
저렴하게 분산 unique primary key 만들기 (0) | 2022.06.28 |
hset을 이용하여 메모리 효율적으로 redis에 저장하기 (0) | 2022.06.27 |
캐싱(caching) 전략 (0) | 2022.06.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 네이버
- 대학생
- 모바일
- 스마트폰
- 어플리케이션
- 게임
- 아이디어
- 앱
- CSS
- 벤처
- 공모전
- 아이폰
- 웹표준
- 구글
- 안드로이드
- 소프트웨어
- 경진대회
- AWS
- Apple
- JavaScript
- 애플
- 자바스크립트
- android
- 트위터
- 창업
- php
- 앱스토어
- iPhone
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함