Google cloud firestore 如何在cloud firestore中有效存储相关记录?

Google cloud firestore 如何在cloud firestore中有效存储相关记录?,google-cloud-firestore,Google Cloud Firestore,我的firestore应用程序中有群聊功能。所以,我有一个消息集合,看起来像这样 { text: 'Hi there. This is a message.', createdAt: '8/7/2018 3:28:20 PM', author: 'GKN1q0Y1D3adLNf4xw84tOzukA22' } { text: 'Hi there. This is a message.', createdAt: '8/7/2018 3:28:20 PM', a

我的firestore应用程序中有群聊功能。所以,我有一个消息集合,看起来像这样

{
   text: 'Hi there. This is a message.',
   createdAt: '8/7/2018 3:28:20 PM',
   author: 'GKN1q0Y1D3adLNf4xw84tOzukA22'
}
{
   text: 'Hi there. This is a message.',
   createdAt: '8/7/2018 3:28:20 PM',
   author: {
       id: 'GKN1q0Y1D3adLNf4xw84tOzukA22'
       name: 'Charlie',
       avatarURL: 'https://firebasestorage.googleapis.com/...'
   }
}
在上面的示例中,我只是将用户id存储在author字段中。但是,获取每条消息的整个用户记录并不是真正可行的。所以,我换成了这样

{
   text: 'Hi there. This is a message.',
   createdAt: '8/7/2018 3:28:20 PM',
   author: 'GKN1q0Y1D3adLNf4xw84tOzukA22'
}
{
   text: 'Hi there. This is a message.',
   createdAt: '8/7/2018 3:28:20 PM',
   author: {
       id: 'GKN1q0Y1D3adLNf4xw84tOzukA22'
       name: 'Charlie',
       avatarURL: 'https://firebasestorage.googleapis.com/...'
   }
}
现在,我可以显示作者的姓名,并通过对消息集合的单个查询显示他们的化身。这很好,但是当用户改变他们的化身时会发生什么呢?还是他们的名字


我是否只需要编写一个云函数来更新此人发送的每条消息,因为我知道一个人可能发送数千条消息?在一次云函数调用中潜在地进行数千次写入是否合理?

如果您要求所有消息必须始终显示最新的化身,那么您可能不希望在所有这些消息中重复该数据。当用户的消息数量变得非常大,并且他们想要更改他们的化身时,您需要查询所有这些消息并更新所有消息,这可能会很昂贵

相反,您可能希望存储由其用户名键入的化身,并要求客户端获取该文档以在更新发生时获取更新。假设客户机缓存文档直到文档发生更改,这样做只会导致很少的额外读取


底线是,您必须比较每个实现的成本,并根据您的速度/规模/成本限制做出决定。你不可能一直在这三个方面都做到最好。

那太快了。我喜欢这个网站。您描述的化身解决方案运行良好,但名称仍然是一个问题。“如果您有一个要求,即所有消息必须始终显示最新的头像,那么您可能不想在所有消息中复制该数据。”我想我只是要放宽该要求。只是想确保没有我遗漏的其他解决方案。谢谢