MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Por que não é recomendado usar funções armazenadas do lado do servidor no MongoDB?


Tenho certeza de que mencionei a lista algumas vezes, apesar do resultado da pesquisa do Google ser preenchido apenas com pessoas dizendo como fazer isso:
  • É eval
  • eval tem habilidades naturais para ser facilmente injetado, é como um não-PDO equivalente ao SQL, se você não construir uma biblioteca de escape em grande escala em torno dele, isso o atrapalhará. Ao usar essas funções, você está substituindo efetivamente a linguagem nativa mais segura do MongoDB por algo tão inseguro quanto qualquer SQL antigo.
  • Requer um bloqueio global e pode ter um bloqueio de gravação e não será liberado até que a operação seja concluída, ao contrário de outras operações que serão liberadas em determinados casos.
  • eval só funciona em Primárias e nunca em qualquer outro membro do conjunto de réplicas
  • Ele está basicamente executando, desmarcado, uma tonelada de JS em um pacote V8/spidermonkey envo que vem com o MongoDB com total capacidade de tocar em qualquer parte do seu banco de dados e comandos de administração, isso parece seguro?
  • NÃO é MongoDB e nem é "MongoDBs SQL", ele roda dentro de um ambiente JS embutido, não é o próprio código MongoDBs C++ (ao contrário do framework de agregação).
  • Devido ao ponto anterior, é EXTREMAMENTE lento em comparação com muitas outras opções, isso vale para $where uso também.

Isso deve ser suficiente para você começar nesta frente.