Оптимизация алгоритма загрузки данных, посоветуйте в какую сторону смотреть
Хочу оптимизировать алгоритм загрузки данных. Имеем следующее: эксель в котором содержится информация по заявкам. Данные выгружаются с начала года по текущую дату. Одна заявка, одна строка. В заявке указывается несколько ключевых значений: контрагент, филиал на котором в данный момент заявка, ун. идентификатор, статус и др. информацию. При этом тот же статус или филиал может меняться со временем.
В системе (1с) по каждой заявке создается отдельный документ. Текущая версия загрузки считывает эксель в виртуальную таблицу и затем построчно её обрабатывает, проверяя каждую заявку из файла. Если заявка была создана ранее, проверяется изменение данных. При этом присутствуют"классические" для 1с решения типа запросов в цикле(для каждой заявки выполняется три четыре запроса). Сейчас загрузка занимает часа три где-то для 10 тыс. заявок. Предполагаю что к концу года время вырастет ещё больше.
Пока вижу такой вариант - получение ссылок на справочники(контрагенты, филиалы) через промежуточные виртуальные таблицы. Должно ускорить ситуации, когда на одном контрагенте несколько заявок.
Как дополнительный вариант - создание отдельной базы, в которой будет хранится информация из предыдущей загрузки. В теории позволить сопоставлять текущий и предыдущий набор данных, и в основную базу толкать только новые и те по которым произошли изменения.
Кто что может посоветовать по поводу всего перечисленного?
Ответы (1 шт):
Учитывая советы из комментариев, удалось ускорить выполнение ориентировочно в три раза(с трех часов до одного). Сделал следующее:
- Сделал промежуточное хранилище исходных данных(регистр), загружаемых из файла. В него добавлен флаг изменения. При загрузке файла, флаг сбрасывается в двух случаях - это новая запись либо что то изменилось относительно предыдущей.
- Заявки создаются либо изменяются только по тем записям, у которых сброшен флаг в промежуточном хранилище.
- В запросе данные группируются по филиалу и контрагенту. Это также ускорило обработку(ранее если шло подряд три заявки от одного контрагента, запрос на получение ссылки на справочник вызывался три раза, сейчас один раз для группы).
Вариант с хешем пробовал, но особого выигрыша по времени не получил. Также в дальнейшем в планах отказаться от экселя и перейти на xml, это также позволит выиграть время.