Предположим, мы дублируем функцию Twitter. Насколько я могу судить, все теперь согласны на следующий дизайн, используя Redis.Redis Twitter-like Follow/Unfollow Design Pattern
Все твиты с последующим джо хранятся в отсортированном наборе «сс: Джо» с ключом = tweet_id, оценка = tweet_timestamp
Итак, когда Джо следует LadyGaga, чириканье LadyGaga добавляются в «сс: Джо», так это так хорошо.
Вопрос: как удалить твиты ladygaga из «ss: joe», когда joe unfollows ladygaga?
Итерация через каждый твист «ss: joe» и удаление тех, которые принадлежат к дамегаге.
Лучшее, что я могу придумать, это сохранить еще один сортированный набор для каждого пользователя, который хранит свои собственные твиты, поэтому у ladygaga будет свой отсортированный набор «tweets: ladygaga» с ключом = tweet_id, score = tweet_timestamp, затем мы можем выбрать Ледигага Tweets от ZINTERSTORE "ss: joe" и "tweets: ladygaga".
Есть ли лучшее решение?
Отличная точка. Так кто-нибудь знает, действительно ли это так, как Twitter? Но есть ли способ уменьшить 100 круглых поездок на всевозможные GET, если в среднем люди следуют за 100 другими? Как насчет тех орехов, которые следуют 2000? Мне все еще трудно представить, что вы отправляете 2 000 редисов по каждому запросу, особенно когда эти орехи более склонны быть активными пользователями, которые будут намного более суетиться, если система займет больше 2 секунд, чтобы ответить. – Jerry
Ну, вы все равно можете кэшировать данные (сделайте то же, что и вы предлагали, но временно), чтобы уменьшить круговые поездки, если это проблема. Redis имеет функцию TTL, поэтому вы можете получать идентификаторы твитов один раз и записывать их, например. 'c: joe' и дать ему TTL одной минуты. Если ключ 'c: joe' не существует, выберите их снова.Таким образом, Джо увидит новейший твит gaga с максимальной задержкой в 1 минуту, но воспринимаемое время реакции будет быстрым, и вы совершаете только однократную поездку максимум один раз за пользователя в минуту и используете только память для активных пользователей. Или просто используйте memcached, который использует большинство динамических сайтов с высоким трафиком. – Damon
Что касается реализации Twitter, я сомневаюсь, что кто-нибудь сможет рассказать вам о таких деталях. Люди, которые действительно знают, будут под NDA наверняка. – Damon