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

Jak řešíme požadavky priority v express/nodejs?

V node.js ve skutečnosti běží pouze jeden požadavek najednou (překladač Javascriptu je jednovláknový), dokud nenarazíte na nějakou asynchronní operaci v nativním kódu a pak se spustí další požadavek, zatímco druhý čeká na I/O . Pokud existuje nějaký omezený zdroj, po kterém všechny požadavky jdou, je to jen závod o to, který požadavek projde vaším kódem dostatečně daleko, aby zdroj získal. Pokud svůj server klastrujete pro větší škálovatelnost, pak každý klastr spustí jedno vlákno Javascript.

Pokud byste nechali každý příchozí požadavek čekat ve frontě, dokud nebudou úplně vyřízeny všechny ostatní požadavky, které přišly před tím (něco, co lze udělat), pak byste vážně narušili škálovatelnost vašeho serveru node.js a většinou by nečinně sedět a čekat na provedení nějaké I/O operace, takže se zdá nepravděpodobné, že je to správný návrh.

Obvyklým schématem je nechat první požadavek, který projde, aby si nárokoval, že jej má zdroj (i když může být spuštěno více zdrojů současně). Zda je to vždy požadavek, který na váš server dorazil jako první, nebo ne, nebude známo, ale bude to blízko a uživatelská komunita se pravděpodobně nedozví, zda se náhodou o několik milisekund nevypnul právě kvůli rozdílům v rychlost zpracování dvou požadavků.

Budete se muset ujistit, že váš kód, který přistupuje ke sdíleným zdrojům (jako jsou databáze), je bezpečný pro souběžnost a nevytváří žádné nepříjemné předpoklady o sdílených datech.




  1. Dotazujte se a shrňte vše pomocí mangusty

  2. Hromadné vkládání Mongo do více sbírek

  3. Jak se vyhnout tomu, aby více uzlových procesů dělalo opakující se věci?

  4. Jak získám _id nedávno vloženého dokumentu po vložení pomocí mongo csharp?