2013-05-22 2 views
0

하나의 MongoDB 인스턴스로 작업하는 두 클라이언트가«forceServerObjectId : true»없이 동시에 수행하고 삽입하면 어떻게됩니까? 동일한 ObjectID를 생성 할 수 있습니까? 충돌이있을 수 있습니까?MongoDB 에의 병렬 삽입

답변

1

모든 컬렉션의 _id 필드에는 동일한 _id가있는 두 개체가 동일한 컬렉션에 존재할 수 없도록하는 고유 한 인덱스가 있습니다.

동일한 _id 값을 가진 두 객체가 collection.save과 함께 저장되면 하나의 문서가 다른 문서를 대체합니다.

collection.insert으로 저장하면 삽입 중 하나가 중복 키 오류로 실패합니다.

그러나 MongoDB ObjectIDs에는 24 비트 machine-ID가 포함되어 있습니다. 이로 인해 동일한 컴퓨터 ID가없는 한 두 클라이언트가 동일한 ID를 생성 할 수 없습니다. 그리고 그럴 가능성은 희박합니다. 물론 MongoDB 드라이버 (또는 셸)가 ObjectID를 자동으로 생성하게 할 때만 적용됩니다. MongoDB에서는 수동으로 설정할 때 _id 필드의 값으로 모든 유형의 값을 사용할 수 있습니다. 이 작업을 수행 할 때 고유성을 보장하는 것은 사용자의 책임입니다.