Всем привет. Помогите решить такую задачу.
Имеется общий фонд (пул) для накопления джекпота. С каждой ставки в игре этот фонд увеличивается на какую-то сумму (процент от ставки). В табличном виде что-то типа:
-jackpot_id INTEGER
-amount NUMERIC
,где с каждой ставки идёт
UPDATE table SET amount=amount+<%_от_ставки> WHERE jackpot_id = <тут_id>;
Когда это всё делали, то игроков было немного и борьба за захват записи была небольшой. Но с увеличением кол-ва игроков само-собой началась борьба за этот ресурс. Попробовали добавить дополнительное поле part_id - разбить джекпот на части, но это не дало ощутимой разницы, что очень удивило, так как при, скажем, 50 игроках и без part_id задержек практически нет, а при
800 игроках и 64 part_id задержки появляются, при том, что борьба за общую запись должна была снизиться.
Есть определенные требования, которые необходимо соблюсти:
1) Нельзя пропускать ни одной ставки. То есть все финансы должны точно совпадать
2) Сумма обновленного джекпота должна быть возвращена сразу после обновления (это, так скажем, крайне желательное условие)
3) Нельзя аккумулировать джекпот отдельно для каждого пользователя (то есть нельзя добавить user_id в эту таблицу), так как пользователей, учавствующих в розыгрыше джекпота, может быть сотни тысяч, и:
а) выборка общей суммы джекпота становится тяжелой.
б) джекпот могут часто выигрывать, и необходимо лочить все записи.
Есть ли какие-то идеи как лучше (правильнее) организовать накопление джекпота?