Обеспечение согласованности базы данных - PullRequest
3 голосов
/ 21 марта 2012

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

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

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

Ответы [ 3 ]

3 голосов
/ 21 марта 2012

Раньше у нас был собственный скрипт, который отслеживал задержку репликации, но это было несколько лет назад. С тех пор мы перешли к монитору пульса, предоставленному Percona Toolkit .

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

1 голос
/ 21 марта 2012

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

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

0 голосов
/ 21 марта 2012

Как сказал Майк Пурселл : «Вы также можете рассмотреть возможность добавления продукта, который они выбрали, в свою сессию, поэтому, если цена изменится до их оформления, они не получат шок от наклейки».

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

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


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

Если обновления находятся на расстоянии секунды, я вижу, что это реальное решение.

...