последнее сообщение в диалоге firestore firebase recent Message google cloud firestore 1 write

Мне необходимо записывать последнее сообщение в документ чата. Поскольку данная структура является наиболее простой для: выборки 10 последних чатов, их пагинации используя сортировкой по актуальности (orderBy: recent_message - created_at - desc) и автоматической поддержкой данных в актуальном состоянии (onShapshot).

channelRef
      .where('members', 'array-contains', userId)
      .where('type', 'in', currentChatTypes)
      .orderBy('recentMessage.createdAt', 'desc')
      .limit(15)

Необходимо предложить структуру обновления чата, которая позволит не превысить лимит записи в документ чаще раза в секунду (скрин правил firestore) либо способ не потерять функционал с другой структурой.

  1. способ обойти всё это раз https://firebase.google.com/docs/firestore/solutions/counters используя осколки документов, чтобы распределить нагрузку, но всё равно встает вопрос как ограничить обновление документа диалога раз в секунду

НО: но функции слишком быстро срабатывают и не получается ожидания в секунду...

  1. способ записи не совсем актуальных сообщений обновлять сообщение только если с последней записи прошло больше 1с. но так мы плодим чтения и можем получить не актуальную информацию о чате.

НО: не спасает от одновременной записи

  1. способ с очередью rabbitMQ может есть вариант отправлять всё в Очередь и затирать очередь при получении нового сообщения с периодичностью в одну секунду. После раздумий больше нравится redis, но необходимо прикручивать крон для актуализации данных и проблемы с перезаписью актуальных сообщений

НО: не понятно стоит ли оно того)


Ответы (0 шт):