
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.01.2017, 19:49
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Коллеги, ещё один вопрос к коллективному разуму. По архитектуре, такскть. Заранее благодарен за любые советы, кроме вредных. Имеем веб-приложение + пул соединений --> каждый запрос с веба приходит в произвольную сессию из пула. Используем механизм прикладных псевдосессий для хранения окружения юзера. Юзер что-то ищет, запросы могут быть от простых до очень тяжелых. Результаты поиска юзеру на гуй надо отдавать постранично, а не всю портянку (которая может тупо в ОЗУ не влезть к нему, в худшем случае, до миллиона-двух записей, если юзер ленив и вообще параметры не задал, хочет хоть что-то увидеть, а такое допустимо). Ах, да, ещё при этом гуй хочет знать сколько всего строк в результате. Имеет смысл сохранять, например, в nologging-таблицу (не временную, ибо должна быть видима всем сессиям) по результатам поиска набор ROWID от ведущей таблицы, чтобы при перемещении юзера по страницам отдавать нужные порции, не выполняя основного тяжелого запроса; Или это всё от лукавого и стоит переложить нагрузку на средний слой, обязав его доставать всю портянку и рулить постраничным разбиением самостоятельно? В первом варианте весь груз ложится на БД - хранить временные списки ROWID от запросов пары тысяч юзеров, хоть и неподолгу, но накладно Во-втором варианте появляется много ненужного трафика от БД к среднему слою. За ресурсы среднего слоя особо не беспокоимся, там масштабируемый кластер, а вот БД в одном экземпляре. При любом раскладе базе придётся фулсканить, как минимум, индекс для подсчёта строк, просто взять курсор и фетчить по мере необходимости гуй категорически не согласен. Ещё есть такой момент, что с гуя задаётся сортировка, и при хранении времянки с ROWID её один хрен придется джойнить с данными, вычитывать и сортировать при каждом обращении полностью перед применением предикатов по номерам строк для конкретной страницы. Как сейчас принято такие задачи решать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2017, 20:47
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Дополню: Архитектуру придумали до нас и пока работаем с тем, что имеем. Есть кластер WebSphere, бэкенд на жаве, фронт на JS, и один единственный "мозг" на Oracle 11g. БД получает данные из нескольких источников, агрегирует, преобразует. Это не OLTP, не DWH... Скорее что-то типа DSS. Но данные некоторые обновляются динамично, кэшировать не получится. Юзер хочет среди этих данных искать, цели и мотивы - разные. В общем случае он может ввести фильтры, по которым отберутся 99% записей. Надо обеспечить комфортную постраничную навигацию, учитывая вводные по архитектуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2017, 21:58
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
gandalf-the-greyИли это всё от лукавого и стоит переложить нагрузку на средний слой, обязав его доставать всю портянку и рулить постраничным разбиением самостоятельно? Это будет оптимальнее. Особенно если этот средний слой будет портянку кэшировать и отдавать по аналогичным запросам без повторного запроса с сервера. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2017, 09:39
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
gandalf-the-grey, Тоже думал на тему создания промежуточной таблицы, так как при продвижении по страницам возрастает время выполнения запроса, а если еще и страницы формируются из отсортированного результата... Проблем тут минимум две 1. Серьезное увеличение времени первой выборки. 2. Если с таблицей можно работать из разных сессий то - время жизни данной таблицы. Ведь если архитектура системы позволяет пользователю задавать параметры выборки с прогнозируемым result-set несколько миллионов, то кто ему помешает создать одну сессию, поработать с ней, пойти пообедать создать другую сессию, поработать с ней и т.д. Так что пока - кэширование просмотренных страниц в пределах сессии работы с таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2017, 13:07
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Dimitry Sibiryakov, [quot gandalf-the-grey]Но данные некоторые обновляются динамично, кэшировать не получится. /quot] gandalf-the-grey, oracle+pagination + result_cache информации в интернете валом. или вы думаете что вы такой первый?) имхо средний слой вас не спасет. какой бы масштабируемый он не был. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2017, 18:19
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Vintgandalf-the-grey, oracle+pagination + result_cache информации в интернете валом. или вы думаете что вы такой первый?) имхо средний слой вас не спасет. какой бы масштабируемый он не был. Да ладно, прям навалом? А вы смотрели сами результаты первого поиска?? Там ничего полезного, кроме баянного рецепта 20-летней давности от Тома Код: plsql 1. 2. 3. 4. 5. 6. НЕТ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2017, 18:30
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
gandalf-the-grey, я то смотрел, а ты? когда мне действильено была интересна тема пейджинга я докопался до этого . в твоих постах желания копать нет. есть желание нахаляву получить готовое решение. готов платить?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2017, 19:03
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Vint, Спасибо за последнюю ссылку. Желание копать есть, времени не хватает, очень много задач. Неспроста обе мои темы заведены в воскресенье... Однако, FIRST_ROWS(N) пользуем. Другой вопрос, что выхлопа не замечаем. И другой вопрос, что у нас пока есть обязательное требование отображать общее количество строк, удовлетворяющих условиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2017, 22:23
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
gandalf-the-grey И другой вопрос, что у нас пока есть обязательное требование отображать общее количество строк, удовлетворяющих условиям. А зачем? Достаточно взять какое-либо разумное ограничение, например 50000 и "Ваш поиск возвращает слишком много строк(бoльше 50000). Пожалуйста уточните критерии поиска". SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2017, 11:23
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
gandalf-the-grey, всех денег не заработаешь.)) "Другой вопрос, что выхлопа не замечаем." - план смотрели? или с секундомером сидели? статей по педжингу море. и подсчет общего количества строк в общем и целом не проблема) там куча подводных камней потом всплывает) например переход на последнюю страницу которая перестает существовать в момент перехода) кстати с 12 версии пейджинг по другому делается). и кстати советую почитать как педжинг делается в компаниях типа яндекса и гугля. SY, под всеми темами есть такая надпись "Страницы: 1 2 3 4 5 6 7 8 9 10 .. 2154" вот и они хотят)) чтобы все страницы было видно)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2017, 12:14
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Vint, Да, статей много, но реально полезных среди сотни пока только 2 прочитал, считая ваш pdf. Подсчёт кол-ва строк пока для меня проблема - дважды приходится выполнять запрос на каждое обращение гуя. А запросы тяжёлые, с множеством параметров. С подводными камнями сталкивались, в частности, проблему отсутствия последней страницы уже решили. Идея перейти на прикладное кэширование (хранить в результаты) возникла тоже неспроста. Если вы уже прошли через это и можете посоветовать, куда копать, что почитать: буду благодарен. Есть предположение (может и ошибочное), что совать всё в Result Cache не особо поможет для тяжелых многопараметрических запросов от пары тысяч юзеров. Vintкак педжинг делается в компаниях типа яндекса и гугляИскал в первую очередь, в самом начале. Не нашёл. Может, хреново искал. Но есть правило: гуглю, если 15 мин результата нет - прекращаю. Время ценно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2017, 13:01
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
"Подсчёт кол-ва строк пока для меня проблема - дважды приходится выполнять запрос на каждое обращение гуя." - count() over (). это последний совет)) остальное за деньги. вы не просто в начале пути? вы даже первый шаг в пейджинге не сделали)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2017, 17:17
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Vintпод всеми темами есть такая надпись "Страницы: 1 2 3 4 5 6 7 8 9 10 .. 2154" вот и они хотят)) чтобы все страницы было видно)) Мало чeго они желают. Они будут читать вce 2154 cтраницы? Конечно-же нет. Так чем отличается "Страницы: 1 2 3 4 5 6 7 8 9 10 .. 2154" от, например, "Страницы: 1 2 3 4 5 6 7 8 9 10 .. 100"? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2017, 17:38
|
|||
|---|---|---|---|
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
SY, я когда то тоже задавал схожий вопрос. ответ оказался прост. если надо посмотреть самую первую тему с которой начался этот форум. как это сделать в рамках текущей функциональности данного форума?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2017, 18:51
|
|||
|---|---|---|---|
|
|||
Тяжелый запрос и выдача результата пользователю постранично |
|||
|
#18+
Vint"Подсчёт кол-ва строк пока для меня проблема - дважды приходится выполнять запрос на каждое обращение гуя." - count() over (). это последний совет)) остальное за деньги. вы не просто в начале пути? вы даже первый шаг в пейджинге не сделали)) Простите, но Вы слишком самоуверенны. без count() over() Код: plsql 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. 31. c count() over() Код: plsql 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. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=52&mobile=1&tid=1886525]: |
0ms |
get settings: |
10ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
201ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 534ms |

| 0 / 0 |
