我有一个网络应用程序,它是使用angular 6和google-clod-firestore开发的,可从客户那里订购以交付书籍;目前有两个组件
当客户打电话时,它将弹出在CRM中,并重定向到下订单页面。成功下订单后,它将再次重定向到CRM页面。
下订单组件将显示所有可用的书籍,这些书籍来自名为“ books”的馆藏,大小为1000;
因此,每次进入订购页面时,它都会读取1000个文档,这会产生可观的成本。我的问题是如何减少此读取。是否可以将读取操作限制为一次。
目前,我使用shareReplay和singleton服务实现了逻辑,但我不知道这是否是正确的实现;
SingeltonService.ts
-------------------------
export class SingeltonService {
source: Observable<any>;
aa: any;
bb: any;
constructor(private afs: AngularFirestore) {
console.log('new instance created!');
this.source = this.afs.collection('test-
collection').valueChanges().pipe(
tap((docs) => { console.log(`Read ${docs.length} docs`); }),
shareReplay(1));
this.aa = this.source.subscribe()
this.bb = this.source.subscribe()
}
}
Order-Plcaing-component.ts
-------------------------
export class OrderPlacingCompnent implements OnInit {
constructor(private singelton: SingeltonService){}
ngOnInit() {}
}
一种选择是生成一个文档,其中包含您要在该订单页面上显示的所有信息。可能是每本书的ID和书名,但是您可能会为一本书存储更多的信息,但不会显示在订购页面上。由于此合成文档中的所有数据都放在一个页面上,因此它应该很好地适合文档大小的1MB限制。
这种方法在NoSQL数据库中非常普遍,在NoSQL数据库中,您经常对数据更改进行额外的工作,以使后续读取变得更简单/更便宜。由于读取通常更常见,因此使读取更具可伸缩性。
有关此示例的更多示例,请参见视频如何以出色的方式了解Cloud Firestore服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句