Клиент заходит на сервер и спрашивает "Что нового?" - проблемы с метками времени

Я ищу решение для сценария пограничного случая, когда клиент постоянно спрашивает сервер о том, что нового не получится из-за временных меток.

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

Предположим, мы используем временные метки. Каждое обновление строки добавляет временную метку времени сервера. Клиенты постоянно спрашивают, что нового, начиная с отметки времени последнего полученного товара. Просто? Да, но...

Сценарий сбоя:

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

2:50 Client C checks for updates.
2:59 Client A starts update on a row. (Sets lastModified to 2:59)
2:59 Client B starts update on a row. (Sets lastModified to 2:59)
3:00 Client A Row update becomes visible on DB. (lastModified still at 2:59)
3:00 Client C checks for updates >2:50. Get’s A’s update.  Good.
3:01 Client B Row update becomes visible on DB. (lastModified still at 2:59)
3:10 Client C checks for updates >2:59. Gets nothing. Misses B's update. Bad.

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

Мы могли бы установить проверку на обновление, чтобы произвольно запрашивать раннее время, вызывая перекрытие. Это неэффективно из-за возможного получения дублирующихся данных, но не фатально. Тем не менее, возможно ли узнать, какое перекрытие необходимо для всех случаев? Может ли защищенная база данных редко задерживать отображение обновления на несколько секунд? Минуты?

То, что клиенты постоянно спрашивают "что нового", кажется распространенным случаем, и я нахожу удивительным, что не нашел лучшего опыта в этом вопросе.

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

0 ответов

Другие вопросы по тегам