Het ontleden van de ObjectId van een verzoek zou niet moeilijk zijn (dus ik weet niet zeker waarom dat een probleem is?). Als het doel is om typbare URL's te maken, zou het waardevol zijn om een kortere en "vriendelijkere" URL te hebben.
U kunt een nummer van 12 bytes dat gegarandeerd uniek is in een sharded MongoDB-configuratie niet samenvatten tot minder dan 12 bytes en het gegarandeerd uniek laten zijn (u noemde het bijvoorbeeld onder zeven tekens).
Van de docs , de MongoDB ObjectId bestaat uit:
- een tijdstempel van 4 bytes
- een machine-ID van 3 bytes
- een 2-byte proces-ID
- en een teller van 3 bytes.
U moet dus ofwel een deel van de ObjectId (en dus sharding) opofferen, of een alternatieve indeling voor het maken van ID's bedenken die is geïndexeerd.
Hoewel je de ID potentieel zou kunnen hashen, kunnen er opnieuw conflicten ontstaan waarvoor je zou willen coderen (nogmaals, je kunt 12 bytes niet terugbrengen tot 4 bytes en uniciteit garanderen). En als er conflicten mogelijk zijn (en die zullen er zijn als je het totale aantal beschikbare bits vermindert), heb je sowieso een soort secundaire tabel nodig (en je zou een index moeten maken om van gegenereerde ID naar ObjectId te gaan) .
Resulterende opties:
- Verwijder normaal significante bits -- als je dit doet, niet doen shard de collectie
- Ontdek uw eigen unieke ID-oplossing (en als deze zich in een webfarm bevindt, kan deze er uiteindelijk heel erg op die van MongoDB lijken om uniciteit aan te pakken)
- gebruik de ObjectId als een lang getal en voer er een verkortingsalgoritme op uit (het moet eerst in kleinere stukjes worden opgesplitst omdat het de numerieke precisie van JavaScript van 53 bits overschrijdt), probeer dit algoritme bijvoorbeeld =coderen het (eindigt ongeveer 17 tekens)
- gebruik iets anders dat korter, maar uniek is als de ID voor uw documenten
- Makkelijkst:accepteer gewoon dat de ID's lang zijn. :)
(Het is niet duidelijk waarom de browser deze conversie zou moeten uitvoeren - waarom zou hij de ObjectID van het document hebben?)