Подтвердить что ты не робот

Почему в MongoDB не рекомендуется использовать хранимые функции на стороне сервера?

В соответствии с MongoDB документация, не рекомендуется использовать хранимые функции на стороне сервера. В чем причина этого предупреждения?

4b9b3361

Ответ 1

Я уверен, что я изложил этот список пару раз, несмотря на то, что результат поиска Google заполняется только людьми, говорящими вам, как это сделать:

  • Это eval
  • eval имеет естественные способности, которые легко впрыскиваются, это похоже на не-PDO-эквивалент SQL, если вы не пробуждаете полномасштабную экранирующую библиотеку вокруг него, это испортит вам ситуацию. Используя эти функции, вы эффективно заменяете более безопасный родной язык MongoDB на то, что так же небезопасно, как и любой старый SQL.
  • Он занимает глобальную блокировку и может принимать блокировку записи и не будет освобождаться до тех пор, пока операция не будет полностью выполнена, в отличие от других операций, которые будут выпущены в определенных случаях.
  • eval работает только с первичными и никогда не будет членом другого набора реплик
  • В основном он работает, неконтролируемый, тонна JS в комплекте VO/spidermonkey envo, который поставляется с MongoDB с полной способностью касаться любой части вашей базы данных и команд администратора, делает ли это безопасным?
  • Это не MongoDB, и он не является "MongoDBs SQL", он работает внутри встроенной среды JS, а не сам код MongoDBs С++ (в отличие от структуры агрегации).
  • Из-за предыдущей точки EXTREMELY медленнее по сравнению со многими другими параметрами, это относится и к использованию $where.

Этого должно быть достаточно, чтобы вы начали с этого фронта.