Nåväl, genom att använda länken du nämnde , jag skulle hellre använda insamlingsmetod för diskar .
Räknarinsamlingsmetoden har några nackdelar inklusive:
- Den genererar alltid multipla begäran (två):en för att få sekvensnumret, en annan för att göra infogningen med det id du fick via sekvensen,
- Om du använder sharding-funktioner i mongodb, kan ett dokument som ansvarar för att lagra ett räknartillstånd användas mycket, och varje gång kommer det att nå samma server.
Det bör dock vara lämpligt för de flesta användningsområden.
Tillvägagångssättet du nämnde ("den optimistiska loop" ) bör inte bryta IMO, och jag gissar inte varför du har problem med det. Jag skulle dock inte rekommendera det. Vad händer om du kör koden på flera mongo-klienter, om en har mycket latens och andra fortsätter att ta ID:n? Jag skulle inte vilja stöta på den här typen av problem... Dessutom finns det minst två förfrågningar per framgångsrik operation, men inga maximala försök innan en framgång...