Proč je výchozí _id
24znakový hexadecimální řetězec?
Výchozí jedinečný identifikátor vygenerovaný jako primární klíč (_id
) pro dokument MongoDB je ObjectId
. Toto je 12bajtová binární hodnota, která je často reprezentována jako 24znakový hexadecimální řetězec a jeden ze standardních typů polí podporovaných MongoDB Specifikace BSON
.
12 bajtů ObjectId je vytvořeno pomocí:
- 4bajtová hodnota představující sekundy od epochy Unixu
- 3bajtový identifikátor stroje
- 2bajtové ID procesu
- 3bajtový čítač (začínající náhodnou hodnotou)
Jaká je důležitost ObjectId?
ObjectIds (nebo podobné identifikátory generované podle GUID vzorec) umožňují nezávislé generování jedinečných identifikátorů v distribuovaném systému.
Schopnost nezávisle generovat jedinečné ID se stává velmi důležitou při škálování na více aplikačních serverů (nebo možná více databázových uzlů v sharded cluster ). Nechcete mít centrální koordinační úzké hrdlo, jako je počítadlo sekvencí (např. jako byste mohli mít u automaticky se zvyšujícího primárního klíče), a budete chtít vkládat nové dokumenty bez rizika, že se nový identifikátor ukáže jako duplikát.
ObjectId obvykle generuje váš MongoDB klientský ovladač
, ale lze je také vygenerovat na serveru MongoDB, pokud váš klientský ovladač nebo kód aplikace nebo ještě nepřidali _id
pole.
Musím použít výchozí ObjectId?
Ne. Pokud máte k použití vhodnější jedinečný identifikátor, můžete vždy zadat svou vlastní hodnotu pro _id
. Může to být buď jedna hodnota, nebo složená hodnota pomocí více polí.
Hlavní omezení _id
hodnoty jsou takové, že musí být jedinečné pro kolekci a nemůžete aktualizovat ani odebrat _id
pro existující dokument.