Генератор на MongoDB ObjectID - Създаване на уникални BSON идентификатори
Генерирайте уникални MongoDB ObjectID моментално с нашия безплатен онлайн инструмент. Създавайте валидни 12-байтови BSON идентификатори за тестване, разработка и бази данни. Не е необходима инсталация.
Генератор на MongoDB ObjectID
Документация
Какво представлява ObjectID в MongoDB?
ObjectID в MongoDB е стойност от 12 байта, която MongoDB присвоява по подразбиране на полето _id на всеки документ. Тя се записва като 24 малки шестнадесетични знака, например 507f1f77bcf86cd799439011. Този инструмент генерира между 1 и 100 валидни ObjectID стойности наведнъж директно в браузъра, без да е необходима връзка с база данни.
Структура на ObjectID в MongoDB
ObjectID се състои от три части, разположени една след друга:
- Времеви печат (4 байта). Броят секунди от 1 януари 1970 г. (епохата на Unix), съхранен като беззнаково число в ред от най-старшия към най-младшия байт. Той показва кога е създаден ObjectID. Четирите байта могат да съдържат стойности от 0 до 4 294 967 295, така че полето се връща към 0 след 7 февруари 2106 г., 06:28:15 UTC.
- Случайна стойност (5 байта). Число, избрано на случаен принцип еднократно при стартиране на програмата. Всеки ObjectID, създаден от тази програма след това, използва повторно същата случайна стойност, така че на различните компютри не им се налага да се координират.
- Брояч (3 байта). Число, което започва от случайна точка между 0 и 16 777 215 и се увеличава с 1 за всеки нов ObjectID. Ако надхвърли 16 777 215, се връща към 0.
Подредени един след друг, частите изглеждат така:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2По-старите драйвери на MongoDB изграждаха средната част от идентификатор на машината и идентификатор на процеса, а не от случайно число. Съвременните драйвери, включително логиката зад този инструмент, използват една случайна стойност от 5 байта за всеки процес.
Формат и формула на ObjectID в MongoDB
Зад ObjectID няма аритметична формула, за разлика от процент или изчисление на лихва. Той се съставя чрез преобразуване на три числа в шестнадесетичен текст и свързването им едно след друго:
- Вземете текущото време в секунди от епохата на Unix, приведено в диапазона 0 до 4 294 967 295, за да се побере в четири байта. Запишете го като шестнадесетично число с 8 цифри.
- Вземете фиксираната случайна стойност на процеса — число от 0 до 2^40 − 1. Запишете го като шестнадесетично число с 10 цифри.
- Вземете текущата стойност на брояча от 0 до 16 777 215. Запишете я като шестнадесетично число с 6 цифри, след което увеличете брояча с 1 за следващия идентификатор.
- Свържете трите шестнадесетични низа в този ред в един низ от 24 знака.
Пример с решение
Нека една програма стартира при Unix време 1 700 000 000 секунди, което е 14 ноември 2023 г., 22:13:20 UTC. Тя избира случайна стойност 3f2a91c8d4 и започва брояча от 12 345.
- Времеви печат в шестнадесетичен вид:
6553f100 - Случайна стойност в шестнадесетичен вид:
3f2a91c8d4 - Брояч в шестнадесетичен вид:
003039
Свързването им дава първия ObjectID:
6553f1003f2a91c8d4003039
Ако програмата генерира втори ObjectID в същата секунда, времевият печат и случайната стойност остават същите, но броячът се увеличава до 12 346 (00303a):
6553f1003f2a91c8d400303a
Прочитането на ObjectID също работи в обратна посока. При 507f1f77bcf86cd799439011 първите му 8 знака, 507f1f77, се декодират до 1 350 508 407 секунди от епохата, което е 17 октомври 2012 г., 21:13:27 UTC.
Обичайни употреби на ObjectID в MongoDB
- Първични ключове. MongoDB автоматично поставя ObjectID в полето
_idна документа, освен ако не бъде зададена друга стойност. - Справка по време на създаване. Тъй като времевият печат е вграден, програмата може да прочете приблизителното време на създаване на документа без отделно поле за дата.
- Сортиране по ред на вмъкване. Сортирането на документите по
_idприблизително ги подрежда по време на създаване, тъй като времевият печат е в началото на стойността. - Тестови и примерни данни. Разработчиците използват генерирани ObjectID стойности за създаване на примерни документи или автоматизирани тестове, без да стартират база данни.
ObjectID в MongoDB спрямо UUID
UUID (универсален уникален идентификатор) е стойност от 16 байта, тоест с четири байта по-голяма от ObjectID. Стандартният UUID обикновено е изцяло случаен, така че не разкрива времето на създаване и не се сортира по реда на създаване. ObjectID е по-кратък и приблизително подреден по време, което е една от причините MongoDB да го използва по подразбиране, макар че не предоставя същата формална гаранция за уникалност като правилно генерирания UUID.
Често задавани въпроси
За какво се използва ObjectID в MongoDB?
Това е стойността по подразбиране, която MongoDB поставя в полето _id на документа, така че всеки документ получава уникален ключ без допълнителна настройка.
Гарантирано ли е, че ObjectID стойностите в MongoDB са уникални? Не в строг математически смисъл, но сблъсъците са изключително малко вероятни. Две ObjectID стойности трябва да имат една и съща случайна стойност и една и съща позиция на брояча в същата секунда, което обикновено се случва само в рамките на един процес.
Може ли датата на създаване да се прочете от ObjectID? Да. Първите 8 шестнадесетични знака, 4 байта, съдържат броя секунди от епохата на Unix. Преобразуването на това число в дата дава приблизителното време на създаване.
Колко ObjectID стойности може да създаде този генератор наведнъж? Между 1 и 100 на партида. Всички идентификатори в една партида споделят една и съща случайна стойност за процеса, а броячът на всеки следващ е с единица по-голям от предходния.
Могат ли ObjectID стойностите в MongoDB да се използват извън MongoDB? Да. Тъй като представляват само стойности от 12 байта, кодирани като шестнадесетичен текст, те могат да служат като уникални идентификатори и в други системи, макар че собствената схема за идентификатори на дадена база данни може да е по-подходяща.
Свързан ли е този генератор с реална база данни MongoDB? Не. Той работи изцяло в браузъра и не чете от база данни и не записва в такава.
Източници
- "ObjectId." Ръководство за MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." BSON спецификации на MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." Спецификация на BSON, https://bsonspec.org/spec.html.