- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Вопрос к программистам, у которых есть опыт работы с высоконагруженными порталами. Как Вы списываете деньги с баланса, если баланс может параллельно изменяться другим скриптом (например, по Крону)? Используете ли Вы SELECT...FOR UPDATE?
Насколько правильна такая конструкция?
У себя в транзакции делаю. Т.е. в ней читаю баланс, проверяю на нужную сумму, создаю запись лога на уменьшение суммы, изменяю баланс.
Тут даже дело не в нагруженном проекте. Просто банально бывает от юзера по 2 одинаковых запроса прилетает в момент. Поэтому в транзакции можно успеть отследить дубль.
У себя в транзакции делаю. Т.е. в ней читаю баланс, проверяю на нужную сумму, создаю запись лога на уменьшение суммы, изменяю баланс.
Тут даже дело не в нагруженном проекте. Просто банально бывает от юзера по 2 одинаковых запроса прилетает в момент. Поэтому в транзакции можно успеть отследить дубль.
Транзакция это типа такого?
Строчка в innodb уже блокируется при операции, уже АВТОМАТИЧЕСКИ идёт транзакция, вам ничего делать не нужно. Т.е. запросы к этой строчке идут последовательно.
В myisam так вообще вся таблица блокируется с такими операциями.
Строчка в innodb уже блокируется при операции, уже АВТОМАТИЧЕСКИ идёт транзакция, вам ничего делать не нужно. Т.е. запросы к этой строчке идут последовательно.
В myisam так вообще вся таблица блокируется с такими операциями.
Как это в InnoDB она блокируется? Хотите сказать, что тут
между первым и вторым запросом не может выполниться параллельно другой?
При чём тут SELECT?!
Вы говорите про:
Не может он изменится. Операции UPDATE блокируют строчку на ЗАПИСЬ. И выполняются последовательно.
Также опешите проблему из-за которой у вас возник вопрос? Баланс в минус уходит или что?
При чём тут SELECT?!
Вы говорите про:
Не может он изменится. Операции UPDATE блокируют строчку на ЗАПИСЬ. И выполняются последовательно.
Также опешите проблему из-за которой у вас возник вопрос? Баланс в минус уходит или что?
Про UPDATE я знаю, а я говорю, что когда несколько таблиц и нельзя все запихнуть в один запрос, то лучше использовать транзакцию, чтобы не было изменений строчки между запросами.
Вот уже вырисовывается несколько таблиц :)
Просто мы же не можем знать, что у вас там за структура и т.д.
Конечно можно использовать START TRANSACTION, но если честно держать баланс в разных таблицах ИМХО как-то неверно.
Вот уже вырисовывается несколько таблиц :)
Просто мы же не можем знать, что у вас там за структура и т.д.
Конечно можно использовать START TRANSACTION, но если честно держать баланс в разных таблицах ИМХО как-то неверно.
да баланс то в одной, ну я приведу конкретный пример, когда сам разберусь со структурой:)
При операциях с деньгами лучше вообще update не использовать, а то потом концов не найдете, куда деньги пропали :) только insert: приход +100, расход -100. Баланс - складываете (сумму можно закешировать, чтобы не считать каждый раз).
При операциях с деньгами лучше вообще update не использовать, а то потом концов не найдете, куда деньги пропали :) только insert: приход +100, расход -100. Баланс - складываете (сумму можно закешировать, чтобы не считать каждый раз).
Хоть один умный человек посоветовал как правильно делать)☝