Dlaczego domyślny _id
? 24-znakowy ciąg szesnastkowy?
Domyślny unikalny identyfikator wygenerowany jako klucz podstawowy (_id
) dla dokumentu MongoDB to ObjectId
. Jest to 12-bajtowa wartość binarna, która często jest reprezentowana jako 24-znakowy ciąg szesnastkowy i jeden ze standardowych typów pól obsługiwanych przez MongoDB Specyfikacja BSON
.
12 bajtów ObjectId jest konstruowanych za pomocą:
- 4-bajtowa wartość reprezentująca sekundy od epoki Uniksa
- 3-bajtowy identyfikator maszyny
- dwubajtowy identyfikator procesu
- licznik 3-bajtowy (zaczynający się od losowej wartości)
Jakie znaczenie ma identyfikator obiektu?
ObjectIds (lub podobne identyfikatory wygenerowane zgodnie z GUID formuła) pozwalają na niezależne generowanie unikalnych identyfikatorów w systemie rozproszonym.
Możliwość niezależnego generowania unikalnego identyfikatora staje się bardzo ważna, gdy skalujesz do wielu serwerów aplikacji (lub być może wielu węzłów bazy danych w klaster z fragmentami ). Nie chcesz mieć wąskiego gardła centralnej koordynacji, takiego jak licznik sekwencji (np. jak w przypadku automatycznego przyrostu klucza podstawowego), i będziesz chciał wstawiać nowe dokumenty bez ryzyka, że nowy identyfikator okaże się duplikat.
ObjectId jest zazwyczaj generowany przez sterownik klienta
MongoDB , ale można je również wygenerować na serwerze MongoDB, jeśli sterownik klienta lub kod aplikacji nie został jeszcze dodany _id
pole.
Czy muszę używać domyślnego identyfikatora ObjectId?
Nie. Jeśli masz bardziej odpowiedni unikalny identyfikator do użycia, zawsze możesz podać własną wartość dla _id
. Może to być wartość pojedyncza lub wartość złożona wykorzystująca wiele pól.
Główne ograniczenia dotyczące _id
wartości są takie, że muszą być unikalne dla kolekcji i nie można zaktualizować ani usunąć _id
dla istniejącego dokumentu.