Parse Server 应用程序的 MongoDB 索引

Posted

技术标签:

【中文标题】Parse Server 应用程序的 MongoDB 索引【英文标题】:MongoDB indexing for a Parse Server application 【发布时间】:2018-08-09 12:34:28 【问题描述】:

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

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

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

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

这是我的消息集:


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

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

db.Message.ensure_index(('chatRoom', 1))

仅此而已吗?运行这个命令,我就准备好了?之后所有现有和未来的消息都将被编入索引?

【问题讨论】:

你在哪里运行这个命令:db.Message.ensure_index(('chatRoom', 1)) ? 在 mongo 控制台 【参考方案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);

然后,您需要专门为该查询在 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

我个人在 Parse MongoDB 中使用 MLab,因为我对数据库不是很了解,而且他们实际上有一个慢查询分析器,可以根据应用程序中的常见查询推荐索引,所以如果你不想学习MongoDB 索引的更好点,然后 MLab 是一个很好的起点

【讨论】:

+1 表示 mLab 很棒。他们的支持团队也很棒,非常有助于正确设置。 感谢您的回答!!因此,如果我运行该命令,所有现有的和新的消息都将被编入索引? @SotirisKaniras 是的,但您只需要小心构建与您的特定查询匹配的索引。如果没有,那么它将不是最理想的,甚至可能是无用的。您还需要为任何常见的类似查询构建不同的索引变体 最后一件事...您添加到聊天室和用户字段的_p_ 是什么?我想这与它们都是指针这一事实有关? 另外你为什么在索引中包含_created_at

以上是关于Parse Server 应用程序的 MongoDB 索引的主要内容,如果未能解决你的问题,请参考以下文章

Parse-Server 推送通知

Parse Server - 用于配置新 Parse 实例的模式 API

使用 Parse-Server 时 Parse LocalDataStore 不起作用 - “方法需要启用固定。”

将 Objective-C iOS 应用程序迁移到自托管 Parse-Server 的问题

Parse-Server 文件 URL 没有改变

使用 RxSwift 和 Parse-Server 进行轮询