Производительность при переносе большого количества данных из одной БД в другую БД с помощью приложения BL - PullRequest
0 голосов
/ 17 февраля 2012

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

Пользователи моего приложения подписываются на этот файл, чтобы они дали нам сигнал, что хотят «скопировать» этот файлфайл в свои базы данных.Я написал «copy», потому что я должен применить некоторую бизнес-логику к этим данным, прежде чем помещать их в базу данных.Эта бизнес-логика зависит от клиента.

Проблема состоит в том, что исходная база данных содержит что-то вроде измененных 100 000 строк каждые 15 минут (некоторые из них являются новыми записями, некоторые обновляются, а некоторые удаляются).Как бы вы решили эту проблему?Я попытался следовать нормальному процессу разработки:

  1. foreach customer
  2. получить новые данные -> применить бизнес-логику для этого пользователя -> поместить в его базу данных
  3. принять данные обновления -> применить BL -> обновить свою базу данных
  4. принять данные -> применить BL -> удалить из своей базы данных

Но это занимает слишком много времени.Далеко далеко от 15 минут.Иногда для одного пользователя требуется час.

Что бы вы сделали?

Спасибо, Марко

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

100 000 строк звучат не слишком много.

Это зависит от вашей бизнес-логики, но если это какое-то преобразование данных, вы можете рассмотреть возможность использования пакета служб SSIS (с точки зрения MS SQL Server, в других СУБД есть другие инструменты) для импорта ваших данных.

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

В любом случае, сделайте некоторое измерение производительности, вы действительно хотите знать, ПОЧЕМУ ваша обработка данных настолько медленная. Возможно, что-то в вашем коде может быть оптимизировано много.

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

0 голосов
/ 17 февраля 2012

Сложно сказать, не видя код, но вы можете попробовать профилировать ваш код с помощью чего-то вроде Ants Performance Profiler , чтобы попытаться определить, где происходит замедление. Если вы не хотите использовать это, я считаю, что Visual Studio 2010 содержит инструмент профилирования.

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

Если вы считаете, что это проблема со скоростью базы данных, возможно, вы захотите посмотреть, как вы выполняете вставки и влияют ли какие-либо индексы или триггеры на скорость вставки БД.

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