|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вопрос начался там 21691388 приведу здесь вадяесли в хранимке есть такое select * from .... select * from .... то она выдаст результат клиенту после завершения второго селекта а возможно ли сделать так чтоб после первого селекта началась отдача клиенту , а потом начался второй селект или параллельно с отдачей первого запускался второй селект? Akinaвадяона выдаст результат клиенту после завершения второго селектаЭто не так. Сервер начинает "выдачу" сразу по выполнении первого запроса. Можете убедиться, выполнив код в консольном клиенте. Если из приложения наблюдается иное, то вина лежит на библиотеке доступа или драйвере доступа. есть такое Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
но у меня получается, что 1 приходит только тогда когда 2 селект выполнится как сделать по очереди? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:58 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, антипаттерн) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:02 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Petro123вадя, антипаттерн)а по делу? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:04 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, Это и есть по делу, если мы программисты а не кодировщики. Жди ответов). Я с тобой не спорю. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:12 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, а как ты определяешь что вадя1 приходит только тогда когда 2 селект выполнится ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:20 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Dmitry.а как ты определяешь что измеряю время на клиенте. отправка серверу - начало отсчета. второй селект вычисляется долго, но результат - 1 число. после первого селекта идет отправка клиенту userSession.getBasicRemote().sendText(sbb.toString()); на клиенте фиксация времени и вывод разницы после второго селекта - отправка клиенту userSession.getBasicRemote().sendText(sbb.toString()); на клиенте фиксация и отображение времени от начала отсчета. время первого селекта (замерено отдельно - 15-20мс) время второго селекта 1-3 сек время между первой и второй фиксацией 1мс если они приходили как хочется - разница между фиксациями должна быть большой , а время первой фиксации маленькое ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:35 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
если перед вторым sendText поставить принудительный sleep(3000) это будет видно на клиенте? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:58 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Dmitry.если перед вторым sendText поставить принудительный sleep(3000) это будет видно на клиенте?второе сообщение задержано на 3 сек ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 19:20 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя Код: java 1.
Судя по доке этот метод выполянется для одного ResultSet'а для нескольких нужно пользоваться Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 20:12 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
pavel_nvвадя Код: java 1.
Судя по доке этот метод выполянется для одного ResultSet'а для нескольких нужно пользоваться Код: java 1.
Упс. Конечно в цитате про Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 20:20 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя select * from .... select * from .... то она выдаст результат клиенту после завершения второго селекта а возможно ли сделать так чтоб после первого селекта началась отдача клиенту , а потом начался второй селект или параллельно с отдачей первого запускался второй селект? В одной сессии обычно нельзя запустить два курсора. Или систему вложенных курсоров. Поэтому я вижу такой вариант. Ты создаешь пул сессий 4-8 штук. (Connection) И в решиме thread-pool-executor накидываешь им задания и они их исполняют в параллелизме. Будь осторожен с ноутбуком. Для 1 локального диска этот фокус скорее всего не даст перформанса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 20:27 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
pavel_nv, это забирает 1 результсет - результат 1 селекта Код: java 1.
а это Код: java 1.
запускает на выполнение хранимку как применить вой вариант? maytonПоэтому я вижу такой вариант. Ты создаешь пул сессий 4-8 штук. (Connection) И в решиме thread-pool-executor накидываешь им задания и они их исполняют в параллелизме.не , тут мне надо несколько иное. получить результат именно из одной хранимки. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 20:38 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, А доку читал?) Ты же сам писал в первом варианте Код: java 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 20:50 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
pavel_nvвадя, А доку читал?) Ты же сам писал в первом варианте Код: java 1. 2.
не понял... дело в том, что я получаю первый результсет только после того как на сервере выполнится второй селект ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 21:00 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадяне , тут мне надо несколько иное. получить результат именно из одной хранимки. Языки хранимок это обычно простые ЯП без мультипоточки и async-calls. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 21:24 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
AkinaЭто не так. Сервер начинает "выдачу" сразу по выполнении первого запроса. Можете убедиться, выполнив код в консольном клиенте. Если из приложения наблюдается иное, то вина лежит на библиотеке доступа или драйвере доступа. maytonЯзыки хранимок это обычно простые ЯП без мультипоточки и async-calls. кто прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 21:26 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадякто прав? возьми консольный mysql клиент и попробуй выполнить процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 22:08 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадякак сделать по очереди? В две переменные и выбирать по очереди в цикле? Вопрос в чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 22:13 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Petro123В две переменные и выбирать по очереди в цикле? Вопрос в чем?вопрос в том, что первый rs = proc.getResultSet(); начинает работать только после того как выполнится вся хранимка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 05:55 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Dmitry.возьми консольный mysql клиент и попробуй выполнить процедуру. maytonЯ прав Akina действительно, сначала выдаёт результат первого селекта, поле (через время выполнения ) результат второго. jdbc отдаёт результат после выполнения второго селекта, т.е. ждёт выполнения всей процедуры. а надо чтоб по мере выполнения селектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 06:28 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, хп логический это как бы функция - входные параметры, выходные. ты же не можешь из функции выдрать локальную переменную с бухты барахты, ты должен ее выпиздуть наружу. так и тут бери результат первого селекта заталкивай во вьюху, на вьюху вешай watcher и получай результат на событии. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:24 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Где-то в степибери результат первого селекта заталкивай во вьюху, на вьюху вешай watcher и получай результат на событии.не всё так просто :) в хп строится динамический запрос. весь фокус был - запуск разово , а получение результата по мере выполнения... есть желание ускорить поиск с использованием по like and like в таблице с 3000000 строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:33 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, в чем проблема складывай все результаты в таблицу когда таблицу отпустит срабоатет событие -> смотри таблицу уж не знаю, может ли твоя хп писать в файл, там еще проще и оперативней отследить.а ты как думал отлаживаю хп? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:40 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Где-то в степив чем проблема складывай все результаты в таблицу когда таблицу отпустит срабоатет событие -> смотри таблицу уж не знаю, может ли твоя хп писать в файл, там еще проще и оперативней отследить.а ты как думал отлаживаю хп?всё это можно, но это всё время. задача не выходить из 0.3 сек. как отлаживать хп - это я знаю, в этом проблем нет :) при 100 000 записей все летает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:54 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
вадя, Не забывай про консистентность. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:56 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
интересно... процедура: Код: sql 1. 2. 3. 4. 5. 6.
груви (ну почти жава) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
оба резалтсета действительно выдаются одновременно. но когда я добавил в урл параметр traceProtocol=true то в логе увидел что второй результат приходит как надо - через 3 секунды но jdbc в mysql так написан... пытался отключить read-ahead но не помогло... кусок лога трейса - в последней строке начинает читать второй резалтсет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 17:19 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Немного покопался, https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-implementation-notes.html Код: java 1.
Позволяет получить первый ResultSet сразу, но в этому случае не получилось получить после этого второй. На работе с ораклом вроде такой проблемы нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 17:27 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
странно всё это.... как-то не экономично все это ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 17:49 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
А сделать в хранимке: Код: plsql 1. 2. 3.
превратив две выборки в одну? Или я чего-то не понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:05 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Basil A. SidorovА сделать в хранимке: Код: plsql 1. 2. 3.
превратив две выборки в одну? Или я чего-то не понимаю? превратятся, а в чём будет профит? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:18 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, результат будет тот же - вернутся записи после выполнения всех селектов, что и есть сейчас + куча неудобств ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:20 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
А какая польза в это всем? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:30 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Если заказана/требуется сортировка, то сервер сначала получит весь набор данных и только потом начнёт возвращать результат клиенту. Если сортировки не требуются, то возможны варианты. P.S. Профит в том, что не надо делать ту работу, которую сервер БД в состоянии сделать без вашего вмешательства. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:31 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, не, тут совсем не это.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:55 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Логи: 2018-10-02 19:23:21.752 INFO 21494 --- [ main] start... 2018-10-02 19:23:21.858 INFO 21494 --- [ main] executed 2018-10-02 19:23:21.858 INFO 21494 --- [ main] first 1 ... 2018-10-02 19:23:21.860 INFO 21494 --- [ main] first 3 2018-10-02 19:23:23.858 INFO 21494 --- [ main] second abc А чего через JDBC апи не работает... толи фича, толи баг ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 19:29 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
это работает Код: java 1.
но первый Код: java 1.
кидает SQLException: Attempt to close streaming result set com.mysql.cj.protocol.a.result.ResultsetRowsStreaming@2e8e8225 that was not registered. закоментил rs.close() - падает с тем-же ексепшином на следующем методе. взял rs.close() в try-catch игнорируя ексепшн и все заработало - фетчит все по мере получения! явная бага в драйвере ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:39 |
|
Как работает jdbc?
|
|||
---|---|---|---|
#18+
Dmitry., Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Комбинация набора результатов только для чтения, доступного только для чтения, с размером выборки Integer.MIN_VALUE служит в качестве сигнала к результату набора строк для последовательности строк. После этого любые результирующие наборы, созданные с помощью инструкции, будут загружаться по строкам. С этим подходом есть некоторые оговорки. Вы должны прочитать все строки в результирующем наборе (или закрыть его), прежде чем вы сможете выдать какие-либо другие запросы в соединении, или будет выбрано исключение. Самые ранние блокировки этих операторов могут быть освобождены (будь то MyISAMблокировки на уровне таблицы или блокировки на уровне строк в каком-либо другом хранилище, например InnoDB, когда это завершено). Если оператор находится в пределах объема транзакции, блокировки освобождаются при завершении транзакции (что подразумевает, что оператор должен выполнить сначала). Как и в большинстве других баз данных, операторы не заполняются до тех пор, пока не будут прочитаны все ожидающие ответа результаты, или активный набор результатов для оператора закрыт. Поэтому, используя результаты потоковой передачи, обрабатывайте их как можно быстрее, если вы хотите поддерживать параллельный доступ к таблицам, на которые ссылается оператор, создающий набор результатов. Другой альтернативой является использование потоковой передачи на основе курсора для получения заданного количества строк каждый раз. Это можно сделать, установив для свойства соединения useCursorFetchзначение true, а затем вызывая setFetchSize(int)с intжелаемым количеством строк, которые будут извлекаться каждый раз: Код: sql 1. 2. 3. 4.
как бы получается такой вариант тоже не очень хороший. особенно при больших результатах селекта... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2018, 06:37 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121741]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 327ms |
total: | 506ms |
0 / 0 |