解析服务器应用程序的MongoDB索引

解析服务器应用程序的MongoDB索引,mongodb,indexing,parse-server,Mongodb,Indexing,Parse Server,我们有一个社交应用程序,用户可以互相聊天,我们已经收到350K条信息 我们最近注意到,随着消息数量的增加,find操作变得越来越慢!我认为这里的问题是消息集合没有索引 这就是我现在想做的!我在MongoDB文档中找到了这段代码: db.comments.ensure_index(('discussion_id', 1)) 这是我的邮件集: { chatRoom: <Pointer>, user: <Pointer>, text: <String>,

我们有一个社交应用程序,用户可以互相聊天,我们已经收到350K条信息

我们最近注意到,随着消息数量的增加,
find
操作变得越来越慢!我认为这里的问题是
消息
集合没有索引

这就是我现在想做的!我在MongoDB文档中找到了这段代码:

db.comments.ensure_index(('discussion_id', 1))
这是我的邮件集:

{
 chatRoom: <Pointer>,
 user: <Pointer>,
 text: <String>,
 isSeen: <Bool>
}

就这样吗?运行这个命令,我就准备好了?所有现有和将来的邮件都将被编入索引?

您的索引实际上应该取决于查询的外观。假设您的消息查询如下所示:

var query = new Parse.Query("Message");
query.equalTo("chatRoom", aChatRoom);
query.equalTo("user", someUser);
query.equalTo("isSeen", false);
query.descending("createdAt");
query.find().then(function(results){//whatever});
然后,您需要专门为此查询在消息集合上构建一个索引。在这种情况下:

db.Message.createIndex({u p_聊天室:1,{u p_用户:1,isSeen:-1,{u created_at:-1})

或者,一个只有聊天室的索引会比没有索引好得多

db.Message.createIndex({p_聊天室:1})

要真正了解要构建哪些索引,您需要阅读Mongo文档


我个人在解析MongoDB时使用MLab,因为我对数据库不是很了解,而且它们实际上有一个缓慢的查询分析器,可以根据应用程序中的常见查询推荐索引,因此如果您不想了解MongoDB索引的细节,那么MLab是一个很好的起点,因为MLab非常棒。他们的支持团队也非常出色,非常有助于把事情安排妥当。谢谢你的回答!!因此,如果我运行该命令,所有现有和新来的消息都将被索引?@SotirisKaniras是的,但您只需小心构建与特定查询匹配的索引。如果没有,那么它要么是次优的,甚至可能是无用的。您将需要为任何常见的类似查询以及最后一件事构建不同的索引变体。。。您添加到聊天室和用户字段的
\u p\u
是什么?我想这与它们都是指针这一事实有关?还有,为什么要在索引中包含在中创建的
\u?在mongo控制台的何处运行此命令:db.Message.sure\u index(('chatRoom',1))
var query = new Parse.Query("Message");
query.equalTo("chatRoom", aChatRoom);
query.equalTo("user", someUser);
query.equalTo("isSeen", false);
query.descending("createdAt");
query.find().then(function(results){//whatever});