我有一个网络应用程序,该应用程序是使用angular 6和google-clod-firestore开发的,可从客户那里订购以交付书籍;目前它包含两个组件
当客户打电话时,它将弹出CRM,并重定向到下订单页面。成功下订单后,它将再次重定向到CRM页面。
下订单组件将显示所有可用的图书,这些图书来自名为“ books”的馆藏,大小为1000;
因此,当进入到所述下订单页面每次,它读取文件1000,它产生显著cost.My的问题是如何能降低本reading.Is能够读取操作限制为一次。?
目前我实现使用shareReplay和单独服务逻辑,我不知道它是否是一个正确的实现;
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() {}
}
答案 0 :(得分:0)
一个选项是生成一个包含所有你想要显示的订购页面上的信息的文件。可能是每本书的ID和书名,但是您可能会为一本书存储更多的信息,但不会显示在订购页面上。由于此合成文档中的所有数据都放在一个页面上,因此它应该很好地适合文档大小的1MB限制。
这种方法在NoSQL数据库中非常普遍,在NoSQL数据库中,您经常对数据更改进行额外的工作,以使后续读取变得更简单/更便宜。由于读取通常更为常见,因此使读取更具可伸缩性。
有关更多示例,请观看How to Structure Your Data精彩视频Getting to know Cloud Firestore。