2011-01-22 3 views
1

У меня есть параллельный скрипт bash с несколькими потоками. Каждый поток проверяет, существует ли запись, а затем обновляет значение, иначе вставляет новую строку. Должен ли я заботиться о параллельности потоков? Должен ли я блокировать таблицы разблокировки или mysql заботится об этом?Как обновить таблицу MySQL (MyISAM) параллельно?

мое обновление переходит в командной строке:

#get.sh script... 
# set status Downloading 
mysql -uroot -pmypass -ss -e "use filestatus; call changeStatus(\"$1/$2\", 1)" 
rsync -ar rsync://[email protected]server/$2/ $1/$2/ 
if [ $? -eq 0 ]; 
then 
# set status OK 
mysql -uroot -pmypass -ss -e "use filestatus; call changeStatus(\"$1/$2\", 0)" 
else 
# set status ERROR 
mysql -uroot -pmypass -ss -e "use filestatus; call changeStatus(\"$1/$2\", 2)" 
fi 

Я называю несколько get.sh с различными параметрами.


Thank you pre
Arman.

ответ

2

Вы можете реализовать блокировку, но это превзойдет цель создания нескольких потоков. MyISAM поддерживает только блокировку на уровне таблицы, поэтому только один поток сможет изменять таблицу за раз.

Если вы можете, поместите уникальный индекс или первичный ключ в поле (и). Сделайте INSERT ... ON DUPLICATE KEY UPDATE ... MySql затем убедится, что действие является атомарным.

Что я обычно делаю с многопоточным/обрабатывающим процессом, имеет первый поток/процесс, который получает «список» всех заданий, которые необходимо выполнить, а затем создавать поток/вилку для обработки каждого задания или партии рабочие места. Родительский поток/процесс гарантирует, что дети не пытаются сделать то же самое. Я не уверен, что это будет работать в вашем случае.

+0

Благодарю вас, я могу написать/обновить уникальную запись в поток, например: thread 1 управляет только файлами, начинающимися с 1 ???, thread 2 files 2 ???, только то, что я задавал себе вопрос, - это если каждый поток пишет то же самое Стол это не опасно? – Arman

+0

Нет, база данных обрабатывает любые проблемы. Это то, что делают базы данных. Любая вставка, обновление или удаление автоматически выполняет любую необходимую блокировку. –

Смежные вопросы