пока я пишу про юскейсы и продуктовые требования отбора и сортировки записей, думаю заодно и с другого конца о подходящем алгоритме. у меня получается примерно так.
мне представляется ясным что на странице ленты уже стоящие записи не должны менять место ("прыгать"), а новые должны приезжать строго вверх списка. ‎- недоверчивый интервал
есть некий эмпирический диапазон удобного числа записей на странице ленты. соответственно, сперва генерится какое-то число записей в этом диапазоне, затем оно лайвом дорастает до верхней границы диапазона и останавливается, затем появляется надпись "и еще 220 новых записей". ‎- недоверчивый интервал
то есть, инкремент и хард релоад, по-моему, должны отличаться порядком (но ограниченно -- составом, релоад уносит все устаревшие записи со страницы, но приносит те же что принес инкремент). ‎- недоверчивый интервал
событием считаем саму запись, новые лайк или коммент. на редактирование не реагируем. авторское событие -- событие от автора исходной записи. дружеское событие -- событие от одного из твоих друзей (точнее, событие из тех на которые ты подписан). ‎- недоверчивый интервал
собственно лента генерится из четырех других. ‎- недоверчивый интервал
my own -- записи сортируем по времени любого последнего события ‎- недоверчивый интервал
my discussions -- собираем лайки в пачки из пяти (например), сортируем по времени последнего комментария или пачки лайков или моего лайка, смотря что позже ‎- недоверчивый интервал
friends -- (A) так же как my discussions ‎- недоверчивый интервал
или friends -- (B) сортируем по времени последнего авторского действия ‎- недоверчивый интервал
friends likes and comments -- по времени первого дружеского действия ‎- недоверчивый интервал
общая идея -- чтоб ни один поток не забивал другой на порядок, особенно чтоб friends и friends likes and comments текли достаточно медленно и равномерно, потому что у них нет другой страницы, они только здесь, в отличие от my own и my discsussions. ‎- недоверчивый интервал
ну и я постарался хоть и без эмпирики, но какую-то отправную точку этими алгоритмами предложить чтоб, по-моему, на реальных числах и потоках они нормально смешались. с реальными потоками и числами тут поле твикать все эти варианты алгоритмов. ‎- недоверчивый интервал
вот, затем четыре ленты сливаем, используя в качестве ключа тот таймстемп, по которому сортировали саму исходную подленту. ‎- недоверчивый интервал
отрезаем начальную колбасу подходящей длины, пишем внизу таймстемп по который отрезали, для удобства дебага. соль и перец добавляем по вкусу. ‎- недоверчивый интервал
хей-хо! прикольно вышло .) ‎- недоверчивый интервал
по времени первого дружеского действия это ты жестоко. Погасим флеймы в зародыше, так сказать. ‎- BUG: user_id=<7>
@kukutz сам понимаешь, лента одна а событий много. но при этом одним лайком или комментарием владелец переводит запись из friends likes and comments в my discussions. ‎- недоверчивый интервал
но можно тьюнить, конечно. общая идея -- привести к одной скорости течения ленты разных порядков объемов и скоростей. ‎- недоверчивый интервал