MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Warum wird nicht empfohlen, serverseitig gespeicherte Funktionen in MongoDB zu verwenden?

Ich bin mir sicher, dass ich die Liste ein paar Mal angegeben habe, obwohl die Google-Suchergebnisse nur mit Leuten gefüllt sind, die Ihnen sagen, wie es geht:

  • Es ist eval
  • eval hat natürliche Fähigkeiten, leicht injiziert zu werden, es ist wie ein Nicht-PDO-Äquivalent zu SQL, wenn Sie keine vollständige Escape-Bibliothek darum herum bauen, wird es Sie durcheinander bringen. Durch die Verwendung dieser Funktionen ersetzen Sie effektiv die sicherere native Sprache von MongoDB durch etwas, das genauso unsicher ist wie jedes alte SQL da draußen.
  • Es erfordert eine globale Sperre und kann eine Schreibsperre übernehmen und wird nicht freigegeben, bis die Operation vollständig abgeschlossen ist, im Gegensatz zu anderen Operationen, die in bestimmten Fällen freigegeben werden.
  • eval funktioniert nur auf Primaries und niemals auf anderen Mitgliedern des Replikat-Sets
  • Es läuft im Grunde, ungeprüft, eine Tonne JS in einem gebündelten V8/spidermonkey envo, das mit MongoDB geliefert wird, mit der vollen Fähigkeit, jeden Teil Ihrer Datenbank und Admin-Befehle zu bearbeiten, klingt das sicher?
  • Es ist NICHT MongoDB und auch nicht "MongoDBs SQL", es läuft in einer eingebauten JS-Umgebung, nicht MongoDBs C++-Code selbst (im Gegensatz zum Aggregationsframework).
  • Aufgrund des vorherigen Punktes ist es im Vergleich zu vielen anderen Optionen EXTREM langsam, das gilt für $where Verwendung.

Das sollte ausreichen, um an dieser Front anzufangen.