Как стать автором
Обновить

Комментарии 9

Возможно я чего то не понял. Обычным crm.lead.list, select *, отправленные одним батчем можно получить 50*50=2500 записей\запрос.
Ограничение 2 запроса в секунду, значит 5000 записей в секунду.
35000 записей таким образом можно получить за 7 секунд.
Зачем тут делать list+get?

предложены в официальной документации

ссылка нерабочая?
правильные ссылки
dev.1c-bitrix.ru/rest_help/rest_sum/index.php
dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&CHAPTER_ID=07883&LESSON_PATH=7657.7883
Возможно я чего то не понял. Обычным crm.lead.list, select *, отправленные одним батчем можно получить 50*50=2500 записей\запрос.
Ограничение 2 запроса в секунду, значит 5000 записей в секунду.
35000 записей таким образом можно получить за 7 секунд.


Не совсем так. Сервер не отвечает мгновенно. И чем больше полей пытается выгрузить запрос, тем сильнее задумывается сервер. И, если я не ошибаюсь, реализация такова, что чем больше start, тем дольше ждать (речь о десятках секунд). Если сервер в такой ситуации продолжать забрасывать запросами со скоростью, описанной в документации, то он начинает ложиться — рвать соединение или возвращать ошибку 500.

Из статьи это не очевидно, согласен, надо поправить.

Ссылки поправлю, спасибо.
Да но .list + .get вам не даст более 100 записей в секунду получить. Как вы 35000 получаете с помощью .get за 7 секунд, если у нас ограничение на 2 запроса в секунду? 2 batch x50 = макс 100 записей .get. Или вы игнорируете это ограничение?
Да, игнорируем. Опыт показал, что при параллельной отправке запросов конкретно по методам *.get можно работать с гораздо более плотным потоком запросов, чем указано в официальной документации (в 17 раз быстрее).

Вот результаты тестов сравнительной скорости получения данных с и без соблюдения официальных правил по скорости запросов: github.com/leshchenko1979/fast_bitrix24/blob/master/speed_tests/strategies.ipynb

И у нас реализован autothrottling — начинаем снижать скорость запросов, как только сервер начинает возвращать ошибки.
Эмм, а list + list не будет быстрее? Первым получаем айдишники, вторым нужные поля…

А в чем логика, почему 2 запроса будет быстрее, чем один?

Ну в том же, почему list+get оказался быстрее. list только по id выполняется быстро, его можно гонять в условном потоке №1. А зная айдишники, можно батчить тяжелые запросы на собственно данные в потоке №2. А когда все айдишники выбраны, можно распараллелить выборку и на поток №1.
понял. надо пробовать.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории