Как определить номер для FetchBatchSize в OpenJPA? - PullRequest
3 голосов
/ 24 апреля 2011

OpenJPA предоставил некоторый параметр в FetchPlan. (http://openjpa.apache.org/builds/1.2.0/apidocs/org/apache/openjpa/persistence/FetchPlan.html) И я застрял в одном из них, FetchBatchSize. Надеюсь, что кто-то может поделиться своим опытом.

Вот сценарий, скажем, я собирался выбрать до 1000 записей из базы данных (MS-SQL) 1. если я оставлю FetchBatchSize значение по умолчанию -1, то для возврата 1000 записей потребуется около 20 секунд;

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

  2. хорошо, так что, я думаю, если FetchBatchSize превысит желаемое пользователем количество, это займет больше времени. Я мог бы изменить FetchBatchSize во время выполнения, в соответствии с количеством, установленным пользователем. вы хотите 1000, я установил FetchBatchSize на 1000, вы хотите 100, я установил его на 50, но что если пользователю нужно всего несколько записей? Я тоже установил FetchBatchSize как 2?

Итак, мой вопрос, как выбрать правильный FetchBatchSize, когда maxResultCount является переменной? есть ли какое-либо значение DEFAULT, например, 20, в документе openJPA, которое подходит для большинства сценариев? Или рекомендуется изменить его во время выполнения.

Любой комментарий приветствуется. Спасибо!

1 Ответ

0 голосов
/ 16 июля 2011

На самом деле это больше вопрос настройки MS-SQL, чем вопрос OpenJPA - значение FetchBatchSize передается драйверу.

Нет ничего плохого в том, чтобы динамически устанавливать значение во время выполнения на основе параметра максимального количества результатов. Кроме того, предполагая, что задержка, с которой вы столкнулись при указании числа, превышающего предложение limit, не связана с каким-то неясным битом конфигурации, было бы интересно добавить что-то в OpenJPA SQLServerDictionary, чтобы ограничить размер пакета при достижении максимального значения результата настоящее. Может быть, это хорошо, если вы попадете в список рассылки OpenJPA.

...