MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pourquoi n'est-il pas recommandé d'utiliser les fonctions stockées côté serveur dans MongoDB ?

Je suis sûr d'avoir mentionné la liste à plusieurs reprises malgré le fait que le résultat de la recherche Google ne soit rempli que de personnes vous expliquant comment le faire :

  • C'est eval
  • eval a des capacités naturelles à être facilement injecté, c'est comme un équivalent non-PDO à SQL, si vous ne construisez pas une bibliothèque d'échappement à grande échelle autour de lui, cela vous gâchera. En utilisant ces fonctions, vous remplacez efficacement le langage natif plus sûr de MongoDB par quelque chose d'aussi peu sûr que n'importe quel ancien SQL.
  • Il prend un verrou global et peut prendre un verrou en écriture et ne se libère pas tant que l'opération n'est pas complètement terminée, contrairement à d'autres opérations qui se libèrent dans certains cas.
  • eval ne fonctionne que sur les primaires et jamais sur aucun autre membre du jeu de répliques
  • Il exécute essentiellement, sans contrôle, une tonne de JS dans un envo V8/spidermonkey fourni avec MongoDB avec la possibilité totale de toucher n'importe quelle partie de votre base de données et des commandes d'administration, cela vous semble-t-il sûr ?
  • Ce n'est PAS MongoDB et ce n'est pas non plus "MongoDBs SQL", il s'exécute dans un environnement JS intégré, pas le code MongoDBs C++ lui-même (contrairement au framework d'agrégation).
  • En raison du point précédent, il est EXTRÊMEMENT lent par rapport à de nombreuses autres options, cela vaut pour $where utilisation également.

Cela devrait être suffisant pour vous permettre de démarrer sur ce front.