2016-04-18 5 views
4

Вот очень простой вопрос о репликации.Репликация master-slave гарантирует, что записи появятся в последующих чтениях?

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

Например, предположим, что пользователь отправляет комментарий на ваш сайт (запись: INSERT INTO comment ...), а затем обновляет страницу (чтение: SELECT * FROM comment ...). Чтение переходит к подчиненному устройству, где оператор INSERT еще не реплицирован, поэтому список комментариев возвращается без нового. Это, по крайней мере, временно нарушит «прочность» части ACID.

Как это работает? Или есть какой-то способ обеспечить, чтобы пользователи всегда могли читать то, что они только что написали?

+0

Я не думаю, что у вас есть правильная идея для master-> slave-репликации. Ведомое устройство почти всегда будет синхронизироваться с подчиненным устройством, и когда INSERT будет отправлен в основную базу данных, ведомое устройство также будет содержать эти данные, когда в INSERT будет сделано. – ryekayo

+0

В какой СУБД вы говорите? Какую репликацию вы настраивали? –

ответ

2

Мастер-> Базы данных репликации подчиненных подчиняются работе, в которую записывается основная база данных, и ведомое устройство считывается. Когда INSERT помещается в основную базу данных, ведомое устройство будет содержать эту информацию при условии, что master-> slave настроен и синхронизирован. Так, например, если бы я писал:

INSERT into TEST_TABLE (col1, col2) values ("test", 123);

Если бы я пошел в базу работорговли и запрашиваются:

SELECT col1, col2 FROM TEST_TABLE;

Я буду видеть значения I, вставленные в основной базе данных. Я бы порекомендовал посмотреть документацию на вкус SQL, который вы используете для получения более подробной информации о master-> slave-репликации. Как упоминалось в комментариях, важно, какой вкус SQL вы используете, а также конфигурацию, которую вы должны включить для частоты репликации.

+1

Я собирался опубликовать аналогичный ответ, поэтому я просто буду комментировать здесь. Как уже упоминалось, это зависит от того, какую СУБД вы используете, и что более важно, как у вас настроена ваша репликация. Должна быть установка, указывающая частоту репликации, обычно это вопрос секунд. Таким образом, в зависимости от того, что у вас есть, это должно быть примерно как 5-10 секунд, если только вам это не нужно в зависимости от вашей среды и потребностей. TLDR: Это зависит от вас, насколько быстро ваши данные реплицируются. – gmiley

+0

Хорошая уловка на этом ... :) – ryekayo

+0

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