пока я пишу про юскейсы и продуктовые требования отбора и сортировки записей, думаю заодно и с другого конца о подходящем алгоритме. у меня получается примерно так.
мне представляется ясным что на странице ленты уже стоящие записи не должны менять место ("прыгать"), а новые должны приезжать строго вверх списка. ‎· мезоздание
есть некий эмпирический диапазон удобного числа записей на странице ленты. соответственно, сперва генерится какое-то число записей в этом диапазоне, затем оно лайвом дорастает до верхней границы диапазона и останавливается, затем появляется надпись "и еще 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. ‎· мезоздание
но можно тьюнить, конечно. общая идея -- привести к одной скорости течения ленты разных порядков объемов и скоростей. ‎· мезоздание