gpt4 book ai didi

parse-platform - 解析服务器 : how to make this query efficient?

转载 作者:行者123 更新时间:2023-12-04 06:41:55 24 4
gpt4 key购买 nike

我有一个 Message类 - 它包含一个群发消息,可以按需发送给许多用户,但每个用户只能收到一次,当他需要新消息时。我如何确保用户在交付后再也不会收到它?

想法#1:Message.deliveredTo将是 Relation_User对象。
经过 Message交付给用户,他将自己添加到 Message.deliveredTo Relation .

当用户稍后查找未送达的 Messages 时,他会找到所有 Messages除了他在 deliveredTo 中的那些Relation :

var messagesQuery = new Parse.Query("Message");
messagesQuery.notEqualTo("deliveredTo", request.user);
messagesQuery.find() ...

想法#2: <messageId>_deliveredRole这是在 Message 时创建的与 ID <messageId>被 build 。 MessageACL-readRole 禁用.
Message交付给用户,他将自己添加到 <messageId>_delivered Role .

当用户稍后查找未送达的 Messages 时,他会找到所有 Messages除了那些他在 <messageId>_delivered Role :
var messagesQuery = new Parse.Query("Message");
messagesQuery.find({ sessionToken: request.user.getSessionToken() }) ...

想法 #3: DeliveredMessage是一个类。经过 Message交付给用户,他创建了新的 DeliveredMessagemessage包含 Message 的字段和 deliveredTo包含用户的 key 。

当用户稍后查找未送达的 Messages 时,他会找到所有 Messages除了那些在他的 DeliveredMessage对象:
var messagesQuery = new Parse.Query("Message");
var deliveredQuery = new Parse.Query("DeliveredMessage");
deliveredQuery.equalTo("deliveredTo", request.user);
messagesQuery.doesNotMatchKeyInQuery("objectId", "message.objectId" /*is that even possible?*/, deliveredQuery)
messagesQuery.find() ...

问题是,所有选项似乎都非常低效且对索引不友好。他们中的一些人比其他人更好吗?为什么?

或者您有其他有效的想法如何实现这一点?

注意:
每个收件人 Message可以随时间变化(跟随模型),因此无法添加 pendingRecipients Relation字段到 Message ,当他收到 Message 时将用户从其中删除并使用 equalTo而不是 notEqualTo检查未送达的消息时。

最佳答案

老实说,谈到效率和索引,典型的查询是一个关键。
假设从最多查询到最少查询的顶级查询是:

  • 获取用户(收件人)未送达消息的数量
  • 获取用户(收件人)的几个最新/最旧消息 ID/标题的列表
  • 通过messageID获取消息内容
  • 把消息内容和收件人

  • 一类 UndeliveredMessage s 将是最有效的。它至少应该有一个 messageID 和一个 userID。根据用例,您可能想要添加消息的日期,可能是标题等。按用户 ID 索引您可以检索未送达消息的数量,而无需访问磁盘。

    它类似于 IDEA #3,有两个好处:
  • find 转移未送达消息的计算查询到创建消息的时间点,或建立新的关注关系。表的填充可以在后台完成,这将导致“传递”消息的延迟增加,但保持操作请求快速。
  • 集合的大小不会随着时间呈指数增长,因为您不需要保留所有已传递的消息。
  • 关于parse-platform - 解析服务器 : how to make this query efficient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427688/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com