dimanche 19 mai 2019

Meteor Mongo Id collision proof shortening

Meteor uses it's internal Random package to generate Mongo-Ids for the documents, where the used set of characters is defined as:

var UNMISTAKABLE_CHARS = "23456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijkmnopqrstuvwxyz";

The method description for Random.id also states:

Return a unique identifier, such as "Jjwjg6gouWLXhMGKW", that is likely to be unique in the whole world.

which is defined for the default length of an Id (17 chars; each one of UNMISTAKABLE_CHARS).

Now I would like to use only the first N characters of the Id to shorten my URLs (which include the Ids to dynamically load pages that require a specific document, which is determined by the Id).

So if my original Id is

`v5sw59HEdX9KM5KQE`

I would like to use for example (consider a totally random-picked N=5 here):

{
  _id:"v5sw59HEdX9KM5KQE",
  short: "v5sw5"
}

as document schema and fetch the respective document by this Id using { short } as query in my Mongo.Collection.

Now my question is how many characters are satisfactory to prevent collision if an amount of documents (thus Ids) between 5000 to 10000 are to be considered.

Note: I have some tools on entropy calculation and all these values (character set, length of the original Ids, number of documents) in front of me but I don't know how to wire this all up to safely calculate N.




Aucun commentaire:

Enregistrer un commentaire