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

时间:2018-08-09 12:34:29

标签: mongodb indexing parse-server

我们有一个社交应用程序,用户可以在其中相互聊天,我们已收到35万条消息!

我们最近注意到,随着消息数量的增长,class CommandA(QUndoCommand): # ... class CommandB(QUndoCommand): def undo(self): # ... # somehow remove last N commands of class A from undostack stack = QUndoStack() stack.push(CommandA()) # ... stack.push(CommandA()) stack.push(CommandB()) 操作变得越来越慢!我认为这里的问题是find集合未建立索引。

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

Message

这是我的留言集:

db.comments.ensure_index(('discussion_id', 1))

所以我想这就是我要做的:

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

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

1 个答案:

答案 0 :(得分:3)

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

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});

然后,您将需要在Message集合上为此查询专门建立一个索引。在这种情况下:

db.Message.createIndex({_p_chatRoom:1, _p_user:1, isSeen: -1, _created_at: -1})

或者,只有聊天室的索引比根本没有索引的索引要好得多

db.Message.createIndex({_p_chatRoom:1})

要真正了解要构建的索引,您需要阅读Mongo文档https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/#db.collection.createIndex

我个人将MLab用于我的Parse MongoDB,因为我对数据库不是很了解,而且它们实际上有一个缓慢的查询分析器,该查询分析器会根据应用程序中的常见查询来推荐索引,因此如果您不想学习, MongoDB索引的优点,那么MLab是一个很好的起点