Постоянно обновлять базу данных - PullRequest
0 голосов
/ 20 октября 2018

Я новичок в разработке программного обеспечения, создаю приложение Angular TS, которое управляет людьми в очереди, и я использую Firebase / Firestore для своего бэкенда.У пользователя есть 3 статуса: пользователь либо ожидает, либо звонит, либо находится вне очереди.Когда вызывается пользователь, он / она должен ответить «присутствует» до 10 секунд, в противном случае он / она автоматически выводится из очереди.

Я пытаюсь реализовать эту последнюю спецификацию, активируя каждую секунду службуон проверит, превышен ли лимит времени, и в этом случае обновит статус пользователя «вне очереди» в соответствующем документе пожарного депо.

user.service.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",
        });
      }
    });
 }

user.component.ts

export class UserListComponent implements OnInit {
userList: User[];

ngOnInit() {
  this.userService.getUserList().subscribe(data => this.userList = data);

  setInterval(() => { this.userService.unqueueUser(); }, 1000);
 }
}

Самая большая проблема вмое решение состоит в том, что легко достичь предела операций чтения за полдня (и у меня есть сотня пользователей для обработки!).

Знаете ли вы лучшее решение?Позвольте мне знать, если вам нужна дополнительная информация, чтобы разобраться.Спасибо!

1 Ответ

0 голосов
/ 20 октября 2018

Вместо того, чтобы опрашивать каждую секунду в течение 10 секунд, просто прочитайте в конце 10, если был ответ, вы должны получить в 10 раз больше чтений таким образом.Если вам нужно, чтобы он был более отзывчивым, проводите опрос каждые 5 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...