sourcecode

MongoDB_id(ObjectId)가 오름차순으로 생성됩니까?

copyscript 2023. 7. 13. 21:01
반응형

MongoDB_id(ObjectId)가 오름차순으로 생성됩니까?

_id 열에 문서가 컬렉션에 삽입되었을 때 타임스탬프가 어떻게 표시되는지 알고 있습니다.여기 타임스탬프로 변환할 수 있는 온라인 유틸리티가 있습니다. http://steveridout.github.io/mongo-object-time/

제가 궁금한 것은 객체 ID 문자열 자체가 오름차순을 유지하도록 보장되는지 여부입니다. 즉, 이 비교는 항상 참으로 반환됩니까?

"newest object id" > "second newest object id"

아니요, 어떤 보장도 없습니다.공식 문서에서(원답 시점):

ObjectId 값 순서와 생성 시간 사이의 관계는 1초 이내에 엄격하지 않습니다.여러 시스템 또는 단일 시스템의 여러 프로세스 또는 스레드가 1초 이내에 값을 생성하는 경우 ObjectId 값은 엄격한 삽입 순서를 나타내지 않습니다.클라이언트 드라이버가 mongod 프로세스가 아닌 ObjectId 값을 생성하기 때문에 클라이언트 간의 클럭 스큐는 값에 대해서도 엄격하지 않은 순서를 지정할 수 있습니다.

그리고 최신 문서에서

ObjectId 값은 시간이 지남에 따라 증가해야 하지만 반드시 단조로운 것은 아닙니다.그 이유는 다음과 같습니다.

시간 해상도가 1초만 포함되므로 동일한 초 내에 생성된 ObjectId 값은 시스템 클럭이 다를 수 있는 클라이언트에서 생성된 순서 및 A가 보장되지 않습니다.

위해서mongo version >= 3.4Objectid 생성이 약간 변경되었습니다.구조는 다음과 같습니다.

  • 4바이트 값은 유닉스 시대 이후의 초를 나타냅니다.
  • 5바이트 랜덤 값
  • 임의의 값으로 시작하는 3바이트 카운터

따라서 처음 4바이트는 여전히 유닉스 시대 이후의 몇 초이며, 여전히 거의 상승하고 있지만 엄격하지는 않습니다.

https://docs.mongodb.com/manual/reference/bson-types/ #objectid

_id: ObjectId(4바이트 타임스탬프, 3바이트 시스템 ID, 2바이트 프로세스 ID, 3바이트 증분)

이것이 ID 구조입니다.따라서 마지막 3바이트만 고유하게 증가합니다.그래서 당신의 질문에 대한 대답은 '그렇습니다'입니다.

언급URL : https://stackoverflow.com/questions/31057827/is-mongodb-id-objectid-generated-in-an-ascending-order

반응형