我们有一个社交应用程序,用户可以在其中相互聊天,我们已收到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>
}
就是这样吗?运行此命令,我就准备好了吗?之后,所有现有和将来的邮件都将被索引吗?
答案 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是一个很好的起点