2009-04-12 3 views
0

Мы создаем приложение, которое требует ежедневной вставки приблизительно 1,5 миллиона строк данных на таблицу. У нас есть 16 таблиц. Мы отслеживаем 3-дневные исторические данные, включая данные текущего дня.Запрос данных во время выполнения его вставки: можем ли мы использовать кеширование?

Приложение выполнено с использованием C#; на стороне сервера мы запускаем exe, который заполняет таблицы данных в течение рыночных часов (4,5 часа), и мы обновляем 16 таблиц каждые 5 секунд.

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

У нас возникает серьезная проблема с производительностью, так как один запрос может занять 1 секунду или больше, что слишком много. Вопрос в том, что для сегодняшних данных, которые вставляются во время выполнения, можно ли использовать кеширование вместо перехода в базу данных каждый раз, когда мы хотим что-то из сегодняшних данных? Будет ли это более эффективным? И если да, то как мы можем это сделать? P.S один день данных составляет приблизительно 300 МБ, и у нас достаточно ОЗУ

ответ

0

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

Если все запросы выполняются в размере операции до 1 секунды, возможно, проблема, которую вы видите, заключается в том, что пользовательский интерфейс замерзает. Если это так, не делайте этого в потоке пользовательского интерфейса.

Upate (на основе комментариев): код, который вы запускаете в обработчиках событий элементов управления, работает в потоке пользовательского интерфейса, что и заставляет замораживать пользовательский интерфейс. Существует не один способ запустить его в отдельном потоке, я предлагаю BackGroundWorker для этого сценария. Посмотрите пример сообщества в конце.

+0

спасибо за ответ. Время запроса составляет 0 секунд после некоторой оптимизации. Тем не менее, мы запрашиваем VPN-соединение 512 и пользовательский интерфейс замерзает. Я не понял, что вы действительно предлагали решить! Не могли бы вы подробнее рассказать? – mustafabar

+0

@mustafabar добавил обновление об этом. – eglasius

Смежные вопросы