• Как избежать одновременного UPDATE таблицы базы данных MySQL?

    LaRN
    @LaRN
    Senior Developer
    Транзакции всем хороши, но под нагрузкой приводят к замедлению работы приложения и иногда, если не правильно работать с запросами к deadlock-м.

    Можно создать отдельную таблицу в которую записывать запросы пользователей на получение ресурса, например так:
    идентификатор пользователя, идентификатор ресурса, статус заявки (в очереди, обработана, отклонена), дата и время заявки с точностью до миллисекунд (ну или числовое поле с автонумерацией).

    При нажатии на "купить товар" операция выполняется в два шага, первый шаг - помещаем заявку пользователя в эту таблицу. (несколько пользователей могут придти за одним ресурсом и приоритет будет у того кто пришел первым)
    Таблица нужна, чтобы не накладывать блокировок на таблицы БД (блокировки могут быть из-за открытой транзакции)

    Далее второй шаг - запускаем процедуру получения статуса заявки (она должна вернуть ответ получил пользователь свой ресурс или нет, т.е. обработана его заявка успешно или отклонена).

    Обработка заявок - это отдельный серверный процесс, он берет заявки по очереди поступления и обрабатывает (изменяет состояние ресурса в БД и состояние заявки) до тех пор пока у выбранного ресурса хватает количества, все пользователи которым не хватило ресурса получают сообщение о невозможности получить ресурс.
    Ответ написан
    3 комментария
  • Установка Windows Forms приложения на сервер, возможно ли?

    newross
    @newross
    Product owner
    Есть множество вариантов. Самые простые:
    1. Арендовать VPS с Windows. Работать программа будет точно также, как и на домашнем компьютере.
    2. Можно отказаться от использования браузера, заменив его парсингом http-запросов. Тогда программу можно будет разместить в сервисе Windows и она будет тихонько делать свое дело, никому не мешая. Конечно, этот вариант сработает, если домашний компьютер все время включен.
    Ответ написан
    6 комментариев