[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Персональная лента пользователя
testr
Всем привет. Такой вопрос, вот например вконтакте есть лента новостей, в которой собираются последние записи со стены друзей и т.д. а друзей может быть и 500. Так вот, если я хочу сделать нечто подобное, то вот если записи у нас в таблице articles и там есть поле uid то вот мы например выбираем 10 последних записей:

SELECT id,text from articles  WHERE uid IN(1,2,3,4,5,10) order by time DESC LIMIT 0,10


так вот, если друзей 500 то запрос этот будет очень грузить базу, так ведь? Можно как-то по-другому эту ленту формировать? А то хочется затрачивать минимум ресурсов... индекс на uid (а значения ведь могут повторяться) насколько я понимаю только частично решит проблему.



Спустя 4 часа, 4 минуты, 30 секунд (26.07.2012 - 00:13) testr написал(а):
по-другому не можете посоветовать да? (
а кто-то сталкивался с подобной задачей?

Спустя 13 часов, 50 минут, 39 секунд (26.07.2012 - 14:03) testr написал(а):
есть кто живой? (

Спустя 13 минут, 3 секунды (26.07.2012 - 14:17) inpost написал(а):
только индексы. Можно в отдельной таблице хранить новинки для пользователя, будет быстрее выборка, но дополнительный запрос на вставку.

Спустя 27 минут, 22 секунды (26.07.2012 - 14:44) neadekvat написал(а):
Цитата (inpost @ 26.07.2012 - 15:17)
Можно в отдельной таблице хранить новинки для пользователя, будет быстрее выборка, но дополнительный запрос на вставку.

Ага, а еще ты забыл про количество дублированной информации, которая скопится за очень короткий срок.


Спустя 14 минут, 49 секунд (26.07.2012 - 14:59) inpost написал(а):
neadekvat
Чистить надо. Я свою статистику каждый день кроном очищаю smile.gif

Спустя 45 минут, 37 секунд (26.07.2012 - 15:44) neadekvat написал(а):
inpost, чистить что именно? Это же не временные данные. Невозможность посмотреть свою ленту, например, недельной давности - это уже ограничение, а ограничения пользователи очень не любят.

Плюс не забываем про общие проблемы дублированной информации. Хотя бы актуальность. Представь, что я удалил свою запись, которую уже скопировали в чужие ленты (не "репостнули", а скопировали там, внутри, чтобы показать новость от меня), сколько времени пройдет, пока наш синхронизатор увидит это и удалит запись во всех лентах? Достаточно. А это не rss, которую загрузил - и все, тут важна актуальность.

Так что, пока сервис не вышел на уровень Вконтакте, у которого огромные вычислительные способности (свой дата-центр) и возможности хранить большой объем пользовательской информации, надо думать о том, как оптимизировать работу без дублирования. А уж потом кэширование и то, что предложил ты.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.