MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Raccourcir l'ID MongoDB en javascript

L'analyse de l'ObjectId à partir d'une requête ne serait pas difficile (donc je ne sais pas pourquoi c'est un problème ?). Si l'objectif est de créer des URL typables, il serait utile d'avoir une URL plus courte et "plus conviviale".

Vous ne pouvez pas prendre un numéro de 12 octets qui est garanti unique dans une configuration MongoDB fragmentée et le condenser à moins de 12 octets et le faire garantir unique (vous avez mentionné sous sept caractères par exemple).

À partir de la documentation , l'ObjectId MongoDB se compose de :

  • un horodatage de 4 octets
  • un identifiant de machine de 3 octets
  • un identifiant de processus de 2 octets
  • et un compteur de 3 octets.

Ainsi, vous devrez soit sacrifier une partie de l'ObjectId (et donc du sharding), soit concevoir un autre format de création d'ID indexé.

Bien que vous puissiez potentiellement hacher l'ID, encore une fois, des conflits peuvent survenir pour lesquels vous voudriez coder (encore une fois, vous ne pouvez pas réduire 12 octets à 4 octets et garantir l'unicité). Et s'il y a des conflits possibles (et il y en aura si vous réduisez le nombre total de bits disponibles), vous aurez de toute façon besoin d'une sorte de table secondaire (et vous devrez créer un index pour passer de l'ID généré à ObjectId) .

Options résultantes :

  • Supprimez les bits normalement significatifs :si vous le faites, ne le faites pas fragmenter la collection
  • Concevez votre propre solution d'identification unique (et si elle se trouve dans une ferme Web, elle peut finir par ressembler beaucoup à celle de MongoDB pour gérer l'unicité)
  • utilisez l'ObjectId comme un nombre long et exécutez un algorithme de raccourcissement dessus (il devra d'abord être décomposé en plus petits morceaux car il dépasse la précision numérique de JavaScript de 53 bits), essayez cet algorithme par exemple =encoder il (se terminera par environ 17 caractères)
  • utilisez autre chose de plus court, mais unique comme identifiant pour vos documents
  • Le plus simple :acceptez simplement que les identifiants soient longs. :)

(La raison pour laquelle le navigateur devrait effectuer cette conversion n'est pas claire :pourquoi aurait-il l'ObjectID du document ?)