powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Дубли строк
4 сообщений из 4, страница 1 из 1
Дубли строк
    #39806275
ybuivovk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здравствуйте,
работаю в компании по обслуживанию колл-центров. столкнулся с такой проблемой:
У меня есть БД c:
1. таблицы: [DialerDetail], [Main]
2. процедура InsertScriptCall(вызывается при сохранении результата со скрипта(сайта)) и InsertDialerCall(вызывается при сохранении результатов звонков с дайлера)

Процедура "InsertScriptCall" - сохраняет результат в таблицу [Main]
Процедура "InsertDialerCall" - вытягивает данные с таблицы [DialerDetail], сводит данные и переносит в таблицу [Main].

В этих процедурах идет проверка на уникальность записей в таблице [Main] допустим по ключам RCD и RCKD. Если есть такие ключи, то происходит Update записи, если не находи, то происходит Insert

Сложившееся проблема:
Эти две процедуры могут вызваться одновременно и в итоге могут создаться дублирующие строчки с одинаковым RCD и RCKD.
Я это заметил, когда увидел дубли и у них Дата создания отличается в пару долисекунд.

Создание уникального индекса RCD и RCKD не вариант, так как есть ситуация, где надо создать еще одну строчку с теми же RCD и RCKD.

Какие варианты мы рассматривали:
1. Прописать:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION

COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

В итоге получили много deadlock

2. пробовали еще вместо Update и Insert написать Merge, но появляется много зависших сессий.
3. думали создать еще одну таблицу для сохранения результатов процедуры "InsertScriptCall", например [ScriptResult]. и потом делать Job, которая по очереди перетягивает данные с таблицы [ScriptResult] и [DialerDetail] все в таблицу [Main] и тогда не будет дублей по одновременной вставке.

Буду рад, если поможете с советом
...
Рейтинг: 0 / 0
Дубли строк
    #39806285
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ybuivovkесть ситуация, где надо создать еще одну строчку с теми же RCD и RCKD.

Ну и забей. За всё надо платить, в том числе и за денормализацию. Если на твоей СУБД
хранимые агрегаты толком не работают - никак их не заставишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Дубли строк
    #39806327
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ybuivovkКакие варианты мы рассматривали:
1. Прописать:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION

COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Это слишком мощная штука, т.к. действует на все ресурсы транзакции.
Если Вам нужно выстроить очередь для конкретно вставки звонков - организуйте именно для этого участка подобие семафора (это может быть, например, служебная запись в служебной таблице, обновляемая перед проверкой, или СУБД-специфичные средства).
...
Рейтинг: 0 / 0
Дубли строк
    #39806491
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ybuivovk,
Я бы думал над SERIALIZABLE.
Возможно, сделал бы дополнительные маленькие и быстрые процедуры для записи без всяких дополнительных действий с высоким уровнем изоляции.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Дубли строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]