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