如何有效地将关联记录存储在Cloud Firestore中?

时间:2018-10-17 22:40:26

标签: google-cloud-firestore

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

{
   text: 'Hi there. This is a message.',
   createdAt: '8/7/2018 3:28:20 PM',
   author: 'GKN1q0Y1D3adLNf4xw84tOzukA22'
}

在上面的示例中,我只是将用户ID存储在author字段中。但是,获取每条消息的整个用户记录并不是真正可行的。所以,我切换到这样的东西...

{
   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/...'
   }
}

现在,我可以显示作者的姓名,并通过对邮件集合的单个查询显示他们的头像。很好,但是当用户更改其头像时会发生什么?还是他们的名字?

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

1 个答案:

答案 0 :(得分:1)

如果您要求所有消息始终都必须始终显示最新的头像,那么您可能不想在所有这些消息中重复该数据。当用户收到的消息数量非常多并且他们想要更改其头像时,您将需要查询所有这些消息并更新所有这些消息,这可能会非常昂贵。

相反,您可能希望存储以其用户名作为键的化身,并要求客户端获取该文档以获取更新。假设客户端缓存文档直到更改,您将以这种方式招致很少的额外读取。

最重要的是,您必须比较每个实施的成本,并根据您的速度/规模/成本约束做出决策。您不可能一直都获得最好的三分。