proksey-net

Рейтинг
103
Регистрация
22.08.2012
Stek:
да, примерно так. Внутри транзакции происходит проверка баланса, проверка наличия товара, списывание товара, запись продажи, перерасчет баланса.

А как-то можно проверить, что транзакция работает? Если тип таблицы InnoDB, она точно запускается?:)

Igsend:
Хоть один умный человек посоветовал как правильно делать)☝

я так и делаю, но кэш баланса хочется тоже правильно обновлять:)

LEOnidUKG:
Вот уже вырисовывается несколько таблиц :)

Просто мы же не можем знать, что у вас там за структура и т.д.

Конечно можно использовать START TRANSACTION, но если честно держать баланс в разных таблицах ИМХО как-то неверно.

да баланс то в одной, ну я приведу конкретный пример, когда сам разберусь со структурой:)

LEOnidUKG:
При чём тут SELECT?!

Вы говорите про:



Не может он изменится. Операции UPDATE блокируют строчку на ЗАПИСЬ. И выполняются последовательно.

Также опешите проблему из-за которой у вас возник вопрос? Баланс в минус уходит или что?

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

LEOnidUKG:
Строчка в innodb уже блокируется при операции, уже АВТОМАТИЧЕСКИ идёт транзакция, вам ничего делать не нужно. Т.е. запросы к этой строчке идут последовательно.

В myisam так вообще вся таблица блокируется с такими операциями.

Как это в InnoDB она блокируется? Хотите сказать, что тут


SELECT * FROM users WHERE id=:id
UPDATE users SET balance=:balance WHERE id=:id

между первым и вторым запросом не может выполниться параллельно другой?

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

Тут даже дело не в нагруженном проекте. Просто банально бывает от юзера по 2 одинаковых запроса прилетает в момент. Поэтому в транзакции можно успеть отследить дубль.

Транзакция это типа такого?


query("START TRANSACTION");
query("...");
query("COMMIT");
melkozaur:
Вы свою подпись немножко дискредитируете

почему же? ведь речь идет о моем сайте, который я делал, когда только начал работать с PHP и MySQL. По-моему, даже у супер крутых программистов были времена плохого кодинга

Vigore:
Сразу приношу извинения за свой дилетантизм в этом вопросе (надеюсь это временно). В общем смысл такой. Создам я свой простенький сайтик. Первая проба веб-пера, загрузил на хостинг, сделал домен, все ок! А в последствии, смогу ли я его постоянно аппгрейживать (я имею ввиду добавлять php функции, ставить какой-нибудь движок или ещё что-нибудь такое))

не сможете. То, что Вы сейчас сделали - это шаблон. Поэтому я бы назвал это не добавлять php-функции к этому шаблону, а добавить этот шаблон к фреймворку/CMS. А вообще, моя рекомендация (это мое личное мнение) - начинайте сразу писать программный код, сделайте свой мини-фреймворк, пусть даже без ООП, научитесь структурировать данные. На основе своего опыта я Вам скажу следующее: когда-то я сделал сайт на простейшем самописном движке (я тогда только начинал), там даже запросы к SQL были простейшие, думал, потом сделаю upgrade, однако, уже 5 лет никаких апгрейдов, хотя нужно, но исправлять кучу такого кода займет дни, а потом еще недели на исправление ошибок, проще с нуля все сделать.

Вообще, такой подход - сначала визуализация, потом программирование - это все началось с высокоуровневого программирования, например, на Delphi сначала форму рисуешь, а потом пишешь программный код под нее. А ведь раньше на ассемблере или Pascal под DOS начинать нужно было именно со структуры. Возможно, поэтому в игры под DOS до сих пор играют, а современные игры устаревают мгновенно, потому что в них интересная только графика.

Владимир-C:
Просматривая логи сайта, время от времени наблюдаю приход посетителей, у которых отсутствует и User_agent, и Referer.

Referer может быть пустым, если страница вызвана из закладок. Но отсутствие User_agent представляется странным. Разве бывают такие браузеры?

Может быть, посетителям без User_agent сразу давать капчу?

http://ubuntism.ru/2011/03/fake-user-agent-in-firefox-chrome/

набирать вопрос проще, чем погуглить?:)

Оптимизайка:
Как в C++ нельзя

А как Вы считаете, если сделать такую возможность каким-нибудь вспомогательным классом, было бы это полезно?

Всего: 555