Я планирую проект системы для социальной сети, в которой «следуют» отношения между пользователями (например, в Instagram) и публикациями, которые они могут публиковать.
Если пользователь A следует за пользователем B, пользователь A может видеть все содержимое B на своей временной шкале, независимо от того, следует ли B также за A. Но, если B решает установить для своей настройки конфиденциальности значение Private, пользователь A не долженбольше не могу видеть содержимое пользователя B.
Я хотел использовать подход с разветвленной записью (метод push) для пользователя Feeds / Timelines, а именно: Хранение в Redis самых последних сообщенийиз всех людей, которых они следуют.Поэтому, когда все пользователи A, B и C следуют за пользователем D, а пользователь D публикует новое сообщение, я обновляю список каналов пользователей A, B и C. Это помогает выбрать канал в O (1) для каждого из них,что приятно.
Но что, если пользователь D устанавливает свои настройки конфиденциальности на «private», и он следует только за пользователем B. Это означает, что только пользователь B теперь сможет видеть его содержимое.Поэтому мне нужно удалить содержимое пользователя D из списков пользователей A и C. в redis.
Но разве это не слишком ненадежно?если у нас много пользователей со многими подписчиками, можем ли мы получить крайний случай, когда пользователи все еще могут видеть контент, который они не должны видеть в течение некоторого времени, пока Redis не закончит обновлять свои списки каналов?
Кроме того, это означает, что яследует также хранить в redis информацию, если пользователи следуют друг за другом или только один следует за другим.
Как это реализовано в «реальном мире» (twitter, facebook, instagram ....), я?что-то упустил?