MongoDB存储的JavaScript程序更快吗?

Sma*_*tis 12 javascript stored-procedures mongodb node.js

最近我深入MongoDB,我想知道存储的JavaScript程序.从PointBeing 阅读博客文章后,我收到了一些问题.

  • 将我的代码存储在DB中是否真的有优势?我的意思是函数lookups for documents,adding numbers不像PointBeing的例子.
  • 它是否比从JavaScript.js Side访问的JavaScript代码更快?
  • 如果我的查询存储在数据库中,是否缓存(并且更快)?

我是从node.js开发的角度来看的.

Phi*_*ipp 17

评估存储在db.system.js中的函数("存储过程",当您要调用它们时)不推荐使用.在这些文章db.eval外壳功能,并在EVAL数据库命令有一个警告"因为3.0版本已过时",并在服务器上片面的JavaScript的文章并没有提到它了.所以你应该避免使用它.一个原因是您在使用分片时无法运行javascript函数.因此,当您构建需要eval的应用程序时,您可以防止它在将来扩展.另一个是javascript函数破坏了权限概念.它们总是需要以管理员身份运行,这使得无法建立一个理智的权限系统.考虑到使用用户提供的数据的服务器端脚本可能容易受到任意脚本注入的攻击,从安全角度来看这尤其成问题.

服务器端javascript的优点是它在数据库服务器上运行.当您需要执行大量查询时,这可以减少应用程序服务器和数据库服务器之间的延迟.但是,您可以通过在数据库服务器上打开mongo shell并在那里执行它来获得相同的优势.

只有从脚本执行多个查询时,延迟优势才有意义.如果只有一个查询,则在调用脚本时仍会有延迟.除了不必要的复杂性之外,你什

服务器端javascript没有额外的缓存或其他优化.更糟糕的是:每次运行它都会得到重新解释和重新解释.因此它甚至可能比应用程序服务器中的javascript慢.

此外,许多需要脚本支持才能实现的复杂查询find()通常可以使用聚合来表达,在大多数情况下,聚合会比使用find()和javascript 一样快,因为聚合框架是用C++实现的并且可以访问原始BSON文档.