Как обновить множественную информацию в разных местах (таблице) при изменении записи? - PullRequest
2 голосов
/ 18 сентября 2009

Это не так мета вопрос. Я использую только в качестве примера.

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

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 18 сентября 2009

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

Например, посмотрите, как MSDN использует очереди для решения аналогичных проблем с содержимым MSDN: Создание системы агрегации MSDN .

0 голосов
/ 18 сентября 2009

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

0 голосов
/ 18 сентября 2009

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

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

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

0 голосов
/ 18 сентября 2009

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

...