Как напрямую сканировать индексированную таблицу SQL - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть таблица SQL с индексами, содержащими приводит к вызову.Около 30 пользователей будут называть эти лиды.Чтобы быть уверенным в том, что нет двух пользователей, вызывающих один и тот же запрос, система должна быть мгновенной.

Итак, я хотел бы пойти по этому пути:

  • Установить таблицу с правильным индексом
  • Сканирование таблицы на предмет отведения, которое я могу вызвать (есть), следуя за индексом
  • Когда у меня есть звонок, укажите, что запись «используется»

Вот мои проблемы: - Я не могу найти способ установитьтаблица к индексу с помощью кода c # - Linq требует dataContext (не мгновенный), а ADO требует DataSet

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

Извините, если я могу показаться невежественным, я новичок в базах данных SQL.

Заранее большое спасибо!Матье

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

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

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

У нас было очень большое количество отведений, и наша программа распределения работала раз в минуту. Соглашение об уровне обслуживания было установлено таким образом, чтобы через 2 минуты мы узнали о нем.

Чтобы поддержать это, ваша таблица лидов должна иметь AssignedUserId и, вероятно, метку даты / времени, когда она была назначена. Напишите proc или какой-нибудь код на C #, который захватывает все записи из этой таблицы, которые не назначены. Выполните процедуру назначения, сохранив изменения обратно в таблицу. Эта процедура, вероятно, должна учитывать, сколько лидов они работают в настоящее время, и допустимое количество открытых лидов на человека, чтобы отдавать предпочтение при распределении по кругу.

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

1 голос
/ 08 ноября 2010

Я не понимаю, как ваше требование быть "мгновенным" связано с использованием индекса. Доступ к таблице по индексу также не является мгновенным.

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

Пример кода:

Begin Transaction
Lock Table
Search for Lead
Update Lead to indicate that it is in use
Commit Transaction (removes the lock)

Блокировка таблицы в SQL Server до конца транзакции может быть выполнена с помощью SELECT * FROM table WITH (HOLDLOCK, TABLOCKX) WHERE 1=0.

Отказ от ответственности: Да, я знаю, что возможны более чистые решения с меньшим количеством блокировок. Преимущество вышеупомянутого решения состоит в том, что оно простое (не нужно беспокоиться о правильном уровне изоляции транзакций и т. Д.) И обычно достаточно производительно (если вы не забываете, что «заблокированная часть» короткая, а одновременный доступ не слишком большой) .

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