Производительность для чтения файлов и вставки содержимого в базу данных

#c# #wcf #performance

#c# #wcf #Производительность

Вопрос:

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

Существует сценарий, в котором клиентское программное обеспечение, установленное на тысячах компьютеров, отправляет информацию почти одновременно. Верно следующее:

  • Описанный выше сценарий не будет происходить часто, но может происходить раз в две недели.
  • Для каждой машины на сервере ретрансляции записывается 24 байта данных (4k на диске), которые мы хотим затем использовать для обновления базы данных. Поэтому, хотя это нормально, если база пользователей на данный момент составляет всего несколько тысяч, со временем они могут исчисляться миллионами.

Я думал о пакетной операции, которая одновременно обрабатывает только около 15 000-20 000 файлов и выполняется каждый раз, когда (можно изменить из app.config). Проблема в том, что если пользовательская база вырастет до нескольких миллионов, на выполнение этого потребуется несколько дней. Да, это не обязательно должна быть информация в режиме реального времени, но ждать несколько дней, пока все данные дойдут до базы данных, тоже не идеально.

Я думаю, что всегда будет узкое место, если блок ретрансляции забит, но есть ли лучшие способы повысить производительность и передать данные в разумные сроки (день, максимум два)?

С уважением, F.

Ответ №1:

Я думаю, вы могли бы подумать, что во избежание перегрузки диска файлы считывает только один поток, а затем передает обработку нескольким потокам для записи в базу данных и возвращается к потоку диска для удаления файлов после фиксации. Количество потоков БД может быть «изменяемым из app.config», чтобы найти наилучшее значение для конфигурации вашего оборудования.

Просто мои 2 цента, чтобы заставить вас задуматься.