Я разрабатываю JAVA-приложение, которое запросит таблицы, которые могут содержать более чем 1 000 000 записей. Я попробовал все, что я мог, чтобы быть максимально эффективным, но я только могу достигнуть на в среднем. приблизительно 5 000 записей в минуту и максимум 10 000 однажды. Я попытался перепроектировать загрузчик данных, и мой код, кажется, очень похож, но все еще никакая удача.
Действительно ли поточная обработка является эффективным решением здесь? Я попробовал это, но очень минимальными результатами.
Я читал и применил каждую вещь, возможную, это кажется (сжимающиеся запросы/ответы, потоки и т.д.), но я не могу достигнуть загрузчика данных как скорости.
Для замечания кажется, что queryMore метод, кажется, горлышко бутылки.
У кого-либо есть какие-либо примеры кода или события, которые они могут совместно использовать для регулирования меня в правильном направлении?
Спасибо
Задержка будет убийцей для такого типа ситуации - и решением будет либо многопоточность, либо асинхронные операции (используя NIO). Я бы начал с параллельного запуска 10 рабочих потоков и посмотрел, какая разница (при условии, что back-end поддерживает одновременное получение).
У меня нет конкретного кода или чего-либо, что я могу предоставить здесь, извините - просто болезненный опыт с вызовами API, проходящими через сети с высокой задержкой.
В Salesforce API ограничение размера пакета - это то, что действительно может замедлить работу. При использовании методов query / queryMore максимальный размер пакета составляет 2000. Однако, даже если вы можете указать 2000 в качестве размера пакета в заголовке SOAP, Salesforce может отправлять в ответ меньшие пакеты. Их решение о размере пакета зависит от активности сервера, а также от результатов вашего исходного запроса.
Я заметил, что если я отправлю запрос, который включает какие-либо «текстовые» поля, размер пакета будет ограничен 50.
Я предлагаю убедиться, что ваши запросы извлекают только те данные, которые вам нужны. Я знаю, что многие таблицы Salesforce содержат множество настраиваемых полей, которые могут не понадобиться для каждой интеграции.
Документация Salesforce по этому вопросу
У нас около 14000 записей в нашем объекте Accounts, и для получения всех записей требуется некоторое время. Я выполняю запрос, который занимает около минуты, но SF возвращает только пакеты, не превышающие 500, хотя я установил размер пакета равным 2000. Каждая дополнительная операция запроса также занимает от 45 секунд до минуты. Это ограничение очень неприятно, когда вам нужно получить большой объем данных.