MongoDB ObjectID Генератор - Креирајте јединствене BSON идентификаторе
Тренутно генеришите јединствене MongoDB ObjectID-ове помоћу нашег бесплатног онлајн алата. Креирајте важеће 12-бајтне BSON идентификаторе за тестирање, развој и базе података. Без потребе за инсталацијом.
Генератор MongoDB ObjectID
Dokumentacija
Шта је МонгоДБ објектИД?
ОбјектИД у МонгоДБ-у је вредност од 12 бајтова коју МонгоДБ подразумевано додељује пољу _id сваког документа. Записује се као 24 малих хексадекадних знакова, на пример 507f1f77bcf86cd799439011. Овај алат генерише од 1 до 100 важећих објектИД-ова одједном, директно у прегледачу, без потребе за везом са базом података.
Структура објектИД-а у МонгоДБ-у
ОбјектИД се састоји од три дела, постављена један за другим:
- Временска ознака (4 бајта). Број секунди од датума 1. јануар 1970. (униксне епохе), сачуван као неозначен број са најзначајнијим бајтом на почетку. Она бележи време настанка објектИД-а. Четири бајта садрже вредности од 0 до 4.294.967.295, па се поље након датума 7. фебруар 2106. у време 06:28:15 UTC враћа на 0.
- Случајна вредност (5 бајтова). Број који се једном насумично бира при покретању програма. Сваки објектИД који тај програм касније направи поново користи исту случајну вредност, па различити рачунари не морају да се усаглашавају.
- Бројач (3 бајта). Број који почиње на насумично изабраној вредности између 0 и 16.777.215 и повећава се за 1 за сваки нови објектИД. Ако пређе 16.777.215, враћа се на 0.
Када се делови поставе један за другим, изгледају овако:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Старији драјвери за МонгоДБ правили су средњи део од идентификатора рачунара и идентификатора процеса, а не од случајног броја. Садашњи драјвери, укључујући логику овог алата, уместо тога користе једну случајну вредност од 5 бајтова по процесу.
Формат и формула објектИД-а у МонгоДБ-у
Иза објектИД-а не стоји аритметичка формула, за разлику од процентуалног или каматног обрачуна. Он се саставља претварањем три броја у хексадекадни текст и њиховим спајањем један за другим:
- Узима се тренутно време у секундама од почетка униксне епохе, сведено у опсег 0 до 4.294.967.295 како би стало у четири бајта. Записује се као хексадекадни број од 8 цифара.
- Узима се непроменљива случајна вредност процеса, број од 0 до 2^40 − 1. Записује се као хексадекадни број од 10 цифара.
- Узима се тренутна вредност бројача, од 0 до 16.777.215. Записује се као хексадекадни број од 6 цифара, а затим се бројач повећава за 1 за следећи ИД.
- Три хексадекадна низа спајају се тим редом у један низ од 24 знака.
Решен пример
Претпоставимо да се програм покрене у тренутку униксног времена 1.700.000.000 секунди, што одговара датуму 14. новембар 2023. у 22:13:20 UTC. Он бира случајну вредност 3f2a91c8d4 и започиње бројач од 12.345.
- Временска ознака у хексадекадном запису:
6553f100 - Случајна вредност у хексадекадном запису:
3f2a91c8d4 - Бројач у хексадекадном запису:
003039
Њиховим спајањем добија се први објектИД:
6553f1003f2a91c8d4003039
Ако програм генерише други објектИД у истој секунди, временска ознака и случајна вредност остају исте, али се бројач повећава на 12.346 (00303a):
6553f1003f2a91c8d400303a
Читање објектИД-а такође функционише обрнуто. За 507f1f77bcf86cd799439011, његових првих 8 знакова, 507f1f77, декодира се у 1.350.508.407 секунди од епохе, што одговара датуму 17. октобар 2012. у 21:13:27 UTC.
Уобичајене употребе ОбјектИД-а у МонгоДБ-у
- Примарни кључеви. МонгоДБ аутоматски уписује објектИД у поље
_idдокумента, осим ако није наведена друга вредност. - Проналажење по времену настанка. Пошто је временска ознака уграђена, програм може да прочита приближно време настанка документа без засебног поља за датум.
- Сортирање према редоследу уметања. Сортирање докумената према
_idприближно их сортира према времену настанка, јер временска ознака долази прва у вредности. - Пробни и симулирани подаци. Програмери користе генерисане објектИД-ове за прављење примера докумената или аутоматизованих тестова без покретања базе података.
ОбјектИД и УУИД у МонгоДБ-у
УУИД (универзално јединствени идентификатор) је вредност величине 16 бајтова, односно четири бајта већа од објектИД-а. Стандардни УУИД је обично у потпуности случајан, па не открива време настанка нити се сортира према редоследу настанка. ОбјектИД је краћи и приближно поређан по времену, што је један од разлога због којих га МонгоДБ подразумевано користи, иако не пружа исту формалну гаранцију јединствености као правилно генерисани УУИД.
Најчешће постављана питања
За шта се користи објектИД у МонгоДБ-у?
То је подразумевана вредност коју МонгоДБ уписује у поље _id документа, па сваки документ добија јединствени кључ без додатног подешавања.
Да ли је загарантовано да су објектИД-ови у МонгоДБ-у јединствени? Не у формалном, математичком смислу, али је вероватноћа судара изузетно мала. Два објектИД-а морала би да имају исту случајну вредност и исти положај бројача у истој секунди, што се обично може догодити само унутар једног процеса.
Да ли се датум настанка може прочитати из објектИД-а? Да. Првих 8 хексадекадних знакова, односно 4 бајта, садржи број секунди од униксне епохе. Претварањем тог броја у датум добија се приближно време настанка.
Колико објектИД-ова овај генератор може да направи одједном? Од 1 до 100 у једној групи. Сви ИД-ови у једној групи деле исту случајну вредност на нивоу процеса, а сваки има бројач за један већи од претходног.
Могу ли се објектИД-ови из МонгоДБ-а користити ван МонгоДБ-а? Да. Пошто су то само вредности од 12 бајтова кодиране као хексадекадни текст, могу да служе као јединствени ИД-ови и у другим системима, мада шема ИД-ова коју користи сама база може боље одговарати њеним потребама.
Да ли је овај генератор повезан са стварном базом података МонгоДБ? Не. Он у потпуности ради у прегледачу и не чита из базе података нити уписује у њу.
Референце
- "ObjectId." Приручник за МонгоДБ, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." БСОН спецификације МонгоДБ-а, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." БСОН спецификација, https://bsonspec.org/spec.html.