MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Perché non è consigliabile utilizzare le funzioni memorizzate lato server in MongoDB?

Sono sicuro di aver indicato l'elenco un paio di volte nonostante il risultato di ricerca di Google sia pieno solo di persone che ti dicono come farlo:

  • È eval
  • eval ha capacità naturali per essere facilmente iniettato, è come un equivalente non PDO a SQL, se non crei una libreria di escape su larga scala attorno ad esso ti incasini. Usando queste funzioni stai effettivamente sostituendo la lingua nativa più sicura di MongoDB con qualcosa che è altrettanto insicuro di qualsiasi vecchio SQL là fuori.
  • Richiede un blocco globale e può richiedere il blocco di scrittura e non verrà rilasciato fino al completamento dell'operazione, a differenza di altre operazioni che verranno rilasciate in determinati casi.
  • eval funziona solo su Primari e mai su nessun altro membro del set di repliche
  • In pratica è in esecuzione, deselezionata, una tonnellata di JS in un pacchetto V8/spidermonkey envo fornito con MongoDB con la piena capacità di toccare qualsiasi parte del database e dei comandi di amministrazione, suona sicuro?
  • NON è MongoDB e non è nemmeno "MongoDBs SQL", viene eseguito in un ambiente JS integrato, non nel codice C++ di MongoDB stesso (a differenza del framework di aggregazione).
  • A causa del punto precedente è ESTREMAMENTE lento rispetto a molte altre opzioni, questo vale per $where anche l'utilizzo.

Dovrebbe essere sufficiente per iniziare su questo fronte.