mongodb的eval()是否会锁定数据库?

时间:2014-02-26 17:04:13

标签: mongodb eval

根据文件:

By default, eval takes a global write lock before evaluating the
JavaScript function.

但是你可以通过一个选项来禁用这个写锁:

Set nolock to true on the eval command to prevent the eval command
from taking the global write lock before evaluating the JavaScript.

但后来我看到了这个警告:

Do not use eval for long running operations as eval blocks all
other operations. Consider using other server side code execution options.

那么,它是什么? eval()是否会暂停所有其他操作?

如果确实如此:为什么你能够禁用“全局写锁”,因为其他任何东西都无法运行?

1 个答案:

答案 0 :(得分:1)

默认情况下eval()采用全局写锁定,阻止所有其他操作。但是,如果您提供nolock它将不会采用写锁定,因此它不会阻止所有其他操作。但是,即使提供了nolock,也可以通过eval块中的代码获取全局写锁定。

总的来说,不建议使用eval(),它不能用于分片,而在最新版本的服务器中,它只能由管理员运行。