|
Зачислить заработки по итогу дня (запутался в транзакциях)
|
|||
---|---|---|---|
#18+
В игрушке персы на протяжении дня зарабатывают клановые очки. По концу дня нужно разнести заработанные игроками очки по кланам. Также необходимо списать часть очков - "налог" - с клана (дифф. по уровню). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Вроде все просто. Но так заморочился с транзакциями, блокировками и прочим, чтобы все обработать верно, что уже ничего не понимаю. Нагородил вагон запросов. Выбираю список кланов-получателей и дальше для каждого клана в отдельной транзакции (read committed) 1 сформировать уникальное число (случайное число либо insert в левую таблицу-генератор) 2 записать это число в поле clanpoints.processed текущего клана 3 выбрать сумму очков в измененных записях 4 изменить остатки в clan.points 5 вычитать новое значение clan.points и поправить уровень (уровень зависит от к-в очков) Дополнительно надо выставить списание налога, добавив запись с "отрицательным заработком" в clan.points, который учтется в следующие сутки. Это нормально так делать или я нагородил вагон полной фигни ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 17:00 |
|
Зачислить заработки по итогу дня (запутался в транзакциях)
|
|||
---|---|---|---|
#18+
AndryG или я нагородил вагон полной фигни ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 17:10 |
|
Зачислить заработки по итогу дня (запутался в транзакциях)
|
|||
---|---|---|---|
#18+
Теоретически оно понятно. Подскажите, пжлст, как провести зачисление без потерь. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 11:13 |
|
Зачислить заработки по итогу дня (запутался в транзакциях)
|
|||
---|---|---|---|
#18+
AndryG , делайте online fiddle (например, на https://dbfiddle.uk/?rdbms=mysql_8.0 ) и давайте для него эталонный ответ - будем смотреть-пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2020, 21:09 |
|
Зачислить заработки по итогу дня (запутался в транзакциях)
|
|||
---|---|---|---|
#18+
Плюнул на высокие материи параллелизма и наваял одним запросом. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Хотел на этой задачке вникнуть, как по-взрослому разруливают блокировки и т.п., да не вышло. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2020, 18:38 |
|
|
start [/forum/topic.php?fid=47&msg=40000666&tid=1828378]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 235ms |
0 / 0 |