User avatar

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

Comment

мне представляется ясным что на странице ленты уже стоящие записи не должны менять место ("прыгать"), а новые должны приезжать строго вверх списка.

 ‎· яснополянская хлеборезка
Comment

есть некий эмпирический диапазон удобного числа записей на странице ленты. соответственно, сперва генерится какое-то число записей в этом диапазоне, затем оно лайвом дорастает до верхней границы диапазона и останавливается, затем появляется надпись "и еще 220 новых записей".

 ‎· яснополянская хлеборезка
Comment

то есть, инкремент и хард релоад, по-моему, должны отличаться порядком (но ограниченно -- составом, релоад уносит все устаревшие записи со страницы, но приносит те же что принес инкремент).

 ‎· яснополянская хлеборезка
Comment

событием считаем саму запись, новые лайк или коммент. на редактирование не реагируем. авторское событие -- событие от автора исходной записи. дружеское событие -- событие от одного из твоих друзей (точнее, событие из тех на которые ты подписан).

 ‎· яснополянская хлеборезка
Comment

собственно лента генерится из четырех других.

 ‎· яснополянская хлеборезка
Comment

my own -- записи сортируем по времени любого последнего события

 ‎· яснополянская хлеборезка
Comment

my discussions -- собираем лайки в пачки из пяти (например), сортируем по времени последнего комментария или пачки лайков или моего лайка, смотря что позже

 ‎· яснополянская хлеборезка
Comment

friends -- (A) так же как my discussions

 ‎· яснополянская хлеборезка
Comment

или friends -- (B) сортируем по времени последнего авторского действия

 ‎· яснополянская хлеборезка
Comment

friends likes and comments -- по времени первого дружеского действия

 ‎· яснополянская хлеборезка
Comment

общая идея -- чтоб ни один поток не забивал другой на порядок, особенно чтоб friends и friends likes and comments текли достаточно медленно и равномерно, потому что у них нет другой страницы, они только здесь, в отличие от my own и my discsussions.

 ‎· яснополянская хлеборезка
Comment

ну и я постарался хоть и без эмпирики, но какую-то отправную точку этими алгоритмами предложить чтоб, по-моему, на реальных числах и потоках они нормально смешались. с реальными потоками и числами тут поле твикать все эти варианты алгоритмов.

 ‎· яснополянская хлеборезка
Comment

вот, затем четыре ленты сливаем, используя в качестве ключа тот таймстемп, по которому сортировали саму исходную подленту.

 ‎· яснополянская хлеборезка
Comment

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

 ‎· яснополянская хлеборезка
Comment

хей-хо! прикольно вышло .)

 ‎· яснополянская хлеборезка
Comment

по времени первого дружеского действия это ты жестоко. Погасим флеймы в зародыше, так сказать.

 ‎· BUG: user_id=<7>
Comment

@kukutz сам понимаешь, лента одна а событий много. но при этом одним лайком или комментарием владелец переводит запись из friends likes and comments в my discussions.

 ‎· яснополянская хлеборезка
Comment

но можно тьюнить, конечно. общая идея -- привести к одной скорости течения ленты разных порядков объемов и скоростей.

 ‎· яснополянская хлеборезка

1 2 3 4 5 6 7 8 9 10