У меня есть эта база данных firebase в реальном времени

{
  "posts" : {
    "-Mt8iPsoxOk2rXwfjVKF" : {
      "date" : 1641914412858,
      "user_name" : "aaaa",
      "post_id" : "CYjxpgaMz9P",
      "view_count" : 2
    },
    "-Mt8iPvXA4ALKqSX0dH-" : {
      "date" : 1641914413011,
      "user_name" : "bbb",
      "post_id" : "CDzbKl0lIK-",
      "view_count" : 0
    },
    "-Mt8iPxfJOax_U6TjYov" : {
      "date" : 1641914413155,
      "user_name" : "ccc",
      "post_id" : "B7NZYOnA_NG",
      "view_count" : 0
    }
  }
}

Я хочу обновить количество просмотров сразу после прочтения сообщения, я пытался использовать этот метод, но проблема с ним в том, что у нас много чтений за одну секунду, поэтому требуется время, чтобы прочитать, а затем обновить представление, нам нужно ограничить опубликовать только для 5 просмотров, а затем удалить его, но мы не можем этого сделать, потому что за одну секунду у нас более 10 просмотров, для каждого просмотра требуется время, чтобы обновить количество просмотров, поэтому следующий пользователь продолжит читать тот же пост, даже если пост выходит за пределы просмотров.

[recentPostsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    
    self->user_name = snapshot.children.allObjects.firstObject.value[@"user_name"];
    self->post_key  = snapshot.children.allObjects.firstObject.key;

    [[[[self.ref child:@"posts"]child:self->post_key]child:@"view_count"]setValue:[FIRServerValue increment:@1]];
    
}];
0
Fawaz 13 Янв 2022 в 10:24

1 ответ

Лучший ответ

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

Если жесткое ограничение является жестким требованием для вашего приложения, рассмотрите возможность направления всего доступа к данным серверному компоненту, который затем может обеспечить соблюдение этого требования. Вы можете использовать для этого Cloud Functions или Cloud Run, если у вас еще нет сервера.

1
Frank van Puffelen 13 Янв 2022 в 18:31