2010-02-07 6 views
2

Я запускаю сервер mySql, который обновляется каждые 4 часа. В то время как данные могут быть получены.параллельные запросы базы данных mySql

Does mySql обрабатывает этот сценарий, когда БД обновляется и получен запрос от пользователя?

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

Благодаря

ответ

0

Если вы беспокоитесь о том, как параллельные записи обрабатываются, это одна вещь, но вы можете спокойно прочитать из базы данных MySQL, который обновляется другим потоком, не беспокоясь о поврежденных данных.

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

+0

только 1 написание резьбы доступно, что происходит каждые 4 часа. Пишущий поток извлекает все записи из БД. для каждой записи: она выполняет некоторую задачу и обновляет запись с новыми полученными данными. , так что есть возможность, когда запись i обновляется, а пользователь, которому принадлежит запись, пытается получить данные от нее. , поэтому я буду больше читать о транзакции. Можно ли разделить работу между отдельными потоками в PHP? Я имею в виду, что задача для каждой записи занимает 10 секунд, а для выступлений я хочу разделить работу. – embedded

+0

«так что есть возможность, когда запись i обновляется, а пользователь, которому принадлежит запись, пытается получить данные от нее». - это не должно создавать никаких проблем. Предполагая, что вы используете транзакцию для записи данных, пользователь либо увидит представление базы данных до обновления, либо после нее, в зависимости от порядка, в котором были получены запросы. Если чтение начинается с последующей записи, вы не можете сказать, что база данных должна оставаться на считывании до тех пор, пока запись не будет выполнена, но вам не нужно, потому что пользователь получает действительный вид данных. – danben

+0

Re: PHP-потоки, таких вещей нет. Вам нужно будет развернуть несколько процессов. См. Http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html для примера. – danben

0

Вы можете использовать транзакции и/или блокировку, чтобы каждый пользователь видел согласованный вид (т. Е. Полностью обновлялся или вообще не обновлялся). Сам механизм базы данных очень хорошо подходит для сценария. Если вас не беспокоит то, что читатели видят в то время, когда обновляются обновления, вам не нужно ничего делать.

0

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

Это соответствует моим требованиям.

Спасибо всем

+0

Если какие-либо опубликованные ответы на эту тему помогли вам прийти к вашему заключению, в целом вежливы, чтобы продвигать и/или принимать их. Это также помогает другим читателям найти полезную информацию. – danben

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