Générateur d'ObjectID MongoDB - Créer des Identifiants BSON Uniques
Générez instantanément des ObjectIDs MongoDB uniques avec notre outil en ligne gratuit. Créez des identifiants BSON valides de 12 octets pour les tests, le développement et les opérations de base de données. Aucune installation requise.
Générateur d'ObjectID MongoDB
Documentation
Qu'est-ce qu'un ObjectID MongoDB ?
Un ObjectID MongoDB est une valeur de 12 octets que MongoDB attribue par défaut au champ _id de chaque document. Il s'écrit sous la forme de 24 caractères hexadécimaux minuscules, par exemple 507f1f77bcf86cd799439011. Cet outil génère de 1 à 100 ObjectID valides à la fois, directement dans le navigateur, sans connexion à une base de données.
Structure d'un ObjectID MongoDB
Un ObjectID est constitué de trois parties placées l'une à la suite de l'autre :
- Horodatage (4 octets). Il s'agit du nombre de secondes écoulées depuis le 1er janvier 1970 (l'époque Unix), stocké sous la forme d'un nombre non signé en ordre gros-boutiste. Il indique la date de création de l'ObjectID. Quatre octets peuvent contenir des valeurs de 0 à 4 294 967 295. Le champ revient donc à 0 après le 7 février 2106 à 06:28:15 UTC.
- Valeur aléatoire (5 octets). Il s'agit d'un nombre choisi aléatoirement une seule fois, au démarrage d'un programme. Chaque ObjectID créé ensuite par ce programme réutilise la même valeur aléatoire, ce qui évite aux différents ordinateurs de devoir se coordonner.
- Compteur (3 octets). Il s'agit d'un nombre qui commence à une position aléatoire comprise entre 0 et 16 777 215 et qui augmente de 1 pour chaque nouvel ObjectID. S'il dépasse 16 777 215, il revient à 0.
Placées bout à bout, les parties se présentent ainsi :
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Les anciens pilotes MongoDB construisaient la partie centrale à partir d'un identifiant de machine et d'un identifiant de processus, plutôt qu'à partir d'un nombre aléatoire. Les pilotes actuels, y compris la logique utilisée par cet outil, emploient à la place une seule valeur aléatoire de 5 octets par processus.
Format et formule d'un ObjectID MongoDB
Contrairement à un pourcentage ou à un calcul d'intérêts, un ObjectID ne repose sur aucune formule arithmétique. Il est assemblé en convertissant trois nombres en texte hexadécimal, puis en les joignant bout à bout :
- Prendre l'heure actuelle en secondes depuis l'époque Unix, en la ramenant dans l'intervalle de 0 à 4 294 967 295 afin qu'elle tienne sur quatre octets. L'écrire sous la forme d'un nombre hexadécimal à 8 chiffres.
- Prendre la valeur aléatoire fixe du processus, un nombre compris entre 0 et 2^40 − 1. L'écrire sous la forme d'un nombre hexadécimal à 10 chiffres.
- Prendre la valeur actuelle du compteur, comprise entre 0 et 16 777 215. L'écrire sous la forme d'un nombre hexadécimal à 6 chiffres, puis augmenter le compteur de 1 pour l'identifiant suivant.
- Joindre les trois chaînes hexadécimales, dans cet ordre, pour former une chaîne de 24 caractères.
Exemple
Supposons qu'un programme démarre à l'instant Unix 1 700 000 000 secondes, soit le 14 novembre 2023 à 22:13:20 UTC. Il choisit la valeur aléatoire 3f2a91c8d4 et initialise son compteur à 12 345.
- Horodatage en hexadécimal :
6553f100 - Valeur aléatoire en hexadécimal :
3f2a91c8d4 - Compteur en hexadécimal :
003039
La concaténation donne le premier ObjectID :
6553f1003f2a91c8d4003039
Si le programme génère un deuxième ObjectID au cours de la même seconde, l'horodatage et la valeur aléatoire restent identiques, mais le compteur passe à 12 346 (00303a) :
6553f1003f2a91c8d400303a
La lecture d'un ObjectID fonctionne également en sens inverse. Dans 507f1f77bcf86cd799439011, les 8 premiers caractères, 507f1f77, correspondent à 1 350 508 407 secondes depuis l'époque Unix, soit le 17 octobre 2012 à 21:13:27 UTC.
Utilisations courantes des ObjectID MongoDB
- Clés primaires. MongoDB place automatiquement un ObjectID dans le champ
_idd'un document, sauf si une autre valeur est fournie. - Recherche selon la date de création. Comme l'horodatage est intégré à l'identifiant, un programme peut déterminer la date de création approximative d'un document sans champ de date distinct.
- Tri selon l'ordre d'insertion. Trier les documents par
_idles trie approximativement selon leur date de création, puisque l'horodatage est placé au début de la valeur. - Données de test et données simulées. Les développeurs utilisent des ObjectID générés pour créer des documents d'exemple ou des tests automatisés sans démarrer de base de données.
ObjectID MongoDB ou UUID
Un UUID (identifiant unique universel) est une valeur de 16 octets, soit quatre octets de plus qu'un ObjectID. Un UUID standard est généralement aléatoire sur toute sa longueur. Il ne révèle donc pas la date de création et ne permet pas de trier les éléments selon leur ordre de création. Un ObjectID est plus court et approximativement ordonné dans le temps, ce qui explique en partie pourquoi MongoDB l'utilise par défaut. Il ne bénéficie toutefois pas de la même garantie formelle d'unicité qu'un UUID correctement généré.
Foire aux questions
À quoi sert un ObjectID MongoDB ?
Il s'agit de la valeur que MongoDB place par défaut dans le champ _id d'un document. Chaque document obtient ainsi une clé unique sans configuration supplémentaire.
Les ObjectID MongoDB sont-ils garantis uniques ?
Pas au sens mathématique formel, mais les collisions sont extrêmement improbables. Deux ObjectID devraient avoir la même valeur aléatoire et la même position de compteur au cours de la même seconde, ce qui ne se produit normalement qu'au sein d'un même processus.
La date de création peut-elle être lue à partir d'un ObjectID ?
Oui. Les 8 premiers caractères hexadécimaux, soit 4 octets, contiennent le nombre de secondes écoulées depuis l'époque Unix. La conversion de ce nombre en date donne l'heure de création approximative.
Combien d'ObjectID ce générateur peut-il créer à la fois ?
Entre 1 et 100 par lot. Tous les identifiants d'un lot partagent la même valeur aléatoire propre au processus, et chacun possède un compteur supérieur de 1 à celui de l'identifiant précédent.
Les ObjectID MongoDB peuvent-ils être utilisés en dehors de MongoDB ?
Oui. Comme ce sont simplement des valeurs de 12 octets codées sous forme de texte hexadécimal, elles peuvent servir d'identifiants uniques dans d'autres systèmes. Toutefois, le système d'identifiants propre à une base de données peut être mieux adapté à ses besoins.
Ce générateur est-il connecté à une véritable base de données MongoDB ?
Non. Il s'exécute entièrement dans le navigateur et ne lit ni n'écrit dans une base de données.
Références
- « ObjectId ». Manuel MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- « Spécification ObjectId ». Spécifications BSON de MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- « Types BSON ». Spécification BSON, https://bsonspec.org/spec.html.