我想澄清一下Cloud Firestore与Reference
类型相关的读取定价。在目前的情况下,我有一个聊天室,可显示对话中的消息列表。一条消息看起来像这样...
{
"id": "...",
"text": "Hello World",
"createdBy": Reference(/users/userID)
}
呈现消息时,我有权访问text
,但是我也需要访问createdBy
用户。目前,我正在将createdBy
引用传递给另一个组件(在React中),然后在那里获取该文档以显示用户的头像和用户名。
这已经足够好了,但是我担心这会导致对会话中每条消息的读入数据库,这可能会很快加起来。我几乎可以肯定,这将导致每条消息的额外读取,但是Firebase是否足够智能以缓存用户?
换句话说,如果我有/users/userA
创建的5条消息,那么每条消息都将被视为对数据库的读取,还是对会话中的每个用户来说都是一条读取?
如果Firebase无法缓存此内容,则似乎我需要对数据进行非规范化并在邮件文档上复制用户名和头像,而不仅仅是依靠引用本身。但是,这似乎限制了引用的好处。
答案 0 :(得分:0)
缓存的文档将被重用,并且在访问时不会引起读取。自己创建DocumentReference还是从另一个文档的字段中获取都无所谓。使用DocumentReference读取文档不会引起额外的读取。客户必须明确地阅读它。