последнее сообщение в диалоге 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) либо способ не потерять функционал с другой структурой.
- способ обойти всё это раз https://firebase.google.com/docs/firestore/solutions/counters используя осколки документов, чтобы распределить нагрузку, но всё равно встает вопрос как ограничить обновление документа диалога раз в секунду
НО: но функции слишком быстро срабатывают и не получается ожидания в секунду...
- способ записи не совсем актуальных сообщений обновлять сообщение только если с последней записи прошло больше 1с. но так мы плодим чтения и можем получить не актуальную информацию о чате.
НО: не спасает от одновременной записи
- способ с очередью rabbitMQ может есть вариант отправлять всё в Очередь и затирать очередь при получении нового сообщения с периодичностью в одну секунду. После раздумий больше нравится redis, но необходимо прикручивать крон для актуализации данных и проблемы с перезаписью актуальных сообщений
НО: не понятно стоит ли оно того)