leshchenko1979 / fast_bitrix24

Высокопроизводительный API wrapper для Питона для быстрого массового обмена данными с Битрикс24 через REST API
MIT License
151 stars 31 forks source link

Реализовать более быструю стратегию get_all() #191

Closed leshchenko1979 closed 7 months ago

leshchenko1979 commented 2 years ago

Стратегия объединяет start=-1, выборку в цикле с сортировкой по ID, где ID > последнего ID из предыдущего запроса и объединение в батч.

Видео: https://youtu.be/UiGgSn7_igg

image image

leshchenko1979 commented 2 years ago

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

leshchenko1979 commented 7 months ago

Также можно отдавать результаты по мере получения с сервера генератором, а не списком

leshchenko1979 commented 7 months ago

Результат тестов разных подходов:

https://github.com/mesilov/bitrix24-php-sdk/blob/2.x/docs%2FRU%2FCore%2FBatch%2Fbatch-read-mode.md

leshchenko1979 commented 7 months ago

Тесты показывают, что стратегия не получается более быстрой (новый метод в 278 раз медленнее старого).

Причины:

Однако допускаю, что новый метод работает лучше на запросах, возвращающих небольшое количество элементов (до 100, 1-2 страницы).