Firestore, выборка только тех документов из коллекции, которых нет в клиентском кеше - PullRequest
0 голосов
/ 23 мая 2019

Я реализую приложение чата один-к-одному, используя firestore, в котором есть коллекция с именем chat, так что каждый документ коллекции отличается thread.

Когда пользователь открываетприложение, на экране должны отображаться все темы / разговоры этого пользователя, включая те, которые имеют новые сообщения (как в WhatsApp).Очевидно, что один из методов заключается в получении всех документов из коллекции chat, которые связаны с этим пользователем.

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

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

Каждый документ в коллекции chat имеет следующие поля:

senderID: (id of the user who have initiated the thread/conversation)
receiverID: (id of the other user in the conversation)
messages: [],
lastMsgTime: (timestamp of last message in this thread)

В настоящее время для загрузки всех потоков определенного пользователя я подаю заявкуследующий запрос:

const userID = firebase.auth().currentUser.uid
firebase.firestore().collection('chat').where('senderId', '==', userID)
firebase.firestore().collection('chat').where('receiverId', '==', userID)

и, наконец, я объединяю документы, возвращенные этими двумя запросами, в массив для отображения в плоский список.

1 Ответ

1 голос
/ 23 мая 2019

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

Единственный распространенный способ обходадля этого клиент должен отслеживать, когда он в последний раз был в сети, а затем выполнить запрос для документов, которые были изменены с того времени.Но если вы хотите показать как существующие, так и новые документы, это должен быть отдельный запрос, а это значит, что он окажется в отдельной области кэша.Таким образом, в этом случае вам придется настроить собственное автономное хранилище поверх хранилища Firestore, а это больше работы, чем я обычно готов сделать.

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