Форум → Сообщество → Флейм → Как гугл плюс устроен внутри?
Как гугл плюс устроен внутри?
Страницы: ← Предыдущая страница • Следующая страница →
-
10 декабря 2011 г. 20:15, спустя 8 часов 8 минут 5 секунд
у нас проблема в том, что этих кругов много, и пользователь может быть запросто подписан на тыщу-две таких кругов. Прокомментировал/отметился на фотке - подписался на канал этой самой фотки, а таких фоток - мульен. А кроме фоток еще есть встречи, топики, друзья и тд.
Все равно не понимаю что Ваня написал( -
10 декабря 2011 г. 21:17, спустя 1 час 2 минуты 10 секунд
то, что ты написал это не круги, а подписки. чего тут сложного?
table subscribe(user_id, topic_id, subs_date)
select t.*
from
topic as t inner join
subscribe as s on t.id=s.topic_id
where s.user_id=Я
limit не_слишком_много
если индексы есть, на миллионах записей будет работать быстро.
команда "отписаться": delete from subscribe where user_id=Я and topic_id=ЭТОТ_ТОПИК
по крону удаляем старый хлам: delete from subscribe where subs_date<ОЧЕНЬ_ДАВНОιιlllιlllι унц-унц -
10 декабря 2011 г. 22:09, спустя 51 минуту 46 секунд
там куча прочих условий, вот тут они перечислены http://phpclub.ru/talk/threads/%D0%9F%D0%BE%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%83%D0%B9%D1%82%D0%B5-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BB%D1%8F-%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-pub-sub.69946/
сейчас так
event (id, group_name, created_at …) group_name - что б объединять однородные события вокруг объекта
channel (id, name)
event2channel(event_id, channel_id)
user2channel(user_id, channel_id)
1. выбираем группы событий, которые нужно показать на странице
SELECT e.group_name FROM event e JOIN e.channels ec JOIN ec.subscribers s WITH s.user_id = %me% GROUP BY e.group_name ORDER BY e.created_at LIMIT 0, N
2. выбираем события для групп из прошлого запроса
SELECT e.* FROM event e JOIN e.channels ec JOIN ec.subscribers s WITH s.user_id = %me% WHERE e.group_name IN (…) ORDER BY e.created_at
50 тыщ записей в таблице event
73 тыщи записей в event2channel
420 тыщ записей в таблице user2channel
на локалке - по 15 секунд запросы идут -
10 декабря 2011 г. 22:09, спустя 23 секунды
на локалке - по 15 секунд запросы идут
ты каждому юзеру на комп ставишь сайт локально? :)Спустя 22 сек.ну придумывай решение блеядь, ты же теоретик, ты все можешь! фабьена спроси на худой конецСапожник без сапог -
10 декабря 2011 г. 22:10, спустя 47 секунд
нет, но это как бы звоночек, что что-то сделано неправильно и скоро будет пиздецСпустя 30 сек.лучше заранее перестраховаться
тут главное нихуя не закешируешь, так как события мгновенно показываться должны -
10 декабря 2011 г. 23:22, спустя 1 час 12 минут 3 секунды
а ежли каждому пользователю свой канал и пихать событие сразу во все нужные? -
10 декабря 2011 г. 23:42, спустя 19 минут 41 секунду
типа как тут http://highload.com.ua/index.php/2010/04/24/%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC-%D0%BB%D0%B5%D0%BD%D1%82%D1%83-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-%D0%BD%D0%B0-mongodb-php/ ? рассматриваю такое решение тоже, но тут нужно за многим следить, это затратно. -
11 декабря 2011 г. 1:16, спустя 1 час 34 минуты 12 секунд
типа как тут http://highload.com.ua/index.php/2010/04/24/%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC-%D0%BB%D0%B5%D0%BD%D1%82%D1%83-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-%D0%BD%D0%B0-mongodb-php/ ? рассматриваю такое решение тоже, но тут нужно за многим следить, это затратно.
Там вот сказано что размер таблицы растет (число элементов) и из-за этого она потом будет подтормаживать. Можно же брать фоном посты, которые старше 3х месяцев и отправлять их в своеобразный своп - дополнительную таблицу. Таким образом активная таблица будет всегда чистится и лагать меньше. -
11 декабря 2011 г. 1:24, спустя 8 минут 10 секунд
А загонять число сообщений в свопе можно в редис какой-нибудь$redis->run("SET id$id:mswpc " . $db->where(array('id' => $id))->countFrom('swap')->resultInt());
-
11 декабря 2011 г. 2:07, спустя 42 минуты 55 секунд
а ежли каждому пользователю свой канал и пихать событие сразу во все нужные?Там вот сказано что размер таблицы растет (число элементов) и из-за этого она потом будет подтормаживать. Можно же брать фоном посты, которые старше 3х месяцев и отправлять их в своеобразный своп - дополнительную таблицу. Таким образом активная таблица будет всегда чистится и лагать меньше.
Послушай Олега и совет от Ивана. Да затратно по объему, но зато по скорости ты получаешь выигрышный вариант.
типа как тут http://highload.com.ua/index.php/2010/04/24/%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC-%D0%BB%D0%B5%D0%BD%D1%82%D1%83-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-%D0%BD%D0%B0-mongodb-php/ ? рассматриваю такое решение тоже, но тут нужно за многим следить, это затратно.
Плюс к совету Ивана, можно добавить сжатие и хранить его в базе как raw data, а так же иметь temporary tables (аналогичная структуре топиков/евентов или как там у тебя), которая обнулятся раз в сутки/2-3 суток, и в которой хранятся крайние запрошенные посты старше 3 месяцев. -
-
11 декабря 2011 г. 2:18, спустя 8 минут 20 секунд
по мне это одна из ключевых сущностей, так зачем её тогда убирать? Но как описал их Костя, это по моему не совсем то. Первое что бударажит мой ум это:
Абырвалг, а нельзя убрать сущьность канала?загрузил 100 фоток - и вот, он подписался сразу на 100 каналов
почему фотка это канал? Почему не итем или же еще что то?Спустя 213 сек.Добрый вечер. Летом мы организовывали новостную ленту (activity feed/newsfeed), на mysql. Есть пользователь, он подписывается на несколько каналов. Есть события (прокомментировали фотку/отметились на ней, добавили друга), каждое вещает на несколько каналов. Находим события, вещающие на каналы, к которым подписан пользователь и отдаем их ему.
….
Что подскажите, господа-разработчики?
посмотри в сторону сфинкса, он прекрасно работает с фильтрацией, пагинацией. Но вот индекс таких штук может занимать очень долгое время. Но во 2 версии ввели лайв-индекс, т.е. он обновляется в реальном времени, а с версии 0.8 или 0.9 появился метод апи, который позволяет добавлять (тут могу спиздеть, т.к. знаю точно есть обновления определенной записи в индексе, а вот за добавление мне кажется, что есть, но это может быть плодом моего воображения) в индексСпустя 40 сек.да, я смотрю среди MQ-решений
мне кажется MQ не совсем подходящее решение. -
11 декабря 2011 г. 2:53, спустя 35 минут 21 секунду
так а что нельзя будет сделать без сущьности канала? -
11 декабря 2011 г. 3:02, спустя 9 минут 35 секунд
а как ты представляешь структуру без канала как такового (не важно пользователи подписываются на канал или же 1 юзер 1 канал, в который все пихается)?
так а что нельзя будет сделать без сущьности канала? -
11 декабря 2011 г. 3:16, спустя 13 минут 58 секунд
ну тут важно понимать, что такое канал, зачем он нужен, какую роль он несет…
Например, если это
event2channel(event_id, channel_id)
user2channel(user_id, channel_id)
сделать таким
user2eventl(user_id, event_id)
Что меняется? Я же не знаю, может ли Костян пойти так, вот и предлагаю.
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!