Я хочу создать фид для моих пользователей, где они могут видеть сообщения только тех людей, за которыми они следят.Моя база данных выглядит следующим образом:
users
-- userID_1
---- userName: "PennyWise"
---- userGender: "M"
---- userFollowing
------ userID_2: true
------ userID_3: true
------ userID_4: true
---- userFollowers
------ userID_2: true
------ userID_4: true
posts
-- postID_1
---- userID: userID_1
---- postContent: "some content"
---- postTimeStamp: 1540026290
-- postID_2
---- userID: userID_2
---- postContent: "another post"
---- postTimeStamp: 1540027077
Теперь я хотел бы добавить следующую структуру в свою базу данных:
feed
-- userID_1
---- postID_1
------ postTimeStamp: 1540026290
---- postID_2
------ postTimeStamp: 1540027077
Я добавляю метку времени, чтобы упростить сортировку при получении данных.Я почти уверен, что смогу выяснить, как отображать правильные элементы, извлекая postIDs под зарегистрированным userID, а затем выполняя цикл foreach для получения дополнительной информации, основанной на postID.
Моя самая большая озабоченность по поводуэта реализация и ссылки на данные, когда я добавляю новый пост.Представьте, что у меня 1200 подписчиков, и мне нужно было бы добавить postID к каждому каналу подписчиков.Я читал о возможности выступать партиями (по 500 записей в каждой), но я не совсем уверен, что это будет лучшим подходом?Должен ли я запускать это в фоновом режиме, если бы я реализовал это, чтобы пользовательский интерфейс не зависал?Что произойдет, если в процессе записи в базу данных будет потеряно соединение?
В последние дни я много думал об этом.Этот вопрос не столько о структуре или чем-то еще, так как об этом уже много писем.Мне было просто интересно, смогу ли я реализовать Облачные функции в качестве дополнения к моей базе данных в реальном времени.Смогу ли я, используя onCreate (), создавать ссылки на данные на сервере и отправлять их в фид каждого подписчика?Или это просто невозможно, учитывая переменные и тому подобное?Когда я добавляю новый пост, моё действие выглядит следующим образом:
let newRef = Ref.child("posts").childByAutoId()
newRef.setValue(["userID": loggedInUserID, "postContent": post["postContent"], "postTimeStamp": dateNow)
Если бы я обновлял фид всех подписчиков на стороне клиента, мне пришлось бы запустить дополнительный setValue () для всехподписчики, основанные на loggedInUserID.Вероятно, это может вернуть некоторые проблемы, когда число фолловеров велико (например, 1200, как я упоминал ранее).Что я хотел бы знать, так это: могут ли Облачные функции помочь мне в этом или я должен придерживаться классического подхода?
Если нет, ссылается ли на отличное решение, или я должен пролистать данные и продублировать весь пост?- не только ключ - всем последователям?Я могу только представить, какой объем данных потребуется для создания или редактирования нового сообщения.
Спасибо!