#java #spring #spring-jdbc
#java #spring #spring-jdbc
Вопрос:
Мне нужно пропустить определенный элемент из списка, т.Е. objectlistToprocess, при пакетном обновлении с использованием Spring JdbcTemplate.
- один из способов — удалить элементы из списка перед вызовом пакетного обновления и предоставить список. Но для этого потребуется больше итераций по списку, по одному по всему списку для удаления элементов, а затем по пакетному обновлению для установки значений.
- избегайте итераций и просто пропустите элемент в методе пакетного обновления (но как).
this.getJdbcTemplate().batchUpdate(Query,objectlistToprocess ,batchSize, new
ParameterizedPreparedStatementSetter<MyObject>() {
@Override
public void setValues(PreparedStatement ps, MyObject) throws SQLException {
// set all parameterized values
// SKIP ELEMENT BUT HOW?????
}
}
Комментарии:
1. Используйте 1. Вероятность существенного влияния на производительность почти равна 0. Или не добавляйте элемент в список в первую очередь.
2. @JBNizet у меня есть более 20 списков с различными размерами, которые могут варьироваться от 10 до 50 в каждом списке. и я должен сначала удалить определенные элементы из списка 20 , поэтому я хочу удалить их в batchUpdate и избежать предварительного удаления с помощью цикла FOR. Для нас даже задержка в 1 секунду при удалении элементов списка является БОЛЬШОЙ проблемой производительности. поскольку нам нужно обрабатывать огромные данные.
3. Хорошо, итак, давайте предположим наихудший случай и скажем, что у вас есть 50 элементов в каждом из ваших 20 списков. 20 * 50 == 1000. Это не так уж и много. Это крошечное. Java не требуется 1 секунда для фильтрации 1000 элементов. Для этого требуется несколько наносекунд или микросекунд. И время, которое требуется по сравнению со временем, необходимым для заполнения инструкции, отправки данных по сети в базу данных, ожидания записи данных на диск и получения результата, совершенно незначительно.
4. Не говоря уже о том, что вам все равно пришлось бы выполнять логику фильтрации для каждого элемента, если вы поместите ее в вызов setValues().
5. Я согласен, что это незначительно, но иметь хорошую логику и минимизировать накладные расходы. мы должны принять этот подход к программированию. Число BTW предназначено только для одного профиля, у меня есть 100 ТЫСЯЧ профилей для обработки, которые содержат этот список. НО как реализовать эту логику пропуска при setValues или пакетном обновлении.?