firebase - 我应该如何构建每次都需要阅读大量文档的 Firestore 文档
问题描述
我有一个服务列表,每个服务都有一些结构如下的字段
服务1*
ServiceID* NetID* Country* price* xxx* xxx* 10 fields in total*
服务2*
ServiceID* NetID* Country* price* xxx* xxx* 10 fields in total*
我目前已经安排了每个服务都是自己的文档,总共有 1,180 个。但是,当用户访问我的站点并想要选择一项服务时,服务器将获取所有 1180 个。只有 100 个用户,firebase 将读取 100k 个文档。我正在考虑将所有服务的副本保存为 csv 并在每次用户想要搜索服务时从那里加载它。
有没有更好的结构化数据或使用其他方法来减少我对 Firestore 的读取计数。
解决方案
有没有更好的结构化数据
没有其他更好的方法可以做到这一点。
但是,当用户访问我的站点并想要选择一项服务时,服务器会获取所有 1180。
这不是与 Cloud Firestore 交互的正确方式。您正在以高昂的成本下载大量数据。除此之外,用户永远不会一次需要所有这么多的数据。一个解决方案是以更小的块加载数据。对于 Android,我建议您从以下帖子中查看我的答案:
我正在考虑将所有服务的副本保存为 csv 并在每次用户想要搜索服务时从那里加载它。
没有必要这样做。Firestore 已经有自己的缓存机制。所以一旦你得到一个文档,它总是会从缓存中读取,只要在服务器上,没有进行新的更改。更多信息在这里:
对于 Web,默认情况下禁用离线持久性。要启用持久性,请调用 enablePersistence 方法。Cloud Firestore 的缓存不会在会话之间自动清除。因此,如果您的 Web 应用程序处理敏感信息,请确保在启用持久性之前询问用户他们是否在受信任的设备上。
推荐阅读
- crystal-reports - 在水晶报表中连接字符串
- python - 如何在不丢失元组属性的情况下将元组元素转换为字符串?
- python - 合并两个熊猫系列?
- sas - 将迭代器作为值传递给宏函数
- elixir - 使用 Ecto 从另一个表中预加载 order_by
- java - Spring Security 使用 java.lang.String 来传输用户密码。这不是安全漏洞吗?
- entity-framework - 实体框架核心抛出 DbUpdateConcurrencyException
- pandas - 使用 .loc 和布尔值的多维键的 Pandas 错误
- r - Apriori 不适用于 0 和 1 数据集
- d3.js - 无法使用 json 文件加载纽约的 D3 地图