ibatis: улучшить производительность вставки - PullRequest
0 голосов
/ 19 октября 2010

Я использую ibatis для моей команды вставки SQL. В моем коде я разбираю файлы построчно из папки. Каждая строка, соответствующая критериям, должна быть вставлена ​​в базу данных. Общее количество вставок за один прогон программы может быть любым где-то на 200 тыс.

    SqlSession sess = null;    
    this.sess = sf.openSession(ExecutorType.BATCH, false);
    for (each file) {
     for( each line matching criteria ){
         this.sess.insert("com.logs.util.insertFileInfo", fileData);
         insertcount++;
         if(insert count == 10)
              this.sess.commit();
         }    
      }
      if(insert count > 0){
           this.sess.commit();
      }   
    }

Этот стиль медленно занимает много памяти и через некоторое время вызывает исключение OutOfMemory. Как я могу улучшить производительность здесь?

1 Ответ

0 голосов
/ 19 октября 2010

Вы собираетесь совершать коммит после каждых 10 вставок?Похоже, вы делаете это только после первых 10 вставок.Я думаю, что вам нужно что-то вроде

if ((insertCount % 10) == 0) {
   this.sess.commit();
}

Эти незафиксированные изменения должны где-то храниться.Я не знаком с Ibatis, но если незафиксированные изменения хранятся в буфере, выделенном Ibatis, то в конечном итоге вам не хватит памяти, если вы не будете фиксировать изменения.

...