Angular Firebase:减少大型集合的读取次数
经过大量的搜索,我在阅读firebase collections时发现了很多“不该做的事”(主要的例子是3万美元账单事件),但是我正在努力找到一个适合我们问题的解决方案 我们的网站上有产品目录。目录由名为“产品”的firestore集合填充,JSON结构如下:Angular Firebase:减少大型集合的读取次数,angular,firebase,google-cloud-firestore,Angular,Firebase,Google Cloud Firestore,经过大量的搜索,我在阅读firebase collections时发现了很多“不该做的事”(主要的例子是3万美元账单事件),但是我正在努力找到一个适合我们问题的解决方案 我们的网站上有产品目录。目录由名为“产品”的firestore集合填充,JSON结构如下: "products"{ "productId"{ "name": "price": "brand": ... } } 为了加载集合,我使用以下命令: this.products
"products"{
"productId"{
"name":
"price":
"brand":
...
}
}
为了加载集合,我使用以下命令:
this.products = this.db.collection('products').valueChanges({idField: 'productID'});
在其高峰期,我们预计该系列将包含多达2000种产品。我担心的是,随着网站规模的扩大,这将变得极其昂贵。我注意到,每次导航到“目录”页面时,它都会再次加载收藏。因此,举一个并非不可想象的例子,如果页面在一天内加载5000次并加载完整的集合,就像它当前所做的那样,它将导致10000000个文档读取(至少)
我确信一定有更好的方法来做到这一点,然而,我似乎无法破解它
对于如何更好地解决这一问题并降低成本,我们非常感谢您提供的任何建议 你可以:
你主页的普通访问者会看到多少产品?假设您在折叠上方显示5-10个产品,因此在它们必须滚动之前。如果50%的访问者直接离开页面(对于这种所谓的反弹来说,这是一个相当乐观的值),您只需要每天加载5000次访问*10个产品=50000次阅读就可以满足一半的访问者 而50%的访问者留在你的网站上看更多的内容,实际上是那些值得加载更多数据的人。但我还是会考虑优化< /P> 加载所有2000个产品对绝大多数访问者来说可能是浪费,这就是Doug建议对数据进行分页的原因(或者现在更常见的是:使用无限滚动视图加载数据) 一个更有效的替代方法是将最初的10个产品存储到一个文档中,基本上存储预聚合的内容。如果你这样做,你只需要每个访问者阅读一个文档就可以得到最初的产品。然后您可以像以前一样按需加载其余的文档 您可以进一步采用这种方法,预先聚合多种类型的内容,例如每个类别最受欢迎的产品、特定产品的相关产品等。虽然这些步骤中的每一步都会使生成内容变得更加棘手,但如果有更多的访问者,您很容易获得回报
要了解这一点以及使用Cloud Firestore时的许多其他注意事项,我推荐优秀的视频系列。感谢您的建议-我将做一些研究,看看如何实现它们!谢谢-我一定会看看这部视频系列