Отправка уведомлений в соответствии с изменениями значений базы данных - PullRequest
1 голос
/ 27 марта 2012

Я работаю на портале поставщиков.Владелец магазина войдет в систему и в панели навигации (аналог Facebook) я бы хотел, чтобы количество проданных товаров отображалось МГНОВЕННО, БЕЗ КАКОГО-ЛИБО ОБНОВЛЕНИЯ.В фейсбуке сразу появляются новые уведомления.Я использую SQL Azure в качестве базы данных.Можно ли отметить изменение в базе данных и мгновенно проинформировать пользователя?

Часть 2 моего проекта будет состоять из приложения для мобильного телефона для поставщика.В этом приложении я тоже хотел бы иметь такой же механизм уведомлений.В этом случае я был бы прав, если бы я искал push-уведомления и применял их?

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

1 Ответ

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

Сначала вам нужно определить, что для вас значит МГНОВЕННЫЙ.Для некоторых это означает, что в течение секунды 90% времени.Для других они были бы счастливы иметь 10-20 секундный разрыв в среднем.И что еще более важно, вы должны понимать последствия ваших требований;Другими словами, стоит ли иметь почти нулевое время ожидания для вашего бизнеса?Чем более смягчены ваши требования, тем дешевле будет их построить и тем проще будет их обслуживать.

Вы должны знать, что получение уведомлений в режиме реального времени может быть очень дорогим с точки зрения вычислительных и блокирующих ресурсов.Чем больше вы обновляете, тем больше требуется веб-циклических обходов (даже если в этом случае они минимальны).Обновление данных до второго также может быть дорогостоящим для базы данных, потому что вы потенциально создаете большой объем запросов, что, в свою очередь, может повлиять на другие хорошо выполняемые запросы.Например, если ваш веб-сайт работает с 1000 вошедшими в систему пользователями, вам может потребоваться 1000 запросов к базе данных в секунду (при условии, что это ваше определение INSTANT), что, в свою очередь, может создать условие регулирования в SQL Azure, если оно не разработано должным образом.

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

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

Надеюсь, это поможет.

...