Я разрабатываю приложение для Android с использованием Firebase, которое должно встраивать чат.
Моя проблема в том, что для получения сообщений мне нужно запрашивать все сообщения, у которых есть мой uid в поле отправителя или получателя. Это было бы чрезвычайно легко сделать в MySQL, но в Firebase (я должен придерживаться Firebase) выглядит как-то больно.
Я не могу просто так их отфильтровать. И, будучи полями receiver
и sender
объекта внутри чата, я не могу даже просто отфильтровать их, когда использую URL-адрес Firebase, например firebase.myapp.io/chat.
Итак, единственное возможное решение в этой модели - получить все чаты и отфильтровать их. Это почти хороший способ сделать эту работу. Кроме того, когда сообщений будет много, все может стать очень медленным.
Поэтому я подумал о разных способах достижения результата:
- Я получаю в чате ключи, соответствующие uid пользователя. Среди значений я получаю чаты с точки зрения пользователя, или я получаю ключи моих получателей в качестве значений и внутри сообщений
Но мне это не очень нравится, так как это может быть чрезвычайно избыточным, поскольку каждое сообщение нужно дважды вставлять в базу данных.
Другой способ - это запоминание ключей сообщений в другом объекте, таком как сообщения чата, и внутри я получил идентификаторы пользователей в качестве значений и в качестве ключей, содержащих ключи сообщений чата.
Каким будет лучший способ NoSQL для управления несколькими частными беседами в чате?