MongoDB ObjectID ģenerators - Izveidojiet unikālus BSON identifikatorus
Momentāli ģenerējiet unikālus MongoDB ObjectID ar mūsu bezmaksas tiešsaistes rīku. Izveidojiet derīgus 12 baitu BSON identifikatorus testēšanai, izstrādei un datu bāzes operācijām. Nav nepieciešama instalēšana.
MongoDB ObjectID ģenerators
Dokumentācija
Kas ir MongoDB ObjectID?
MongoDB ObjectID ir 12 baitus liela vērtība, ko MongoDB pēc noklusējuma piešķir katra dokumenta laukam _id. To pieraksta ar 24 mazajiem heksadecimālajiem burtiem un cipariem, piemēram, 507f1f77bcf86cd799439011. Šis rīks pārlūkprogrammā tieši ģenerē no 1 līdz 100 derīgiem ObjectID vienlaikus, un datubāzes savienojums nav nepieciešams.
MongoDB ObjectID struktūra
ObjectID veido trīs cits aiz cita novietotas daļas:
- Laikspiedogs (4 baiti). Sekunžu skaits kopš 1970. gada 1. janvāris (Unix laika sākuma), kas saglabāts kā neparakstīts big-endian skaitlis. Tas norāda, kad ObjectID tika izveidots. Četri baiti var glabāt vērtības no 0 līdz 4 294 967 295, tāpēc lauks pēc datuma 2106. gada 7. februāris plkst. 06:28:15 UTC atkal kļūst par 0.
- Nejaušā vērtība (5 baiti). Skaitlis, kas nejauši izvēlēts vienu reizi, programmai startējot. Visi šīs programmas vēlāk izveidotie ObjectID atkārtoti izmanto to pašu nejaušo vērtību, tāpēc dažādiem datoriem nav jākoordinējas.
- Skaitītājs (3 baiti). Skaitlis, kas sākas nejaušā punktā no 0 līdz 16 777 215 un katram jaunam ObjectID palielinās par 1. Ja tas pārsniedz 16 777 215, tas atkal kļūst par 0.
Savienojot daļas citu aiz citas, iegūst šādu struktūru:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Vecākie MongoDB draiveri vidējo daļu veidoja no datora identifikatora un procesa ID, nevis no nejauša skaitļa. Pašreizējie draiveri, tostarp šī rīka pamatā esošā loģika, katram procesam izmanto vienu nejaušu 5 baitu vērtību.
MongoDB ObjectID formāts un formula
ObjectID pamatā nav aritmētiskas formulas, atšķirībā no procentuālā aprēķina vai procentu likmes aprēķina. To izveido, pārvēršot trīs skaitļus heksadecimālā tekstā un savienojot tos citu aiz cita:
- Paņem pašreizējo laiku sekundēs kopš Unix laika sākuma, ietverot to diapazonā no 0 līdz 4 294 967 295, lai tas ietilptu četros baitos. Pieraksta to kā 8 ciparu heksadecimālu skaitli.
- Paņem procesa fiksēto nejaušo vērtību — skaitli no 0 līdz 2^40 − 1. Pieraksta to kā 10 ciparu heksadecimālu skaitli.
- Paņem skaitītāja pašreizējo vērtību no 0 līdz 16 777 215. Pieraksta to kā 6 ciparu heksadecimālu skaitli un pēc tam palielina skaitītāju par 1 nākamajam ID.
- Savieno trīs heksadecimālās virknes šādā secībā vienā 24 rakstzīmju virknē.
Aprēķina piemērs
Pieņemsim, ka programma sāk darboties Unix laikā 1 700 000 000 sekundes, kas ir 2023. gada 14. novembris plkst. 22:13:20 UTC. Tā izvēlas nejaušo vērtību 3f2a91c8d4 un sāk skaitītāju ar 12 345.
- Laikspiedogs heksadecimālajā formātā:
6553f100 - Nejaušā vērtība heksadecimālajā formātā:
3f2a91c8d4 - Skaitītājs heksadecimālajā formātā:
003039
Savienojot šīs vērtības, iegūst pirmo ObjectID:
6553f1003f2a91c8d4003039
Ja programma tajā pašā sekundē ģenerē otru ObjectID, laikspiedogs un nejaušā vērtība paliek nemainīgi, bet skaitītājs palielinās līdz 12 346 (00303a):
6553f1003f2a91c8d400303a
ObjectID var arī nolasīt pretējā virzienā. Dotajā 507f1f77bcf86cd799439011 pirmās 8 rakstzīmes — 507f1f77 — tiek atkodētas kā 1 350 508 407 sekundes kopš laika sākuma, kas ir 2012. gada 17. oktobris plkst. 21:13:27 UTC.
Biežākie MongoDB ObjectID lietojumi
- Primārās atslēgas. MongoDB automātiski ievieto ObjectID dokumenta laukā
_id, ja vien nav norādīta cita vērtība. - Meklēšana pēc izveides laika. Tā kā laikspiedogs ir iekļauts vērtībā, programma var nolasīt aptuveno dokumenta izveides laiku bez atsevišķa datuma lauka.
- Kārtošana pēc ievietošanas secības. Kārtojot dokumentus pēc
_id, tie aptuveni tiek sakārtoti pēc izveides laika, jo vērtības sākumā atrodas laikspiedogs. - Testa un imitācijas dati. Izstrādātāji izmanto ģenerētus ObjectID, lai veidotu paraugdokumentus vai automatizētus testus, nepalaižot datubāzi.
MongoDB ObjectID un UUID
UUID (universāli unikāls identifikators) ir 16 baitu vērtība, par četriem baitiem lielāka nekā ObjectID. Standarta UUID parasti visā garumā ir nejaušs, tāpēc tas neatklāj izveides laiku un netiek kārtots pēc izveides secības. ObjectID ir īsāks un aptuveni sakārtots pēc laika; tas ir viens no iemesliem, kāpēc MongoDB to izmanto pēc noklusējuma, lai gan tas nenodrošina tādu pašu formālu unikalitātes garantiju kā pareizi ģenerēts UUID.
Biežāk uzdotie jautājumi
Kādam nolūkam izmanto MongoDB ObjectID?
Tā ir noklusējuma vērtība, ko MongoDB ievieto dokumenta laukā _id, tāpēc katrs dokuments iegūst unikālu atslēgu bez papildu iestatīšanas.
Vai MongoDB ObjectID unikalitāte ir garantēta? Ne formālā, matemātiskā nozīmē, taču sadursmes ir ārkārtīgi maz ticamas. Diviem ObjectID būtu nepieciešama viena un tā pati nejaušā vērtība un viena un tā pati skaitītāja pozīcija tajā pašā sekundē, kas parasti iespējams tikai vienā procesā.
Vai no ObjectID var nolasīt izveides datumu? Jā. Pirmās 8 heksadecimālās rakstzīmes jeb 4 baiti satur sekunžu skaitu kopš Unix laika sākuma. Pārvēršot šo skaitli datumā, iegūst aptuveno izveides laiku.
Cik ObjectID šis ģenerators var izveidot vienlaikus? No 1 līdz 100 vienā paketē. Visiem vienas paketes ID ir viena un tā pati procesa nejaušā vērtība, un katra skaitītājs ir par vienu lielāks nekā iepriekšējā ID skaitītājs.
Vai MongoDB ObjectID var izmantot ārpus MongoDB? Jā. Tā kā tās ir tikai 12 baitu vērtības, kas kodētas heksadecimālā tekstā, tās var izmantot kā unikālus ID arī citās sistēmās, lai gan datubāzes pašas ID shēma var būt piemērotāka tās vajadzībām.
Vai šis ģenerators ir savienots ar īstu MongoDB datubāzi? Nē. Tas pilnībā darbojas pārlūkprogrammā un nelasa no datubāzes, kā arī tajā neko neieraksta.
Atsauces
- "ObjectId." MongoDB rokasgrāmata, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON specifikācijas, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON specifikācija, https://bsonspec.org/spec.html.