MongoDB是否更快存储JavaScript过程?

最近我深入MongoDB和我想知道存储的JavaScript程序。 从PointBeing阅读博客条目后,我有一些问题。

  • 将我的代码存储在数据库中真的有好处吗? 我的意思是lookups for documents等function,而不是像PointBeing中的示例那样adding numbers
  • 从Node.js端访问JavaScript代码是否更快?
  • 如果我的查询存储在数据库中,caching(和更快)?

我从node.js开发的angular度来看。

评估存储在db.system.js中的函数(“存储过程”,当您想调用它时)已被弃用。 db.eval shell函数和eval database命令中的文章有一个“自3.0版以来不推荐使用”的警告, 而服务器端javascript的文章不再提及它。 所以你应该避免使用它。 一个原因是,当你使用分片时,你不能运行一个javascript函数。 所以当你构build一个需要eval的应用程序时,你可以防止它在未来扩展。 另一个是javascriptfunction破坏了权限的概念。 他们总是需要以pipe理员身份运行,这使得build立一个合理的权限系统成为不可能。 考虑到使用用户提供的数据的服务器端脚本可能容易受到任意脚本注入的影响,从安全的angular度来看这尤其成问题。

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

只有从脚本执行多个查询时,延迟优势才是相关的。 当只有一个查询时,调用脚本时仍会有延迟。 除了不必要的复杂性之外

没有额外的caching或其他优化的服务器端JavaScript。 更糟糕的是,每次运行时都会重新进行重新解释。 所以它可能比你的应用程序服务器上的JavaScript慢。

此外,许多复杂的查询需要脚本支持,只能用find()来实现,通常可以使用聚合来表示,这在大多数情况下比用find()和javascript做得更快,因为聚合框架是用C ++实现的,可以访问原始的BSON文件。

有趣的是,当JS只使用单线程全局锁时,写博客文章( http://pointbeing.net/weblog/2010/08/getting-started-with-stored-procedures-in-mongodb.html )。

这意味着没有与之相关的控制货币function或更细化的locking(locking仍然是一个问题,只能通过多重分离才能实现并行货币)。 只是因为你在一些随机的博客文章中看到它并不意味着它应该被使用。

直接回答你的问题:

  1. 不。 实际上缺点是主叫用户需要完整的pipe理员权限。 这意味着你给你的Web用户每一个特权,因为内置的JS enigne已经挂钩了一切,包括pipe理function,因此它需要pipe理员权限才能运行。

  2. 调用JS从JS到JS到C + +在JS? 没有

  3. 不,MongoDBcaching不能像那样工作。 我build议您阅读基础知识文档: http : //docs.mongodb.org/manual/faq/fundamentals/