Ближайший мастер-класс #Highload в 2016 году:
- 18 июня 2016 в Москве, билеты и запись:
http://devconf.ru - 26 июня 2016 в Санкт-Петербурге, запись:
php.spb.ru/ms/sign-up.html Новые вопросы просьба отправлять сюда:
>>>
http://spb-borodin.livejournal.com/2267.html <<<
Comments 111
Reply
Reply
Reply
Reply
И еще вопрос, как собирать ленту, если друзья раскинуты по разным серверам?
Reply
С лентой все весьма сложно. Я обычно рассказываю о 2х типичных методах - репликация одной новости по всем серверам или наоборот сбор новостей с подготовленных хранилищ. Универсальных решений нет, приходится разбираться индивидуально.
Reply
Но с другой стороны если автора пишет новость и у него несколько тысяч друзей и десятки тысяч друзей друзей, репликация выглядит несколько тяжеловато. Получается каждую новость надо обрабатывать кронами в фоновом режиме?
Reply
Reply
Reply
Reply
(The comment has been removed)
Фреймворки отвечают на вопрос - как писать код. Я занимаюсь темой - как хранить и оперировать данными для постороения большого проекта, на сотни серверов. Фреймворки не имеют к этому ни малейшего отношения и программировать, я надеюсь, все сами умеют .-)
Да, и по скайпу я вам тоже уже ответил.
Reply
Reply
Как же у страха глаза велики. Не существует этой проблемы. Делаем так. Кладем табличку соответствия в файлы. Например, по 10% от таблицы на файл, всего 10 штук. Файлы просто инклюдим. Это будет кеш. В качестве альтернативы можно хранить эту информацию в локальных мемкешах или APC.
> В этом случае узкое место - это проблема добавления новых серверов -
> Вам придется делать перераспределение данных между новым количеством серверов.
Не придется. При добавлении нового сервера ничего не происходит. Вообще. Но можно:
1) Указать в карте спотов, что новых пользователей нужно завести на новом сервере.
2) Собрать 10% случайных пользователей с наиболее тормозного сервера в сети и перенести их профайлы на новый сервер. Последовательно блокируем 1000 юзеров, копируем, разблокируем. 1000 юзеров на 5 минут не будут обслуживаться. Это мелочь.
Reply
user(1:m):photos => (1:m) comments => (1:m) likes. Т.е связи один-ко-многим реализуем без JOIN-во вообще, а только с помощью NoSQL(memcached) таблиц соответствий?
Например: мы смотрим альбом(фотографии) определённого пользователя(фотографии и комменты разбросаны по разным серверам сети), photo_id(10, 100501), обращаемся к таблице соответствий key/value(NoSQL, Memcache) photos_map(photo_id, serialize(array('Servers' => array('comment1'=>array('tables_name' => array('tbl_comment1','tbl_comment20'),'m12' =>array('tables_name' => array('messages101'))). Далее по id фотографии извлекаем из карты соответствий photos_map сервера и таблицы в которых эти комменты разбросаны и извлекаем для конкретной фотки.
Т.е может быть для многих сущностей(messages, photos, comments), у нас не одна карта соответствий? Т.е я не понимаю как можно всё в одну "бедную" карту всё запихнуть...
Reply
Исключение: когда фоток или сообщений у одного юзера зашкаливает за 100.000 записей. Тогда надо либо ограничить, либо шардить.
Reply
Leave a comment