持续更新数据库

时间:2018-10-20 01:43:10

标签: angularjs firebase firebase-realtime-database google-cloud-firestore google-cloud-functions

我是软件开发的新手,他构建了一个Angular TS应用程序来管理队列中的人员,并且后端使用Firebase / Firestore。用户有3种状态:用户正在等待,被呼叫或不在队列中。呼叫用户时,他/她必须在10s前响应“出席”,否则他/她将自动退出队列。

我尝试通过每秒钟激活一个服务来实现最后一个规范,该服务将检查是否已超过时间限制,并且在这种情况下,将在其相应的Firestore文档中将用户状态更新为“不在队列中”。

user.service.ts

console.log( 'Length: ' + getDBLength());

aaaa
Length: undefined
bbbb
returning length as: 1

user.component.ts

 unqueueUser(): any {
 const actualTime = new Date();

 this.afs.collection<User>('users', ref =>
 ref.orderBy('status.call_moment.time_lim', 'asc')
   .where('status.value', '==', "CALLED")
   .where('status.call_moment.time_lim', '<=', actualTime))
   .snapshotChanges()
   .pipe(map((actions: DocumentChangeAction<User>[]) => {
      const indices = [];
      actions.map((a: DocumentChangeAction<User>) => {
        const data = a.payload.doc.data() as User;
        indices.push(data.id);
      });
      return indices;
    }))
    .subscribe(data => {
      for (const id of data) {
        return this.afs.doc(`users/${id}`)
        .update({
          'status.value': "OUT OF THE LINE",
        });
      }
    });
 }

我的解决方案中最大的问题是,很容易在半天的时间内达到读取操作的限制(我有一百个用户要处理!)。

您知道更好的解决方案吗? Lemme知道是否需要进一步的信息来解决它。谢谢!

1 个答案:

答案 0 :(得分:-1)

如果没有响应,而不是每秒轮询10秒,而只是在10秒钟的末尾进行读取,则应该以这种方式获得10倍的读取次数。如果您需要它比以前更具响应性,请每5秒轮询一次。