Структура базы данных в реальном времени для приложения чата - PullRequest
0 голосов
/ 21 сентября 2018

Я занимаюсь разработкой приложения для чата с использованием Firebase Realtime DB и облачных функций.У меня проблема с структурой моей БД и с тем, как извлечь узлы Chat, частью которых является User.Моя БД имеет следующую структуру:

{
  "chats" : {
    "chatId1" : {
      "lastMessage" : "example of last message",
      "timestamp" : "11111"
    },
    "chatId2" : {
      "lastMessage" : "generic last message",
      "timestamp" : "22222"
    }
  },

  "members" : {
    "chatId1" : {
      "uid1" : true,
      "uid2" : true
    },
    "chatId2" : {
      "uid1" : true,
      "uid3" : true
    }
  },

  "users" : {
    "uid1" : {
      "name" : "UserName1"
    },
    "uid2" : {
      "name" : "UserName2"
    },
    "uid3" : {
      "name" : "UserName3"
    }
  }
}

. На данный момент я нашел это решение: https://stackoverflow.com/a/37579607/7403707,, которое предлагает добавить users дочерний узел под каждым /chats дочерним и выполнить глубокоезапрос.Но после прочтения документации и просмотра нескольких видео я обнаружил, что это далеко не оптимально, поскольку загружается все дерево.Я подумал также о том, чтобы создать отдельный узел с именем /userChats, который будет иметь следующую структуру:

{
  "userChats" : {
    "uid1" : {
      "chatId1" : true,
      "chatId2" : true
    },
    "uid2" : {
      "chatId1" : true
    },
    "uid3" : {
      "chatId3" : true
    }
  }
}

, и выполнить следующие действия:

  1. Выбрать из /userChats все ключи ( chatIds ) определенного пользователя (например, пользователя с id = uid1 ).
  2. Выполните для каждого ключа (chatId) полученного снимка еще одна выборка, которая будет еще одним снимком со значением типа Chat.
  3. Сохранение всех выбранных Chat объектов в Array.
  4. Передайте этот массив адаптеру recyclerView моего приложения.

Каковы ваши предложения?Надеюсь, я бы хотел, чтобы он работал с Firebase RecyclerView, если это возможно.Спасибо.

...