Механизм подключения / обновления базы данных для непрерывных данных - PullRequest
0 голосов
/ 17 сентября 2010

Я работаю в системе, в которой имеется огромное (2000-5000 записей в минуту) количество входящих событий, которые должны быть записаны в базе данных (SQL Server 2000).Мы используем соединение ODBC для соединения с базой данных.

В настоящее время мы открываем одно соединение во время запуска приложения и передаем данные, используя соединение, так как мы не сможем получить новое соединение при каждом добавлении записи.из-за огромного количества загружаемых данных. Проблема, с которой мы сталкиваемся, заключается в следующем: когда происходит сбой сети или соединение прерывисто, данные не помещаются в базу данных (конечно, мы получаем CDBExceptionесли есть проблема с сетью).Но будет слишком поздно для восстановления соединения, потому что продолжает поступать больше событий. Также невозможно проверять правильность соединения каждый раз, когда мы вставляем запись, потому что это трудоемкое задание.

Я подумал о способе преодоления этой проблемы.

Используйте кэш / буфер для хранения входящих сигналов тревоги / событий и помещайте их в базу данных один раз в 'n' секунд и / или когда буфер достигаетопределенного размера.

Поможет ли это решение?Есть ли альтернативный подход к решению проблемы?

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Я бы попросил клиента записать в файл дату и время в названии. После записи N записей прекратите запись в этот файл (начните запись в новый файл) и попросите BULK INSERT (Transact-SQL) вставить этот «завершенный» файл. Вы можете добавить процедуру очистки для удаления файлов, которые были обработаны в базе данных.

1 голос
/ 17 сентября 2010

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

Вы должны взглянуть на MSMQ , который может быть тем, что вы ищете.

...