Как эффективно регистрировать от 100 до 1000 действий в базе данных - PullRequest
5 голосов
/ 08 января 2011

В настоящее время у меня есть сценарий, где 1000 действий могут произойти в течение нескольких секунд, и мне нужно сохранить все эти действия в базе данных.

Что я в данный момент делаю, так это поддерживаю таймер простоя, как только этот таймер достигает заданного времени, я выполняю кэшированные действия (действия с момента последнего коммита - просто список) и фиксирую эти действия в базе данных. 1003 *

Пользовательский интерфейс должен быть максимально отзывчивым (да?).

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

Ответы [ 2 ]

4 голосов
/ 08 января 2011

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

2 голосов
/ 08 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...