Обновление Feed в соответствии с настройками приватности (PostgreSQL, Redis) с использованием подхода разветвленной записи - PullRequest
0 голосов
/ 21 сентября 2019

Я планирую проект системы для социальной сети, в которой «следуют» отношения между пользователями (например, в 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 ....), я?что-то упустил?

...