作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设一个聊天应用有 1000 万 Firebase 用户和数亿条消息。
我有一个 Firestore 集合,其中包含在时间序列中表示为文档的消息,并且这些消息中的每一个都可能被多达 100 个这些用户接收和查看。请注意,这些用户并没有组织在稳定的组中,因为每条消息可能有完全不同的一组用户来接收它。
我需要能够非常有效地(在时间和成本方面)找到,
某个特定时间后的所有消息,定向到某个特定用户。
我的第一次失败尝试是在 recipients
中列出收件人用户。数组字段,例如:
sender: user3567381
dateTime : 2019-01-24T20:37:28Z
recipients : [user1033029, user9273842, user8293413, user6273581]
sender: user3567381
dateTime : 2019-01-24T20:37:28Z
user1033029 : true
user9273842 : true
user8293413 : true
user6273581 : true
messages.where("user8293413", "==", true).where("dateTime", ">=", "2019-01-24T15:00:00Z")
sender: user3567381
dateTime : 2019-01-24T20:37:28Z
user1033029 : 2019-01-24T20:37:28Z
user9273842 : 2019-01-24T20:37:28Z
user8293413 : 2019-01-24T20:37:28Z
user6273581 : 2019-01-24T20:37:28Z
messages.where("user8293413", ">=", "2019-01-24T15:00:00Z")
最佳答案
尽管几个月后,对于任何 future 的用户来说,似乎第一次尝试可能效果最好。
对时间戳使用单个静态字段,对收件人使用单个静态字段意味着索引将保持可忽略不计,您不必考虑它们。
要查找用户的所有消息,这似乎是您的目标:
For example, if I want to know all messages for user 8293413 after 3:00 PM today, I could do it like this:
firestore.collection('messages').where('recipient', 'array_contains', userId).where('time', '>', '3pm today'.get()
关于performance - Firestore 聊天应用 : Is this a valid document structure for multi-recipient messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369877/
我是一名优秀的程序员,十分优秀!