Автоматическое обновление данных в приложении .NET с использованием СУБД Firebird - PullRequest
3 голосов
/ 15 января 2009

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

  1. Клиентское приложение выполняет запрос по таймеру, например, каждые 10 секунд и возвращает все строки с MODIFIED_DATE, превышающим дату последнего изменения, сохраненную в моем приложении.

  2. Сохраняйте выделенное, открытое соединение на каждом клиентском компьютере, который прослушивает события Firebird, а затем запускает запрос после запуска события. Это событие, очевидно, будет запущено базой данных после каждого обновления / вставки с помощью команды POST_EVENT.

  3. Разработка службы, которая будет сидеть на сервере, прослушивая события базы данных Firebird, а затем использовать удаленное взаимодействие .NET для уведомления клиентских приложений.

Может кто-нибудь посоветовать мне, какое из перечисленных решений лучше с точки зрения производительности и масштабируемости?

Я хочу, чтобы решение оказывало минимальное влияние на рабочую нагрузку базы данных.

Ответы [ 3 ]

2 голосов
/ 15 января 2009

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

Предостережение: UDF должен быть родным dll (я полагаю) C ++ или Delphi, скорее всего, в Delphi будет довольно много примеров кода.

1 голос
/ 15 января 2009
  1. Это решение является худшим с точки зрения масштабируемости. В большинстве случаев клиенты будут запрашивать изменения и ничего не получать взамен. Большие отходы. Не говоря уже о 10-секундной задержке появления изменений в клиентах.
  2. Я делал это в прошлом и у меня были проблемы с масштабируемостью. Дело в том, что когда происходит событие, каждый клиент будет одновременно запрашивать сервер. Не очень хорошо. Возможно, вы захотите создать какую-то схему, чтобы предотвратить это.
  3. В основном то же, что и 2, только с гораздо большим количеством работы. ;)
0 голосов
/ 25 июня 2010

Небольшое изменение, чтобы ответить 2:

  1. Вы можете создать UDF на любом языке, который может создать общую библиотеку (за исключением Java)
  2. Если вы используете Netware, вы не можете вызвать UDF из Firebird
...