解析服务器源_rperm和_wperm mongo查询,我应该索引它们吗?

时间:2018-05-15 16:16:35

标签: mongodb parse-server

我正在浏览我的mongo日志,为我的无索引查询添加索引。默认情况下,mongo仅记录完成时间超过100毫秒的查询。

我发现我在_wperm和_rperm键上有几个。我看到ACL是如何分解的。但是什么类型的Parse.Query调用可能会在日志中创建这样的查询?

query: { orderby: {}, $query: { _rperm: { $in: [ null, "*", "[UserId]" ] } } }

我甚至注意到这个查询是在一个只有8个对象的类上,但是需要133ms才能完成,这对于这么小的类来说似乎很慢,即使它必须在内存排序和扫描。

我是否应该在代码级别解决此问题,修改我的查询以避免这种类型的mongo查询?或者我应该为这些类型的查询添加索引?

我注意到我也有一些出现在mLab的Slow Queries选项卡中。查询看起来像{"_id":"<val>","_wperm":{"$in":["<vals>"]}},建议的索引为{"_id": 1, "_wperm": 1},但它有以下注释:

  

“_ id”位于现有的{“_ id”:1}唯一索引中。只有在某些情况下才需要以下索引建议。

然而,这是我较慢的查询之一,需要320毫秒才能完成。它在_User类上。那只是因为_User类有很多行吗?由于_id是唯一的,我觉得添加一个_wperm索引应该没有什么区别,因为我最终只有一个对象。

我很好奇我是否会看到对这些查询采取行动的好处,或者我是否应该安全地忽略它们。

1 个答案:

答案 0 :(得分:1)

您应该按照mongodb建议索引您的馆藏。在旧的parse.com时代,这些索引是根据看到的工作负载自动创建的。现在你需要创建它们。两者都有意义。在没有masterKey的情况下运行的每个查询都会遇到_rperm。每次写的_wperm。将来,我们可以自动创建_id + _wperm索引,因为所有写入都使用此索引