sql >> Databáze >  >> NoSQL >> MongoDB

pořadí řazení mongodb na _id

Abych trochu rozšířil to, co řekl Andre:

Vzhledem k tomu, že časové razítko ObjectID je pouze na druhém, lze snadno vytvořit dva (nebo více) ObjectID se stejnou hodnotou pro časové razítko (první 4 bajty). Pokud by byly vytvořeny na stejném stroji (ID stroje - další 3 bajty), stejným procesem (PID - další 2 bajty), pak jediná věc, která by je odlišila, by bylo pole "inc", poslední 3 bajty na konci.

Aktualizace:leden 2020

Tato odpověď je stále populární, takže stojí za to ji trochu aktualizovat. Specifikace ObjectID se od té doby, co byla tato odpověď napsána před 8 lety, vyvinula a 5 bajtů za časovým razítkem je nyní jednoduše náhodných, což výrazně sníží pravděpodobnost jakýchkoli kolizí. Poslední tři bajty jsou stále přírůstkové, ale pro spuštění jsou inicializovány náhodnou hodnotou, což opět snižuje pravděpodobnost kolize. ObjectID nyní obsahuje méně kontextu (nemůžete snadno zjistit, kde bylo vygenerováno a jakým procesem), ale hádal bych, že informace nebyly použity žádným smysluplným způsobem a byly zamítnuty ve prospěch lepší randomizace ID.

Ukončit aktualizaci

Kompletní specifikace naleznete zde:

https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification

Toto pole „inc“ je buď stále se zvyšující pole (pak můžete rozumně očekávat, že řazení bude v pořadí vložení/vytvoření), nebo náhodná hodnota (pak pravděpodobně jedinečná, ale ne uspořádaná), samozřejmě za předpokladu, že je specifikace implementována správně. . Všimněte si, že ObjectID může být generováno ovladačem nebo aplikací (nebo skutečně ručně) spíše než samotným MongoDB, takže pokud nemáte plnou kontrolu nad tím, jak jsou generována, může platit kterékoli nebo všechny výše uvedené.



  1. 4 způsoby aktualizace dokumentu v MongoDB

  2. Redis Managed Pub/Sub Server

  3. MongoDB $pull

  4. Jak hledat klíčový vzor v redis hash?