sql >> Database >  >> NoSQL >> MongoDB

Waarom wordt het niet aanbevolen om server-side opgeslagen functies in MongoDB te gebruiken?

Ik weet zeker dat ik de lijst een paar keer heb vermeld, ondanks dat het Google-zoekresultaat alleen wordt gevuld met mensen die je vertellen hoe je het moet doen:

  • Het is eval
  • eval heeft natuurlijke vermogens om gemakkelijk te worden geïnjecteerd, het is als een niet-PDO equivalent aan SQL, als je er geen volledige ontsnappingsbibliotheek omheen bouwt, zal het je in de war brengen. Door deze functies te gebruiken, vervangt u effectief de veiligere moedertaal van MongoDB door iets dat net zo onveilig is als elke oude SQL die er is.
  • Er is een globale vergrendeling nodig en kan een schrijfvergrendeling aannemen en zal niet worden vrijgegeven totdat de bewerking volledig is voltooid, in tegenstelling tot andere bewerkingen die in bepaalde gevallen worden vrijgegeven.
  • eval werkt alleen op Primaries en nooit op enig ander lid van de replicaset
  • Het draait in feite, ongecontroleerd, een ton JS in een gebundelde V8/spidermonkey envo die wordt geleverd met MongoDB met volledige mogelijkheid om elk deel van je database en beheerderscommando's aan te raken, klinkt dat veilig?
  • Het is GEEN MongoDB en het is ook geen "MongoDBs SQL", het draait in een ingebouwde JS-omgeving, niet MongoDBs C++-code zelf (in tegenstelling tot het aggregatieraamwerk).
  • Vanwege het vorige punt is het EXTREEM traag in vergelijking met veel andere opties, dit geldt voor $where ook gebruik.

Dat zou genoeg moeten zijn om op dit front aan de slag te gaan.




  1. Wat is MongoDB en hoe werkt het?

  2. Django REST-framework reageert nog steeds met gegevens in de cache, zelfs na lege redis-sleutels

  3. Hoe moet ik verbinding maken met een Redis-instantie vanuit een AWS Lambda-functie?

  4. Gebruikerssessie opslaan in Redis met ASP.NET Core in Azure