Можно ли использовать время базы данных SQL Server для синхронизации нескольких клиентов? - PullRequest
0 голосов
/ 20 июля 2011

Это альтернативный подход к решению этой проблемы , а не дубликат.

Я хочу, чтобы моя роль Azure обрабатывала данные в случае внезапных сбоев . Я рассматриваю следующий вариант.

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

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

Но все узлы взаимодействуют с одной и той же базой данных. Что, если я использую время этой базы данных - с такими функциями, как GETUTCDATE() в запросах SQL, я буду делать то же самое, что и планировал, но мне, кажется, все равно, синхронизировано ли время узлов - они все будут использовать время базы данных.

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

1 Ответ

1 голос
/ 20 июля 2011

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

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

Кроме того, этот подход, несомненно, доставит вам неприятности, если вам когда-нибудь придется масштабировать базу данных.

Я думаю, что все еще предпочитаю подход, основанный на очереди.

...