Дублирование при записи справочника в несколько потоков

1. eda76 3 19.05.25 13:14 Сейчас в теме
Подскажите
стоит задача создавать элементы справочника (где то по 100 000 записей)
для ускорения сделал загрузку в несколько потоков, все вроде хорошо по скорости, но в нем есть поле номер по порядку в группе и заполнение идет запросом получения последнего номера+1
в итоге в фоне идет дублирование
после загрузки делать обход и проставление номеров без разделения на фоновые вообще не дает убыстрения (((

подскажите что можно сделать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 81 19.05.25 13:17 Сейчас в теме
(1) хранить номер в константе, скажем, и создать к ней исключительную транзакционную блокировку либо присваивать заранее уникальные номера перед делением на порции.
4. starik-2005 3180 20.05.25 16:58 Сейчас в теме
(1)
заполнение идет запросом получения последнего номера+1
Ну а кто мешает вычислить номер до того, как элемент будет передан для записи? Т.е. номер должен быть вычислен во время деления данных заполнения на части.
5. eda76 3 20.05.25 21:32 Сейчас в теме
(4) проблема в том, что запускаться может на разных машинах и соответственно каждый получит одни и те же номера
15. spacecraft 21.05.25 13:28 Сейчас в теме
(1)
после загрузки делать обход и проставление номеров без разделения на фоновые вообще не дает убыстрения (((

Отдельным регламентом делать в несколько потоков в транзакции.
Первоначально создавать элементы справочника без заполнения порядкового номера.
Регламентом отбирать незаполненные реквизиты и присваивать.
3. dandykry 12 20.05.25 15:56 Сейчас в теме
и заполнение идет запросом получения последнего номера+1
- напрашивается блокировка, чтобы одномоментно разные потоки не могли получить эти данные
6. eda76 3 20.05.25 21:34 Сейчас в теме
(3)
вот тоже думаю, но как блокировать то, пока напрашивается регистр в который писать номер, его и блокировать, только курочить базу не дают, только допобработки
7. user2107184 20.05.25 21:44 Сейчас в теме
(6) Расширение... Ну или пиши в файл, что ли.
Ну или раздай номера сразу при передаче в фоновое.
8. nomad_irk 81 21.05.25 07:43 Сейчас в теме
(6) Вы (2) принципиально не читаете? :)
13. eda76 3 21.05.25 12:11 Сейчас в теме
(8) читаю, но уже писал, базу нельзя править (даже расширением)
формировать номера тоже нельзя, могут несколько разных запускать
14. Sashares 33 21.05.25 12:21 Сейчас в теме
(13) Ну, можешь перед запуском проверять - если есть запущенное фоновое задание от твоей обработки - говорить пользователю - подождите.
То есть не давать одновременно нескольким запускать генерацию.

И если такой вариант устроит - то заранее формируй список кодов и передавай их в фоновые.
10. dandykry 12 21.05.25 07:59 Сейчас в теме
(6) какой еще регистр? перед тем, как что-то читать, ты можешь исключительную блокировку наложить на то что читаешь? Можешь. Вперед.
9. user2107184 21.05.25 07:51 Сейчас в теме
Присваивать номер потом. Отдельным регламентом. На сервере. В один поток.
11. Sashares 33 21.05.25 09:19 Сейчас в теме
(9)
после загрузки делать обход и проставление номеров без разделения на фоновые вообще не дает убыстрения (((
12. user2107184 21.05.25 09:22 Сейчас в теме
(11) Ааа... За два дня упустил детали, не помню такого ((
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот