Przejdź do treści

Generator ObjectID MongoDB - Tworzenie unikalnych identyfikatorów BSON

Natychmiastowe generowanie unikalnych identyfikatorów ObjectID MongoDB za pomocą naszego darmowego narzędzia online. Twórz prawidłowe 12-bajtowe identyfikatory BSON do testowania, programowania i operacji bazodanowych. Bez konieczności instalacji.

Generator identyfikatorów ObjectID w MongoDB

Kalkulator załadunku...
📚

Dokumentacja

Czym jest ObjectID MongoDB?

ObjectID MongoDB to wartość o długości 12 bajtów, którą MongoDB domyślnie przypisuje polu _id każdego dokumentu. Jest zapisywana jako 24 małych znaków szesnastkowych, na przykład 507f1f77bcf86cd799439011. To narzędzie generuje jednocześnie od 1 do 100 prawidłowych identyfikatorów ObjectID bezpośrednio w przeglądarce, bez konieczności nawiązywania połączenia z bazą danych.

Struktura ObjectID MongoDB

ObjectID składa się z trzech części umieszczonych kolejno:

  • Znacznik czasu (4 bajty). Liczba sekund od 1 stycznia 1970 (początku epoki uniksowej), przechowywana jako liczba bez znaku w kolejności big-endian. Określa moment utworzenia ObjectID. Cztery bajty przechowują wartości od 0 do 4 294 967 295, więc po 7 lutego 2106, o 06:28:15 UTC, pole wraca do wartości 0.
  • Wartość losowa (5 bajtów). Liczba wybierana losowo jeden raz podczas uruchamiania programu. Każdy kolejny ObjectID utworzony przez ten program wykorzystuje tę samą wartość losową, dzięki czemu różne komputery nie muszą się koordynować.
  • Licznik (3 bajtów). Liczba rozpoczynająca się od losowej wartości z przedziału od 0 do 16 777 215 i zwiększana o 1 dla każdego nowego ObjectID. Po przekroczeniu 16 777 215 wraca do wartości 0.

Po ułożeniu części jedna za drugą wyglądają one tak:

1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2

Starsze sterowniki MongoDB tworzyły środkową część na podstawie identyfikatora maszyny i identyfikatora procesu, a nie liczby losowej. Obecne sterowniki, w tym mechanizm używany przez to narzędzie, wykorzystują zamiast tego jedną losową wartość o długości 5 bajtów dla każdego procesu.

Format i wzór ObjectID MongoDB

ObjectID nie ma wzoru arytmetycznego, w przeciwieństwie do wartości procentowej czy obliczania odsetek. Jest tworzony przez przekształcenie trzech liczb na zapis szesnastkowy i połączenie ich kolejno:

  1. Weź bieżący czas w sekundach od początku epoki uniksowej i ogranicz go do zakresu od 0 do 4 294 967 295, aby zmieścił się w czterech bajtach. Zapisz go jako 8-cyfrową liczbę szesnastkową.
  2. Weź stałą wartość losową procesu, czyli liczbę od 0 do 2^40 − 1. Zapisz ją jako 10-cyfrową liczbę szesnastkową.
  3. Weź bieżącą wartość licznika z zakresu od 0 do 16 777 215. Zapisz ją jako 6-cyfrową liczbę szesnastkową, a następnie zwiększ licznik o 1 dla następnego identyfikatora.
  4. Połącz trzy ciągi szesnastkowe w tej kolejności w jeden ciąg o długości 24 znaków.

Przykład obliczeniowy

Załóżmy, że program uruchamia się w czasie uniksowym 1 700 000 000 sekund, czyli 14 listopada 2023 o 22:13:20 UTC. Wybiera wartość losową 3f2a91c8d4 i rozpoczyna licznik od 12 345.

  • Znacznik czasu w zapisie szesnastkowym: 6553f100
  • Wartość losowa w zapisie szesnastkowym: 3f2a91c8d4
  • Licznik w zapisie szesnastkowym: 003039

Po połączeniu tych elementów otrzymujemy pierwszy ObjectID:

6553f1003f2a91c8d4003039

Jeśli program wygeneruje drugi ObjectID w tej samej sekundzie, znacznik czasu i wartość losowa pozostaną bez zmian, ale licznik wzrośnie do 12 346 (00303a):

6553f1003f2a91c8d400303a

Odczyt ObjectID działa również w drugą stronę. Wartość 507f1f77bcf86cd799439011 ma pierwsze 8 znaków, 507f1f77, które dekodują się do 1 350 508 407 sekund od początku epoki, czyli do 17 października 2012 o 21:13:27 UTC.

Typowe zastosowania ObjectID MongoDB

  • Klucze główne. MongoDB automatycznie umieszcza ObjectID w polu _id dokumentu, chyba że zostanie podana inna wartość.
  • Wyszukiwanie według czasu utworzenia. Ponieważ znacznik czasu jest osadzony w identyfikatorze, program może odczytać przybliżony czas utworzenia dokumentu bez osobnego pola daty.
  • Sortowanie według kolejności wstawiania. Sortowanie dokumentów według _id w przybliżeniu sortuje je według czasu utworzenia, ponieważ znacznik czasu znajduje się na początku wartości.
  • Dane testowe i pozorowane. Programiści używają wygenerowanych identyfikatorów ObjectID do tworzenia przykładowych dokumentów lub testów automatycznych bez uruchamiania bazy danych.

ObjectID MongoDB a UUID

UUID (uniwersalny unikatowy identyfikator) to wartość o długości 16 bajtów, czyli o cztery bajty większa niż ObjectID. Standardowy UUID jest zwykle w całości losowy, dlatego nie ujawnia czasu utworzenia ani nie sortuje się według kolejności tworzenia. ObjectID jest krótszy i w przybliżeniu uporządkowany chronologicznie, co jest jednym z powodów, dla których MongoDB używa go domyślnie, choć nie zapewnia takiej samej formalnej gwarancji unikatowości jak prawidłowo wygenerowany UUID.

Często zadawane pytania

Do czego służy ObjectID MongoDB? To domyślna wartość umieszczana przez MongoDB w polu _id dokumentu, dzięki czemu każdy dokument otrzymuje unikatowy klucz bez dodatkowej konfiguracji.

Czy unikatowość ObjectID MongoDB jest gwarantowana? Nie w sensie formalnym i matematycznym, ale kolizje są niezwykle mało prawdopodobne. Dwa identyfikatory ObjectID musiałyby mieć tę samą wartość losową i tę samą pozycję licznika w tej samej sekundzie, co zwykle może zdarzyć się tylko w obrębie jednego procesu.

Czy z ObjectID można odczytać datę utworzenia? Tak. Pierwsze 8 znaków szesnastkowych, czyli 4 bajty, przechowują liczbę sekund od początku epoki uniksowej. Przekształcenie tej liczby w datę daje przybliżony czas utworzenia.

Ile identyfikatorów ObjectID może jednocześnie wygenerować to narzędzie? Od 1 do 100 w jednej partii. Wszystkie identyfikatory w partii współdzielą tę samą wartość losową procesu, a każdy z nich ma licznik o jeden większy niż poprzedni.

Czy identyfikatorów ObjectID MongoDB można używać poza MongoDB? Tak. Ponieważ są to jedynie wartości o długości 12 bajtów zakodowane jako zapis szesnastkowy, mogą służyć jako unikatowe identyfikatory również w innych systemach, choć własny schemat identyfikatorów danej bazy danych może lepiej odpowiadać jej potrzebom.

Czy to narzędzie jest połączone z prawdziwą bazą danych MongoDB? Nie. Działa całkowicie w przeglądarce i nie odczytuje danych z żadnej bazy ani nie zapisuje w niej danych.

Piśmiennictwo

  1. "ObjectId." Podręcznik MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Specyfikacje MongoDB BSON, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Specyfikacja BSON, https://bsonspec.org/spec.html.