?

Log in

No account? Create an account
official

Заводы стоят, одни мордоляпы в стране!


Previous Entry Share Next Entry
winter kaktus

Технология репостинга

Прочитал у Промыча об изменениях в механизмах рассчета вознаграждения за платные репосты. В целом я согласен с его выводами, однако сейчас разговор не об этом, а о технологии. В оригинале анонса, в частности, говорится, что:

«Теперь репостер будет получать кол-во жетонов, соответствующее новой аудитории, которую он привносит автору поста.».

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

Вот есть два репостера, назовем их Вася и Петя. Оба разместили один и тот же репост. Если к ним в журнал зайдет какой-либо другой пользователь, и увидит исходный пост, то тут все понятно. К кому зашли, тот аудиторию и принес. А вот если пользователь, например, Колян, зашел в журнал к обоим репостерам? Кому добавится плюсик? Васе, кто первым разместил репост, или Пете, к которому Колян зашел первым?

Кроме того, я все еще наивно полагаю (видимо, потому что сам так делаю), что подавляющее большинство пользователей читает друзей через ленту. И тут ситуация осложняется до безобразия. Есть десять читателей. У каждого из них в друзьях по пять репостеров. Читатели дружно открывают ленту, и видят по пять одних и тех же репостов. Вопрос к залу, кому из пяти репостеров засчитают всю эту читательскую аудиторию? Как ее делить-то? Каждому по два? Или как-то иначе?

Кто-нибудь может объяснить мне, как же все-таки будет рассчитываться эта «новая аудитория» от которой напрямую зависит доход репостера?

UPD. acer_leaf и fukuro_raw прояснили ситуацию. Считаться будут не реальные читатели, просмотревшие пост, а потенциальные. То есть все френды репостера, минус френды всех предыдущих репостеров. И это совсем не здорово. Если репост сделает массфрнедер, то остальные репостеры не получат практически ничего. И я, как репостодатель в минусе, потому что профессиональных массфрендеров-репостеров по доброй воле никто не читает. В итоге и я плачу деньги вообще непонятно за что, и честные репостеры лишаются заработка.

UPD2. Ан нет, все не так плохо. sergey_45i приводит ссылку на разъяснения от администрации. Видимо для каждого репостера будет строиться список его читателей, которые учитыватались при расчете его СК, скажем за вчера. И из этого списка будут удалятся аналогичные читатели предыдущих репостеров. Тогда, при неограниченном бюджете, первый репостер получает вознаграждение как и раньше, по формуле, а все остальные за своих читателей, делающих им СК, кроме тех из них, которые учитывались при рассчете СК всех предудущих репостеров.

Тогда при минимальных ставках в 200 жетонов, для репостеров скорее всего ничего не изменится. Даже при СК = 100 уникальных читателей должно хватить, чтобы получить 200 жетонов будучи десятым в очереди. А вот репостодателям придется слегка расширить свои бюджеты. Но это не так уж и страшно, на промо уходит все равно гораздо больше.

А ленты действительно станут чище.

UPD3. Черт, я забыл про снятие ограничений по СК! Вот это реально засада. Я абсолютно не готов платить по 200 жетонов за единственное посещение репостера с СК = 20. Все равно от него читать мой пост никто не придет.

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

Buy for 100 tokens
Buy promo for minimal price.

  • 1
brenik March 9th, 2013
Хотелось бы отметить два момента:
- вот к примеру в 6 утра кто то заряжает бюджет 1000, тут же к примеру Примчик его забирает и отбирает автоматом 9120.
Но в 6 утра Промчика прочтут ну 50 человек. А вот следующий репост например сделает fukuro_raw в 9 утра, получая остатки суммы 880. Вот только в 9 утра у fukuro_raw этот пост увидит 100 человек.
Теперь скажите мне в чём справедливость? Все относительно. Даже если fukuro_raw сделает сразу репост, но его аудитории в тот момент будет больше в ЖЖ, то он даст больше аудиторию.

- ребята это же невозможно так быстро вычитать остатки непересечённой аудитории. Вы себе реально представляете селект который будет просчитываться для 20-го или 30-го репостера. Это же не цифру достать с ячейки. Тобишь будет как то по другому, но нам представляют всё красиво, мол пересечение аудиторий. Мне представляется другая штука, будет тупо репост по СК*10, и так для следующего пока не наступит ноль в бюджете. Просто сделают минималку в 200 жетонов.
Не думаю что кто то кроме тебя сможет корректно проверить пересечение аудитории и правильность начисления оплаты для репоста. А так как проверить не представляется возможным, то будет какая то простая функция учитывающая несколько показателей.

fukuro_raw March 9th, 2013
ты, чё брат, какие репосты у fukuro_raw вообще могут быть и в 9 утра, в частности? )))

brenik March 9th, 2013
о брат, fukuro_raw гроза репостеров. говорят он работает круглосуточно не покладая рук и ног. ))

vmenshov March 9th, 2013
У нас 11 442 репостера. Их СК-образующие френдосвязи выносим в отдельную таблицу. Это не так много, оно примерно равняется сумме СК всех пользователей с СК > 10. Это примерно 1 300 000 записей. Если пост еще репостили, то показываем сумму как СК*10. Во время первого репоста записываем во вторую таблицу ("друзья поста") из первой всех френдов репостера. Кэшируем их. Если потом заходит кто-то с СК>19, берем его СК френдов из первой, и вычитаем из них всех френдов поста. Кэшируем это число и показываем его на кнопке. Если второй чел сделал репост, добавляем в "друзья поста" его уникальных френдов, и так далее. Все операции тут быстрые, время O(N). N - в пределах десятка тысяч.

Так что все будет работать быстро.

Edited at 2013-03-09 03:40 pm (UTC)

dewald March 9th, 2013
Ок, но сразу вопрос. Правильно ли я понял, что "СК-образующие френдосвязи" ты предлагаешь отсекать на уровне тех 19-ти с хвостиком тысяч пользователей, которые имеют СК >9?

vmenshov March 9th, 2013
"СК-образующие френдосвязи" - это связи пользователей с СК >= 20 (кто может делать репост) со всеми их "в друзьях у", которые учитывались вчера при расчете их СК. Не важно какой у этих "в друзьях у" был СК.

Но, посколько 1 СК это примерно один читатель, значит сумма СК всех пользователей с СК >= 20 дает нам очень точное количество необходимых связей. Их чуть меньше 1,3 миллиона, я по базе проверил.

"СК > 19" это "СК от 20-ти и выше", просто мне так писать короче :) Программисткий подход :)

dewald March 9th, 2013
Это если верна версия о том, что 1 СК - один читатель.
Мне представляется что в отношении тех подписчиков, у которых СК<10, это не совсем так. А ведь там сидит вся подводная часть ЖЖ-айсберга.

vmenshov March 9th, 2013
Я думаю что 1 СК это один "живой" читатель, который сам пишет посты, и коментит другие журналы. Даже если реальных френдов, которые учитываются при рассчете СК, несколько больше, чем само значение СК, то я думаю не на много. Даже если оно в 4 раза больше, то это всего 5 миллионов записей в первой таблице, по 8 байт каждая. 40 мегабайт для кэша - это копейки. Кроме того друзья пользователей с СК < 20 нас вообще не волнуют, так как репосты такие пользователи делать не могут, и для них рассчитывать сумму на кнопке не надо.

new_finder March 10th, 2013
При небольших значениях СК это точно не так. У меня живых френдов значительно больше, к примеру (во всяком случае было, когда СК был меньше 20)

dewald March 9th, 2013
Но, кстати, после того, как введут фишку, реальным становится проведение серии экспериментов для анализа расчета СК.

vmenshov March 9th, 2013
Я вот тоже сейчас сижу и об этом как раз думаю :)

brenik March 9th, 2013
с двумя таблицами будет конечно быстрее. я чё то подумал что оно будет динамически считаться. до 10с точно бы было. А с таблицами уложатся в секунду.

vmenshov March 9th, 2013
Быстрее уложатся. Все в память влазит легко, там одни айдишники интовые. Это будет за милисекунды считаться. А вот если считать в лоб, то да. Поставил кнопку репоста и завалил ЖЖ :)

brenik March 9th, 2013
одно только но, несколько одновременных репостов разных постов это раз.
плюс цифра должна пересчитываться каждому кто на неё смотрит, а это может быть не одна сотня глаз. и для каждого должна сработать процедура, сселектить, проинсертить, вычислить, потом почистить после себя таблицу. а несколько из этой сотни человек ещё и усиленно жмут Ф5.

а это согласись уже совсем другая нагрузка. ой не всё так просто.

vmenshov March 9th, 2013
Не по каждому, а только по тому, у кого СК > 19, и кто еще эту страницу с момента последнего репоста не видел. Это достаточно малая часть запросов страницы. Если читатель с СК > 19 запись уже видел, то данные берутся из кэша. Если мимо кэша попали, то списки френдов просматривающего из первой таблицы берем по индексу, списки уже "занятых" френдов берем из "друзей поста", Вычитаем из второго списка первый, и получаем нужную цифру.

Если же читатель с СК > 19 нажал на кнопку репоста, то просто добавляем в таблицу "друзья поста" новых друзей пользователя и инвалидируем кэши по этому посту. Эти операции быстрые, так как все списки френдов отсортированы по Id, и содержат только интовые Id.

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

  • 1