Параллельная обработка данных:
как ускорить выполнение длительных операций



Иногда приходится сталкиваться с ситуациями, когда оптимизация «в лоб» не помогает достичь желаемой скорости.

Как правило, в таких случаях надо менять сам подход к решению проблемы, посмотреть, можно ли избежать узкого места либо организовать параллельную обработку данных, либо изменить механику записи данных в БД.

В сегодняшних видео мы рассмотрим примеры решения подобных задач.

Например, с помощью многопоточной обработки можно добиться колоссального ускорения – в несколько раз (по сравнению с однопоточным вариантом).

Видео 01:

Методика параллельной обработки данных в 1С:Предприятие 8

Методика параллельной обработки данных в 1С:Предприятие 8

В уроке показано, каким образом организовать алгоритм многопоточной обработки данных.
Для этого используются:

  • Принцип разделения данных на непересекающиеся порции
  • Формирование набора параметров каждого потока
  • Фоновые задания.

Видео 02:

Выбор наиболее быстрого сценария многопоточной обработки данных

Выбор наиболее быстрого сценария многопоточной обработки данных

В видео показан запуск обработки данных с разным количество потоков – от 1 до 10 параллельных потоков.
Также даются рекомендации по количеству потоков на «боевых» серверах.

Видео 03:

Ускорение массовой записи в базу данных - как минимум в 2 раза!

Ускорение массовой записи в базу данных – как минимум в 2 раза!

Периодически в реальных проектах возникают задачи по массовой обработке данных: перепроведение документов, заполнение новых реквизитов в справочниках, генерация записей регистров.

В видео показан простой способ ускорения этой операции как минимум в 2 раза с помощью явных транзакций.

Видео 04:

Ускорение массовой записи в регистры

Ускорение массовой записи в регистры

Обычно в регистрах содержится большое количество записей. На реальных объемах миллионы строк – это обычная ситуация. И если возникает задача модифицировать эти данные, речь может идти о многочасовой (или многосуточной) обработке. Аналогичная задача возникает при массовом переносе данных из другой системы.

В видео показан способ, как ускорить обработку данных регистров на 25-40%.

Смотрите еще:

Курс по технической настройке 1С и повышению стабильности.

Ускорение и оптимизация систем на 1С:Предприятие 8.3
Подготовка к 1С:Эксперт по технологическим вопросам

Поддержка – 3 месяца. Объем курса – 35 учебных часов.

Не откладывайте свое обучение!

30 комментариев к “Параллельная обработка данных:
как ускорить выполнение длительных операций

  1. zhu4 сказал:

    Андрей Бурмистров, Для меня не совсем понятно Ваше выражение “но точно могу сказать что чтение в файловой базе можно выполнять параллельно”. Если вы имеете ввиду параллельное чтение базы данных двумя и более клиентами 1С, то скорее всего вы правы. Но тогда это не относиться к данной статье, и ускорение предоставленными методами не возможно. У меня есть простая задача, не относящаяся к чтению и записи из БД. Нужно получить текст HTML страниц нескольких сот URL , через HTTPСоединение. Проверил на способе создания нескольких фоновых заданий. К сожалению ускорения не получил, так как определил, что фоновые задания, запущенные под одним сеансом, выполняются по очереди. Есть конечно возможность запуска нескольких сеансов по COM-соединению, но это не совсем устраивает.

    • Андрей Бурмистров сказал:

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

  2. Денис сказал:

    Добрый день,
    Вопрос конечно не в тему, но все же когда будет анонс курса?
    Обещали ещё на прошлой неделе, потом на этой, я так понимаю на этой неделе его тоже не будет?

    • Насипов Фарит сказал:

      Декабрь – сложный месяц, еще 4 курса записаны, но выпустить не успеваем.

      Но новую Оптимизацию планируем открыть уже в пятницу, практически все готово.

  3. Сергей сказал:

    Как раз в настоящий момент гружу в периодический независимый регистр 8 млн. строк из SQL-запроса. Попытался разделить их на потоки – фоновые задания. Делю через “НаборЗаписей.Отбор….Установить..”. Всего значений отбора – 271. В цикле от 0 до 271 набираю массив из 5 первых элементов(фоновых заданий), запускаю на выполнение – исключение вылетает на втором задании. Вообще подобным способом(не “порционный”, а “отборный”) механизм разделения может использоваться?

    • Андрей Бурмистров сказал:

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

    • Татьяна Гужавина сказал:

      Владимир, ссылки доступны на странице. Наводите мышь на картинку рядом с описанием и нажимайте.
      Проверьте настройки безопасности в браузерах — возможно, что они просто блокируют запуск скрипта видеоплеера.

  4. qwed сказал:

    Когда же уже анонс нового курса, кстати, в чем отличия нового курса от предыдущего?

    • Евгений Гилев (Мастер-тренер) сказал:

      Уже скоро, в анонсе также будут отличия нового курса от предыдущей версии.

      • Дмитрий сказал:

        Добрый день!
        Вроде на этой неделе обещали выход полной версии курса. Я думал, что имеется ввиду рабочая неделя. Курс не вышел. Можете сориентировать по срокам запуска курса по оптимизации производительности?

        • Евгений Гилев (Мастер-тренер) сказал:

          Добрый день!

          Все-таки перенесли запуск на следующую неделю.

          Ждите анонса.

          • Дмитрий сказал:

            Евгений, на этой неделе успеете выложить курс?
            Приношу извинения за некоторую настойчивость, но сейчас есть “окно” для обучения, а оно бывает не всегда.

  5. Севостьянов Андрей сказал:

    Добрый день!
    В курсе будет пояснение, за счет чего установка транзакции (видео №3) ускорила запись?

    • Андрей Бурмистров сказал:

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

  6. Андрей сказал:

    Во втором видео не совсем корректное тестирование – если запустить повторно 1-потоковую обработку, время составит уже порядка 7-8 минут а не 16. В тесте не учитываются различные служебные кэши 1с.

    • Андрей Бурмистров сказал:

      Во-первых, кэши еще могут повлиять на скорость чтения, и то здесь больше влияет кэш сервера СУБД, а не кэш 1С. В данном примере основное время уходит на запись, на это кэш повлиять уже не может.
      Во-вторых, вы действительно думаете что урок был записан с первого дубля? Естественно перед записью эта обработка уже выполнялась и не один раз.

      • Артем сказал:

        Подскажите, база в примере файловая или SQL? Предполагаю, что SQL, в связи с чем вопрос: при многопоточной записи в файловую базу эффект будет?

        • Андрей Бурмистров сказал:

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

          • zhu4 сказал:

            А в файловом варианте можно распараллелить чтение? Хочу сделать обработку чтения html страниц по URL. Пока сделать параллельное чтение не получилось на файловой базе. Если это возможно, то это зависит от версии платформы?

            • Андрей Бурмистров сказал:

              Параллельное чтение можно сделать в любой СУБД, в том числе и в файловой базе. Если с этим возникли проблемы, значит где-то все таки идет попытка записи, либо используется чтение с опцией ДЛЯ ИЗМЕНЕНИЯ.
              Следует помнить что в файловом варианте блокировка всегда накладывается на всю таблицу.

              • zhu4 сказал:

                Наверное все же нельзя с помощью указаных методов (фоновые задания). В файловом режиме, хотя и выполняются фоновые задания, но они выполняются последовательно. Если я не прав, укажите , в чем может быть ошибка? Могу только предположить, что параллельное выполнение фоновых заданий в файловом режиме базы появилось в более новых версиях платформы. Тестировал на 8.3.5

                • Андрей Бурмистров сказал:

                  Если там фоновые задания запускаются последовательно, тогда конечно никакой параллельности быть не может. С файловыми базами уже давно не работаю, поэтому по особенностям реализации там фоновых заданий не могу подсказать, но точно могу сказать что чтение в файловой базе можно выполнять параллельно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Мы используем файлы cookies, чтобы сделать сайт удобнее.
Продолжая просмотр сайта, Вы соглашаетесь с их использованием.
Подробнее