Добрый день! PHP-скрипты моего сайта изменяют некоторые таблицы. Клиенты, предполагаю, могут подавать запросы асинхронно. Тогда возможна ситуация, когда несколько копий скрипта выполняются одновременно, одновременно работают с БД, одновременно изменяют данные. 1. Как происходит синхронизация в этом случае? 2. Предполагаю, что никак, поэтому второй вопрос, как синхронизировать работу с БД, какие функции для этого есть? Очень бы хотелось организовать синхронизацию без обращения к функциям операционной системы. Спасибо!
tsapelman есть такая могучая штука как insert ... on duplicate update на всякий случай. по делу: tsapelman несколько копий скрипта выполняются одновременно, одновременно работают с БД, одновременно изменяют данные все сайты работаю так =) что вас конкретно пугает? tsapelman как синхронизировать работу с БД с кем синхронизировать? кому синхронизировать? самое главное: зачем синхронизировать?
Спасибо! Прочитал про блокировки. Этого должно быть достаточно. Я новичок в веб-программировании, поэтому блокировки таблиц счастливо миновали меня! Спасибо! Но в моем случае не спасёт, нужна именно блокировка таблицы. Я и не говорю, что мой уникальный. Просто есть тип сайтов, которые не обновляются пользователями. У меня на сайте долгое время было так. А в этом случае синхронизация не нужна. Это просто термин такой в программировании. Пусть есть множество процессов/потоков, которые работают с общими данными. Для корректного доступа к данным используют объекты синхронизации. Говорят о синхронизации потоков. Всем спасибо за реальную помощь!
tsapelman ты чето с ума сходишь. чтобы писать в бд/читать из бд не надо никакой синхронизацией морочиться, если только несколько людей ни работаю ОДНОВРЕМЕННО с ОДНОЙ И ТОЙ ЖЕ инфой. обрисуй задачу.
igordata 1-й запрос GET. Начал выполняться скрипт. 2-й запрос GET. Начал выполняться тот же скрипт в параллельном потоке. 1-й вычитал данные, занялся обработкой. 2-й вычитал те же самые данные, занялся обработкой. 1-й сохранил обработанные данные. 2-й сохранил обработанные данные, уже изменённые 1-м, затерев работу 1-го. Примерно так. Фактически несколько клиентов работают с одной и той же инфой.
очередь задач + крон = весьма неплохое решение. =) не? скрипты пишут что надо сделать. Раз в секунду или когда там просыпается ОДИН экземпляр скрипта. Проверить что он один не сложно. Делает свои дела, синхронизация 100%. Все счастливы. tsapelman затерев работу 1-го я понимаю, если бы ты сказал что данные первого устарели, или наоборот затерли результат второго, отработавшего по более новым данным. Но вот как может родиться описанная тобою ситуация - я не понимаю.
Нужно кроссплатформенное решение. Кстати, крон доступен из php? Для проверки единственности скрипта уже нужен синхрообъект, но если через крон, то единственность должна бы гарантироваться, да. Когда этот один скрипт пойдёт шерстить базу, будут по-прежнему приходить запросы GET, данные нужны будут для генерации страниц. Хотя здесь СУБД должна бы разобраться. Не, второй должен был взять в качестве исходных данных то, что насчитал первый. И считать уже от этих данных. В целом, я говорю, что в вебпрограммировании новичок, поэтому возможно делаю не то. Но в данном случае, меня бы устроили явные блокировки таблицы.
tsapelman через крон ничего не гарантируется. но есть способы простые как палка - открыть файл на запись например. tsapelman Не, второй должен был взять в качестве исходных данных то, что насчитал первый. И считать уже от этих данных. ну все, тогда крон и централизованная обработка. Можно не крон, можно демона. Один хер - язычество.