Size: a a a

2020 July 09

A

Anton in pro.jvm
DOCDOCTOR
всем привет) кто сталкивался, apache camel в route, сформировать sql вопрос на лету, т.е при вызове самого роута, а не при его регистрации?
Не обязательно строить запрос динамически, это лишнее количество prepared запросов и вытеснение других запросов из кэшей, лишняя загрузка оптимизатора.

При поиске можно статически указать все нужные варианты параметров через условные операторы
and t.field1 = nvl( :param , t.field1)...

При сортировке по одному столбцу можно тоже статику сделать:
order by
(case when :sort_column = 'col1' then col1 end),
(case when :in_sort_column = 'col2' then col2 end),
(case when :sort_column = 'col3' then col3 end)

По аналогии можно написать и для множественной сортировки, и для направления ASC, DESC

Если все же нужен динамический запрос, тут рекомендуют Camel Templating
источник

D

DOCDOCTOR in pro.jvm
Anton
Не обязательно строить запрос динамически, это лишнее количество prepared запросов и вытеснение других запросов из кэшей, лишняя загрузка оптимизатора.

При поиске можно статически указать все нужные варианты параметров через условные операторы
and t.field1 = nvl( :param , t.field1)...

При сортировке по одному столбцу можно тоже статику сделать:
order by
(case when :sort_column = 'col1' then col1 end),
(case when :in_sort_column = 'col2' then col2 end),
(case when :sort_column = 'col3' then col3 end)

По аналогии можно написать и для множественной сортировки, и для направления ASC, DESC

Если все же нужен динамический запрос, тут рекомендуют Camel Templating
да, но я так понимаю, изначально я должен знать колличество параметров?
источник

A

Anton in pro.jvm
DOCDOCTOR
да, но я так понимаю, изначально я должен знать колличество параметров?
В sql всегда есть схема и максимальное количество параметров известно.
А если источник noSql без схемы, тогда видимо только динамика.
источник

D

DOCDOCTOR in pro.jvm
Anton
В sql всегда есть схема и максимальное количество параметров известно.
А если источник noSql без схемы, тогда видимо только динамика.
понял) спасибо, буду думать
источник

OD

Oleh Dokuka in pro.jvm
Anton
А youtube видео про Печкина разве уже не неактуально?:
Кирилл Толкачёв и Егений Борисов — Reactive или не reactive, вот в чем вопрос

И книга ваша Hands-On Reactive Programming in Spring 5?
Там balancing хорошо разрисован
В докладе Кирила и Жени не раскрыта тематика балансировки
источник

OD

Oleh Dokuka in pro.jvm
По поводу книги - там мало описано про rsocket
источник

OD

Oleh Dokuka in pro.jvm
а тут был вопрос более направлен на балансировку с RSocket
источник

D

DOCDOCTOR in pro.jvm
Anton
Не обязательно строить запрос динамически, это лишнее количество prepared запросов и вытеснение других запросов из кэшей, лишняя загрузка оптимизатора.

При поиске можно статически указать все нужные варианты параметров через условные операторы
and t.field1 = nvl( :param , t.field1)...

При сортировке по одному столбцу можно тоже статику сделать:
order by
(case when :sort_column = 'col1' then col1 end),
(case when :in_sort_column = 'col2' then col2 end),
(case when :sort_column = 'col3' then col3 end)

По аналогии можно написать и для множественной сортировки, и для направления ASC, DESC

Если все же нужен динамический запрос, тут рекомендуют Camel Templating
вот с условия where работает, а можно ли аналогично :? или как то еще поставить динамически значение на место from? select .... from :?, или что то подобное?
источник

OC

Oleg Chirukhin ☄️🧙‍♂... in pro.jvm
Я тут вам статью подвёз. О том, как работать в IntelliJ IDEA даже на планшете.

https://habr.com/ru/post/510210/
источник

A

Anton in pro.jvm
DOCDOCTOR
вот с условия where работает, а можно ли аналогично :? или как то еще поставить динамически значение на место from? select .... from :?, или что то подобное?
:param  это и есть ? - просто параметр именованый .
В этой схеме есть ограничение - null считается отсутствием условия, т.е. если нужно искать по значению null - не подойдет.
источник

D

DOCDOCTOR in pro.jvm
Anton
:param  это и есть ? - просто параметр именованый .
В этой схеме есть ограничение - null считается отсутствием условия, т.е. если нужно искать по значению null - не подойдет.
я вот так делаю https://ideone.com/HpLbny, на место ?param через headerKey хочу подставить значение, но падает с ошибкой. А отправляемый запрос как то в дебаге можно глянуть?
источник

AM

Aleksander Melnichni... in pro.jvm
Oleg Chirukhin ☄️🧙‍♂️🚀
Я тут вам статью подвёз. О том, как работать в IntelliJ IDEA даже на планшете.

https://habr.com/ru/post/510210/
Не открывал еще статью, но звучит как расплавленный планшет =)) хотя видел как работают в ней на Linux on DEX на смартфоне самсунговском, жаль проект закрыли. Ну и да - спасибо за статью. Твои статьи реально радуют.
источник

ВБ

Вениамин Белоусов... in pro.jvm
Всем привет! Подскажите пожалуйста.  Про ArrayList на хабре написано следующее: Как можно догадаться, в случаях, когда происходит вставка элемента по индексу и при этом в вашем массиве нет свободных мест, то вызов System.arraycopy() случится дважды: первый в ensureCapacity(), второй в самом методе add(index, value), что явно скажется на скорости всей операции добавления. Почему при вставке по индексу копия вызовется два раза? Мы ведь и в первый раз увеличим место в массиве...
источник

AM

Aleksander Melnichni... in pro.jvm
Вениамин Белоусов
Всем привет! Подскажите пожалуйста.  Про ArrayList на хабре написано следующее: Как можно догадаться, в случаях, когда происходит вставка элемента по индексу и при этом в вашем массиве нет свободных мест, то вызов System.arraycopy() случится дважды: первый в ensureCapacity(), второй в самом методе add(index, value), что явно скажется на скорости всей операции добавления. Почему при вставке по индексу копия вызовется два раза? Мы ведь и в первый раз увеличим место в массиве...
Кажется, что в ensureCapacity мы создадим массив новый большего размера и переместим туда элементы(вызовем System.arraycopy). А при вставке в середину, мы сдвинем все от нужного индекса вправо(вызовем System.arraycopy) и вставим элемент. Поэтому 2 раза
источник

ВБ

Вениамин Белоусов... in pro.jvm
Aleksander Melnichnikov
Кажется, что в ensureCapacity мы создадим массив новый большего размера и переместим туда элементы(вызовем System.arraycopy). А при вставке в середину, мы сдвинем все от нужного индекса вправо(вызовем System.arraycopy) и вставим элемент. Поэтому 2 раза
Там пишется что: новая емкость рассчитывается по формуле (oldCapacity * 3) / 2 + 1. Было 5 элементов.  Мы хотим вставить элемент в индекс 5. Получается после первого копирования же будет место. Нет? Я что-то упускаю :)
источник

AM

Aleksander Melnichni... in pro.jvm
Вениамин Белоусов
Там пишется что: новая емкость рассчитывается по формуле (oldCapacity * 3) / 2 + 1. Было 5 элементов.  Мы хотим вставить элемент в индекс 5. Получается после первого копирования же будет место. Нет? Я что-то упускаю :)
В этом случае не должно быть. Я честно не знаю, есть ли там проверка на такой эджкейс. Если нет проверки - то будет два вызова
источник

AM

Aleksander Melnichni... in pro.jvm
Я не вижу там проверки на это. Будет два вызова
источник

MO

Max Olsson in pro.jvm
Вениамин Белоусов
Там пишется что: новая емкость рассчитывается по формуле (oldCapacity * 3) / 2 + 1. Было 5 элементов.  Мы хотим вставить элемент в индекс 5. Получается после первого копирования же будет место. Нет? Я что-то упускаю :)
arraycopy копирует содержимое, не создаёт новый массив
источник

AM

Aleksander Melnichni... in pro.jvm
Max Olsson
arraycopy копирует содержимое, не создаёт новый массив
Он про то, почему бы после создания нового массива и перекопирования туда элементов не проверить, а индекс по которому вставляют равен ли предыдущему значению length старого массива. Если да - то можно не сдвигать
источник

AM

Aleksander Melnichni... in pro.jvm
Но кмк, так не сделано, потому, что это эджкейс, и он редок. А вставлять лишнюю проверку - это деграднет весь перфоманс этого метода(но улучшит для эджкейса)
источник