Создание процесса импорта, который проверяет наличие дубликатов - PullRequest
0 голосов
/ 01 декабря 2010

Используя ASP.NET, я создаю инструмент администратора, которому требуется функция для импорта списка адресов электронной почты.После загрузки файла я хочу проверить существующие записи для любого из предоставленных адресов электронной почты.Для несуществующих адресов электронной почты я бы создал их, используя мой DAO.

В основном я хочу:

  1. Получить список писем
  2. Получить данные для существующих писем
  3. Создать данные для новых писем в db
  4. Возврат полных данных для всех писем в списке.

Поскольку я хочу знать, какое из писем существует заранее, моей первой мыслью было запросить в таблице все записи WHERE Email IN ('Email001FromFile', 'Email002FromFile', 'etc...'), носписок может содержать тысячи адресов электронной почты, и я не уверен, что было бы неплохо указывать такое количество адресов электронной почты оператору IN.

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

Моя следующая мысль заключалась в создании временной таблицы для хранения списка и изменении предложения IN для использования временной таблицы, а не в виде явного спискаэлементы, но это потребует, чтобы я выполнял SQL или хранимую процедуру напрямую, что я не склонен делать, так как я использую NHibernate для доступа к своей БД.

ThХотя я использую ASP.NET (C #) и NHibernate, и любые ответы, специфичные для этого, были бы полезны, я просто ищу общие идеи о том, как справиться с этим сценарием.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

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

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

0 голосов
/ 01 декабря 2010

Делаете ли вы что-нибудь с электронными письмами, которые являются дубликатами?

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

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