2015-12-19 2 views
0

У меня есть файл 50K записей. Это займет около 40 минут, чтобы вставить его в БД. Поэтому я подумал о применении раздела к шагу таким образом, что записи 50k разделены между 10 потоками (через gridSize), при этом каждый поток обрабатывает 1000 записей параллельно.Как применить многораздельный счет для MultiResourceItemReader?

На всех форумах показаны примеры использования JDBCPagingItemReader и секционированного подсчета с использованием контекста выполнения. Поскольку я использую MultiResourceItemReader, как я могу установить количество разделов (startingIndex и endingIndex - см. Снимок кода ниже) для MultiResourceItemReader?

Просьба сообщить.

Фрагмент кода из секционирования ниже:

public Map partition(int gridSize) { 
    LOGGER.debug("START: Partition"); 
    Map partitionMap = new HashMap(); 
    int startingIndex = 0; 
    int endingIndex = 1000; 

    for(int i=0; i< gridSize; i++){ 
     ExecutionContext ctxMap = new ExecutionContext(); 
     ctxMap.putInt("startingIndex",startingIndex); 
     ctxMap.putInt("endingIndex", endingIndex); 

     startingIndex = endingIndex+1; 
     endingIndex += 1000; 

     partitionMap.put("Thread:-"+i, ctxMap); 
    } 
    LOGGER.debug("END: Created Partitions of size: "+ partitionMap.size()); 
    return partitionMap; 
} 

ответ

0

Вы не установите количество разделов на MultiResourceItemReader. Вы используете MultiResourcePartitioner для создания раздела на ресурс (файл), а затем читайте каждый файл отдельно, как собственный раздел. С этой конфигурацией вам больше не нужен MultiResourceItemReader (вы можете перейти прямо к делегату).

Существует пример этого случая использования в образцах Spring Batch и может быть найден здесь: https://github.com/spring-projects/spring-batch/blob/master/spring-batch-samples/src/main/resources/jobs/partitionFileJob.xml

+0

Спасибо за реагирование. Мне не нужен раздел на ресурс (файл). Я хочу, чтобы раздел выполнялся для одного файла. Будет ли это работать для моего сценария? – Gopi

+0

Разделение внутри одного файла обычно не повышает производительность, поскольку процесс обычно связан с IO. В чем тут узкое место? 50k записей не нужно так долго вставлять, если нет другого узкого места ... –

+0

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

Смежные вопросы