Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore:如何高效读取大量数据_Firebase_Google Cloud Firestore - Fatal编程技术网

Firebase Firestore:如何高效读取大量数据

Firebase Firestore:如何高效读取大量数据,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我正试图找到一种读取firestore中大量数据的好方法。目前,我在一个“电影”收藏中有10000个文档。这些文档是包含有关电影的字段(作者、标题、id)的记录。 我的客户使用一个查询以.limit(20)随机读取20个文档,用户可以启动此查询,只要他想要获得新文档。问题是,例如,用户可以要求1000个文档(电影),而这需要在firestore中读取1000次 我在想是否有可能通过以不同的方式构建我的收藏来减少阅读次数,比如500个子收藏,里面有20个文档(电影)。这样,我的文档被平均分配,我的

我正试图找到一种读取firestore中大量数据的好方法。目前,我在一个“电影”收藏中有10000个文档。这些文档是包含有关电影的字段(作者、标题、id)的记录。 我的客户使用一个查询以.limit(20)随机读取20个文档,用户可以启动此查询,只要他想要获得新文档。问题是,例如,用户可以要求1000个文档(电影),而这需要在firestore中读取1000次

我在想是否有可能通过以不同的方式构建我的收藏来减少阅读次数,比如500个子收藏,里面有20个文档(电影)。这样,我的文档被平均分配,我的客户只需读取包含20个文档的1个子集合。这是否会将读取次数减少到仅1次

你是说:

我的客户可以使用.limit(20)随机读取20个文档,当用户单击按钮时,会再次读取20个新文档。问题是,一个用户可以索要1000份文档,而这需要在firestore中读取1000次

如果要限制用户一次最多读取20个文档,可以在服务器端安全规则中使用以下选项执行此操作:

// Limit documents per request to 50
allow list: if request.query.limit <= 20
//将每个请求的文档数限制为50

允许列表:if request.query.limit读取次数较少的唯一方法是读取较少的文档。子集合也是如此。减少文档数量的一种方法是用更多数据填充单个文档

// in a single doc
movies: {
  movie_id_a: { title: 'Gone With the Wind', rating: 'G' },
  movie_id_b: { title: 'Casablanca', rating: 'PG' },
  ...
}

但这是要付出代价的:您将遇到文档大小限制,并且您将无法使用与在各自的文档中保留逻辑块相关联的数据库功能(例如仅保存对一部电影的引用,或仅收听一部电影等)

我真的不明白您想要实现什么。这句话对我来说毫无意义:“我的新方法是创建500个文档,里面有20个文档(电影)”,谢谢你的评论!我编辑了我的帖子。我想知道,通过创建子集合,我是否只能读取1次而不是20次。子集合不会导致更少的文档读取。无论文档位于何处,读取都是读取。您所说的“问题是用户可以要求1000个文档,而这需要在firestore中读取1000次”到底是什么意思?如果在查询中使用
.limit(20)
,它将只返回20个文档(并且成本仅为20个文档)。我的意思是用户可以启动此查询以获取新文档。我的查询随机得到20个文档。因此,我想知道是否有可能在firestore中构建我的集合,通过在子集合中放入20个文档来读取只需1次的查询。查询应该只读取一个随机的子集合,而不是20个文档谢谢你的回答!在我的第一篇文章中,我不是很清楚。我想弄明白的是,如何构造我的集合,使其具有一个查询,该查询可以以1次读取的代价随机获取20个文档。目前,我的所有文档都在同一个集合中。我使用此查询随机获取我的20个文档`db.collection(“movies”).where(“id”,“>”,random.limit(20.get()});`是否可以构造firestore并使用一个查询,以一次读取的成本获取一个包含20个文档的子集合?无法以一次读取的成本获取多个文档。正如Doug所评论的,您似乎误解了子集合的工作方式。从子集合中读取20个文档仍算作20次读取。正如danh所说:读取更少文档的唯一方式就是读取更少的文档。但这种方法会增加很多开销。如果这是一个节省成本的问题,您可能需要考虑查看FielBaseRealTimeDeabor。这对于那些需要进行大量小读写操作的应用程序来说通常更便宜。没错,实时数据库将是一个更好的解决方案,因为我的客户端只进行小读操作!我来看看这个!谢谢谢谢这就是我想做的,以减少阅读,我想这是唯一的解决办法,以减少我的阅读次数