Загружать большие объемы данных на производственный сервер sql с минимальным конфликтом - PullRequest
0 голосов
/ 10 апреля 2009

У меня есть веб-сайт, который помогает управлять большим количеством информации для медицинских клиник. Часть приложения должна загружать файлы пациентов из таблицы Excel. В таблице пациентов содержится около 1 миллиона записей, и для импорта в Excel необходимо одновременно вставлять или обновлять записи по 10, 20, 30 тысяч. Все это время другие клиенты стучат по столу. Время обработки менее важно, чем уменьшение конкуренции за базу данных. Какие стратегии вы бы порекомендовали?

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

Ответы [ 2 ]

4 голосов
/ 10 апреля 2009

Сначала загрузите лист Excel в промежуточную таблицу, а затем решите, обновлять или вставлять строки в один пакет или что.

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

Если ваше упорство очень сложно, есть несколько способов сделать это. Вы можете вставить в один пакет, но пометить производственные записи как неполные, так как их подчиненные записи обновляются. Вы можете пометить промежуточные строки как необработанные и обработанные партиями.

0 голосов
/ 10 апреля 2009

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

Затем вы можете поместить задержку в цикл, чтобы замедлить ее, чтобы избежать воздействия на основной сайт (для регулировки этого можно использовать какой-либо показатель нагрузки). Какой-то вид токен-кольца, такой как setup, можно использовать для одновременного обновления нескольких дросселей.

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