可以将用户ID作为字段存储在Firestore文档中吗?

时间:2019-01-18 21:13:43

标签: firebase google-cloud-firestore

Firestore收取使用的索引数量的费用。如果我有一个结构,其中有大量不同用户给出的评分列表,并且键是用户ID,值是评分,那么这会占用太多自动创建的索引吗?周围是否有一个好的结构。

例如,在“评分”集合中,我使用复杂的分片机制将每个用户提供给不同文档的个人评分进行分片,该机制将文档填充到最大文档大小约为20k,然后开始填充另一个文档文献。说我有5个文档,每个文档填充20k个字段。这些文档之一看起来像这样:

uid1: 3.3
uid2: 5
uid3: 1.234
...

我应该使用另一种结构来存储Firestore中各个“字段”的负载吗?我不想为每个等级使用大量文件,因为那太昂贵了。数组也不够大,无法存储额定负载。

1 个答案:

答案 0 :(得分:1)

  

数组也不足以存储额定负载

问题不关数组,问题在于文档有限制。因此,在文档中可以放入多少数据方面存在一些限制。根据有关usage and limits的官方文档:

  

文档的最大大小:1 MiB(1,048,576字节)

如您所见,单个文档中的数据总数限制为1 MiB。当我们谈论存储文本时,您可以存储很多,但是随着数组变大,请注意此限制。

根据有关modelling data in Cloud Firestore的官方文档:

  

Cloud Firestore经过优化,可以存储大量小文件。

因此,试图通过逐个填充文档来分片集合并不是一个好主意。

如果您试图在单个文档中添加来自多用户的搜查,换句话说,您试图在单个文档中存储大量数据,并且可以被许多用户更新,则还存在另一个限制照顾。因此,每个文档每秒只能写入1次。因此,如果您遇到许多用户都试图一次将数据全部写入同一文档的情况,那么您可能会开始发现其中一些写入操作会失败。因此,也要注意此限制。

如果您认为文档的大小将在1MiB限制之内,我的建议是将这些突袭存储在一个数组中,否则请为每个对象分别使用标签集合。