Как эффективно обновить базу данных с помощью внешних источников данных? - PullRequest
0 голосов
/ 09 февраля 2009

Я пытаюсь заполнить таблицу пользовательской информацией в базе данных MS SQL информацией из нескольких источников данных (т. Е. LDAP и некоторых других баз данных MS SQL). Процесс должен выполняться как ежедневная запланированная задача, чтобы обеспечить частое обновление таблицы с информацией о пользователях.

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

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

Ответы [ 4 ]

2 голосов
/ 09 февраля 2009

Хорошей практикой является использование Служб преобразования данных (DTS) или служб SSIS, поскольку стало известно, что они выполняют повторяющиеся задачи БД. Хотя это не решит вашу проблему, оно может дать некоторые указания на то, что происходит, так как вы можете регистрировать каждый этап процесса, заключать его в транзакции и т. Д. Он особенно хорошо подходит для массовой загрузки и обновлений и понимает VBScript поэтому не должно быть никаких проблем.

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

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

Как сказал MrTelly, используйте SSIS или DTS. Затем запланируйте запуск пакета. Простое преобразование в один это, вероятно, решит проблему скорости, поскольку у них есть задачи, оптимизированные для массовой вставки. Я бы никогда не сделал это на языке сценариев, а не на t-SQl. Вероятно, ваш сценарий работает строка за строкой, а не на наборах данных, но это только предположение.

0 голосов
/ 09 февраля 2009

Я не могу сказать вам, как решить вашу конкретную проблему, но всякий раз, когда вы сталкиваетесь с этой ситуацией, вы хотите выяснить, почему это происходит медленно, прежде чем пытаться ее решить. Где замедление? Некоторые важные вещи, которые следует учитывать и исследовать, включают:

  • получение данных
  • взаимодействует с сетью
  • запрос к базе данных
  • обновление индексов в базе данных

Получите информацию о времени и профилировании, чтобы выяснить, на чем сосредоточить свои усилия.

0 голосов
/ 09 февраля 2009

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

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

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