Веб-служба или служба Windows или интеграция SQL CLR? - PullRequest
4 голосов
/ 22 февраля 2010

Добрый день всем,

Я немного перегружен головой и сталкиваюсь с некоторыми жесткими сроками, так что, надеюсь, кто-нибудь может дать совет.

Моей отправной точкой будет таблица в базе данных SQL Server, два поля которой представляют собой координаты x, y, полученные из единицы измерения gps. Я буду отвечать за геокодирование (получение физического адреса улицы) этих мест и запись результатов в таблицу успеха или ошибку в таблицу ошибок. Я завершаю библиотеку классов (C #), которая фактически выполняет процесс геокодирования, но я очень озадачен лучшим способом связать все вместе.

В идеале я хотел бы отправить набор данных / данные из SQL Server в какой-либо тип сервиса, где все записи будут геокодированы, а результат / сбой для каждой записи будет записан обратно в соответствующую таблицу. Поскольку база данных и dll будут находиться на одном и том же сервере, я не понимаю, зачем использовать веб-сервис. Итак, остальная часть моего исследования указывает либо на службу Windows, либо на интеграцию SQL CLR. Мои основные вопросы:

  1. Является ли один из этих методов более подходящим, чем другие?
  2. Является ли этот подход приемлемым (с точки зрения наилучшей практики)?

Любые советы, комментарии, предложения будут с благодарностью.

Кстати, если это уже не очевидно, я начинающий программист. Этот сайт стал неоценимым инструментом для моего роста как программиста, и я очень ценю людей, которые уделяют время чтению постов и дают советы экспертов.

1 Ответ

3 голосов
/ 23 февраля 2010

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

Лучший подход - использовать стратегию ETL. Координаты сбрасываются в промежуточную таблицу, вы запускаете процесс ETL и преобразуете все координаты в геокоды и записываете результаты в таблицы успеха и ошибок. Подход ETL обычно учитывает пакетирование, прерывание и возобновление и так далее. ETL может быть заданием SQL, запускающим приложение, пакетом служб SSIS, есть много способов сделать это, важный бит - это разделение работы на промежуточные таблицы и предоставление семантики приостановки / возобновления. Код dll, который у вас есть сейчас (который я предполагаю, является прокси-кодом клиента веб-службы геокодирования), вероятно, составляет 0,001% от вашего проекта.

То, должен ли процесс быть представлен как веб-сервис, полностью ортогонально процессу ETL и должно управляться вашим клиентом, связывающим требования и технологии. Другими словами, если клиентский код предпочитает выгружать координаты с помощью WS, сделайте это, если вы учитываете большие наборы данных и пока вы предоставляете несвязанную, асинхронную и помещенную в очередь семантику для результатов.

...