LINUX.ORG.RU

Транзакции MYSQL для скрипта аффилейт маркетинга

 


0

1

Приветствую! Разрабатываю систему аффилированного маркетинга.

У каждого пользователя есть ссылка при переходе по которой идёт начисление просмотров, регистраций и в последствии часть оборотных так-же начисляется аффилейту.

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

Внимание вопрос, какой тип блокировки во время выполнения транзакции выбрать?

Помогите пожалуйста

Короче могу предложить начисление регистраций и просмотров так update table set views=views+1 where ..., эта операция атомарна, а деньги пересчитывать раз в 10 минут в зависимости от просмотров или чего там одним скриптом.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 2)
Ответ на: комментарий от goingUp

предложить начисление регистраций и просмотров так

Это чревато возможным двойным начислением и т.п. Потом не разобраться кто на ком стоял. Лучше сделать отдельную таблицу, куда просто вставлять записи о событиях. В оффлайне подсчитывать статистику.

no-such-file ★★★★★
()
Ответ на: комментарий от goingUp

Это путь в никуда. Количество должно быть функцией, а не статичным значением. Хоть вьюхой, хоть как. Ну а залочить транзакцию - не понял в чем вопрос.

Anoxemian ★★★★★
()

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

Вопрос кстати, абсолютно простейший, предельно простой. Рассчитан на кандидата-дурака, которого легко сбить с толку типами блокировок (которые тут совершенно ни при чем). Ну или автор вопроса некомпетентен.

asdpm
()
Ответ на: комментарий от goingUp

ммм, допустим несколько человек которых привёл аффилейт одновременно делают сделки, Я должен начислить 2 процента от сделки аффилейту, соотвественно есть вероятность, что одно из зачислений будет не честным, т.е. произойдёт на данные которые уже изменяются…

techno_bot
() автор топика
Ответ на: комментарий от techno_bot

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

cylon17
()

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

cobold ★★★★★
()