经过大量搜索,在阅读Firebase集合时,我发现了很多“不该做的事”(主要示例是3万美元的账单),但是我在努力寻找一个解决我们问题的合适方法。
我们的网站包含产品目录。该目录从名为“ products”的firestore集合中填充,其JSON结构为:
"products"{
"productId"{
"name":
"price":
"brand":
...
}
}
为了加载集合,我使用以下内容:
this.products = this.db.collection('products').valueChanges({idField: 'productID'});
在高峰时期,我们预计该产品系列将包含多达2000种产品。我担心的是,随着网站的扩展,这将变得极其昂贵。我注意到,每次导航到“目录”页面时,它都会再次加载该集合。因此,以一个不太令人难以想象的示例为例,如果该页面一天被加载5000次并加载了完整的集合(如当前那样),则将导致至少读取10,000,000个文档。
我确定必须有更好的方法来执行此操作,但是,我似乎无法破解它。
任何建议都会以一种更好的方式来解决,并降低成本。
答案 0 :(得分:4)
您的首页的普通访问者会看到多少产品?假设您在首屏显示5-10个产品,因此在滚动之前。如果50%的访问者立即离开页面(对于这种反弹来说,这是一个相当乐观的值),则您每天只需加载5,000次访问* 10个产品= 50,000次读取就可以满足一半的访问者的需求。
留在您网站上以查看更多内容的50%的访问者实际上是值得加载更多数据的访问者。但是我仍然会考虑优化
加载所有2,000种产品可能会对您的绝大多数访问者造成浪费,这就是为什么道格(Doug)建议对数据进行分页(或者如今更常见:使用无限滚动视图加载它们)。
一种更有效的替代方法是将最初的10种产品存储到单个文档中,本质上存储预先聚合的内容。如果这样做,您只需为每个访客阅读一份文档即可获得初始产品。然后,您可以像以前一样按需加载其余文档。
您可以进一步采用这种方法,并预先汇总多种类型的内容,例如每个类别中最受欢迎的产品,特定产品的相关产品等。虽然这些步骤中的每一个都使内容的生成更加棘手,但是如果您吸引了更多的访问者,您可以轻松地将其赚回来。
要在使用Cloud Firestore时了解所有有关此方面的信息以及许多其他注意事项,我建议推荐出色的视频系列Getting to know Cloud Firestore。
答案 1 :(得分:3)
您可以: