2016-04-16 2 views
0

На некоторых сайтах электронной коммерции у предмета осталось только одно количество. Если товар приобретается, то мастер (используется для записи) db будет обновляться с количеством 0. Поскольку некоторое время задержки связано с синхронизацией master-slave, существует вероятность того, что ведомый (используемый для чтения) db не обновляется, когда 2-й клиент запрашивает информацию о том же продукте. Он/она может все еще видеть устаревшие данные, то есть одно доступное количество. Пара вопросов:Базы данных Master и Slave

1) Это хорошая идея, чтобы все запросы, связанные с клиентами, попали в базу данных master (для получения обновленных результатов)?

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

ответ

0

Начнем с простого случая: только одна основная база данных.

Мы оба ищем продукт, мы оба видим последний товар. Вы покупаете его. Я думаю об этом на 10 секунд больше, чем вы, а затем нажмите «купить». Слишком поздно! Поэтому я получаю сообщение об ошибке «Ой, этот товар больше не находится на складе».

В режиме master/slave это точно такой же опыт, просто окно для него немного больше. Так что, действительно, вы ничего не можете сделать, чтобы предотвратить проблему. Тогда вы не хотите, чтобы все клиенты выполняли запросы на чтение. То, что вы хотите, это делать записи через master, и если запись не удалась из-за устаревшего состояния (oops, can not buy), то извинитесь перед клиентом.

В пользовательском интерфейсе для отображения элементов вы можете предупредить пользователей, что осталось только 1 элемент, и это заставит их ожидать эту ошибку и быть менее расстроенным, когда это произойдет.

+0

Я читал это где-то - еще один способ решить эту проблему - разделить показания на критические и некритические чтения. Все чтения, относящиеся к строке, которая была обновлена ​​за последние x минут, должны попадать в основную базу данных, в противном случае ведомая база данных будет достаточно хороша. Однако, когда приходит какой-либо запрос - как мы можем определить, является ли это критическим чтением или нет? –

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