2009-09-18 2 views
2

Это не тот мета-вопрос. Я использую SO только как пример.Как обновить несколько сведений в разных местах (таблице) об изменении записи?

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

E.g. Если г-н А. голосовал г-н Б. Ответ. Таким образом, мы должны проверить, отвечает ли этот ответ в ответе 100 раз, поэтому дайте мистеру Б-б знак, если бы г-н А поддержал 100-й раз, так что дайте ему значок.

Это означает, что для каждого действия необходимо запустить не менее 100 запросов/IfElse.

Теперь мой пример реальной жизни - это приложение, в котором я получаю онлайн-данные от машины посещаемости. Когда пользователь показывает свою карточку на машину. Я получаю это и сохраняю его как запись. Теперь, основываясь на этой записи, у меня есть несколько расчетов. Он опаздывает. Он опаздывает на 3 дня. Является ли он в правой смене (Дневная смена/Ночной сдвиг). Сегодня праздник. Является ли это сверхурочным. Он рано ....... и т. Д. И т. Д. И т. Д.

Какова наилучшая стратегия для такого рода требований.

Обновление: Может ли команда помочь нам в этом?

+0

@ Eric, @rexem: Спасибо за уборку. –

ответ

3

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

Например, посмотрите, как MSDN использует очереди для обработки похожих проблем с содержимым MSDN: Building the MSDN Aggregation System.

+0

Очереди позволяют использовать аккуратные и гибкие архитектуры. Похоже, что OP должен действительно транслировать события и проводить ряд процессов для определенных условий. (например, LatenessEngine, overtimeEngine и т. д.). Большая проблема в таких системах заключается в том, как справляться с не-событиями, например. парень не подходит для работы, когда должен был предположить. Либо вы вернетесь к большим запланированным запросам sql, либо у вас есть процесс пожара событий psuedo. –

+0

Публикация-подписка - это эквивалент обмена сообщениями и легко реализуется поверх обычных сообщений. Толчок событий противПритяжение для изменений обычно имеет точку опроса: при низкой пропускной способности более эффективна толкание, при высокой пропускной способности лучше всего тянуть. –

+0

На самом деле не-события довольно просты, вы размещаете таймеры в системе. Система, подобная той, которую я цитировал в ссылке MSDN, будет использовать таймеры бесед, которые отлично подходят. Они масштабируются, они постоянны, и они являются переходными: http://msdn.microsoft.com/en-us/library/ms187804.aspx. –

0

Не могли бы вы просто использовать «флаги» (другие таблицы, другие столбцы, что угодно), чтобы указать, когда происходят эти особые случаи? Таким образом, вам нужно будет только один поиск (в каждом конкретном случае), чем тонну поисков и/или объединений. Вы можете записать изменения (третий день и т. Д.) Вставить.

0

Кроме того, что нужно проверить, зависит от порога.

например. Является ли человек отсутствующим за последние 3 дня? Эта проверка требуется только тогда, когда человек отсутствует в течение 2 дней.

Я имею в виду - вам не нужно проверять все, каждый раз.
Кроме того, сколько информации необходимо обновить сразу? SO не обновляет вещи в реальном времени.

0

Может быть, вы должны использовать две базы данных с онлайн-репликацией между ними - одну для получения данных в реальном времени и ничего больше, во-вторых, вы можете использовать жесткие вычисления (например, рассчитать все латинги каждые 10 минут или по запросу). Найдите эти базы данных на разных серверах.

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

  • Нет связанных вопросов^_^