|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Вопрос такой, есть БД и в ней справочник улиц. Приложение на WEB содержит выпадающий список на AJAX, в котором необходимо по первым буквам организовать поиск по маске %строка% в базе и обновление выпадающего списка. Т.е. поиск осуществляется не по началу, а по вхождению набранной пользователем строки. Если делать в лоб, то при достаточно большом числе конкурентных запросов нагрузка на сервер значительно возрастает (у БД есть ещё и другие задачи). Кто-нибудь знает, как оптимизировать данную конструкцию, и какие решения этой проблемы используются на HighLoad-проектах? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 14:53 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-, Кэшируйте справочник улиц в памяти на стороне Web-сервера. И синхронизируйте его с БД, например, по таймеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 15:19 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-, вэб-приложения (в отличии от десктопа) на голом ЯП не пишут. Поэтому кэш, например в хибернейте присутствует. Посмотрите что у вас над БД сидит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 15:36 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123, На текущий момент ничего нет, я проектированием занимаюсь... вот задумался на тему выбора типа селекторов: ComboBox на AJAX или отдельная форма с полем ввода кнопкой "Найти"... вот думаю, как комбо-бокс будет работать и прикидываю ресурсы и нагрузки. С кэшем понятно... т.е. без дополнительного ресурса не обойтись, ок) А что может выступать в качестве такого кэша? Есть решения? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 15:47 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Над ораклом будет или Hiber или TopLink ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 15:48 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Но вообще, лучше, чтоб "Кэш-машина" лезла в базу сама по соображениям производительности... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 15:50 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=- На текущий момент ничего нет, я проектированием занимаюсь... проект ВЭБ с нуля вообще дело неблагодарное. От наличия и квалификации плясать надо. Я просто искал себе инфу для нового ЯП (java) с нуля, поэтому есть такая инфа: авторHibernate по определению медленее ( iBATIS ). Да бинд с испоьлзованием JDBC будет выполнен быстрее. (так как хибернатат использует прокси и рефлексию) Транзакции можно использовать и без EJB ( ), тот же hibernate прекрастно справляется, да и на JDBC проблем с транзакциями нет. Для чего может понадобится EJB? ну для масштабирования и кэширования. Хотя и кэширование можно решить при помощи различных доп фреймворков, тот же JBoss Cache Чем реально может помочь Hibernate, EJB так это связанные объекты и коллекции. т.к. у меня от оракла идёт (БД уже ГОТОВА), то хибернейт будет хуже iBATIS. Во втором я сам полностью управляю всеми запросами (полный контроль) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 16:21 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123, Ситуация такая, есть готовая база и есть система аналитических отчётов, которая написана в ГУЕ. Её надо портировать на ВЭБ. В качестве генератора отчётов выбран Jasper, репозиторий отчётов JasperServer, у которого есть открытое API. Чтобы сгенерить отчёт, нужно ввести входные параметры и дёрнуть JasperServ, чтобы тот выдал печатную форму в указанном формате или в режиме пейджинга запрашивать нужную страницу для отображения в HTML. Я сейчас нахожусь на стадии раздумий по поводу ввода параметров. Цель примерно нарисовал такую, создать библиотеку тэгов, в которой были бы прикладные селекторы-валидаторы различных справочников и объектов существующей базы. Работа комбо-бокса очень привлекает своей интерактивностью, сразу видно что есть ещё в БД рядом. Но для этого нужен индекс, чтобы не "бомбить" БД запросами. Вот lucene нашёл... наверно он меня спасёт... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 16:37 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=- Ситуация такая, есть готовая база и есть система аналитических отчётов, которая написана в ГУЕ. Её надо портировать на ВЭБ. ... А что за ГУЙ? Самописный или какой-то продукт? ЗЫ. Писал подобную штуку, но под BIRT reporting. Жесть... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:11 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-, если данных реально много, наверно ты прав - средства самой БД могут не хватить. И наклон проекта у тебя на report'инг, поэтому кэши коллекций-сущностей это не совсем то (параметров). автора посоветуйте, пожалуйста, БД/движок для индексации _имён_, размеров, дат (но не содержимого файлов) файлов с возможностью поиска по %query%. В данный момент используется mysql, но при базе в пару гигов скорость сильно падает (с 2-3 секунд до десятка). Пару раз пробовал lucene, но на паре млн документов на %query% запросах его скорость не выше mysql'я Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:23 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-Если делать в лоб, то при достаточно большом числе конкурентных запросов нагрузка на сервер значительно возрастает (у БД есть ещё и другие задачи). Кто-нибудь знает, как оптимизировать данную конструкцию, и какие решения этой проблемы используются на HighLoad-проектах? - у БД есть собственный кэш запросов, при достаточном размере этого кэша, проблем с производительностью в описанной Вами задаче не возникает (делал аналогичные поиски по КЛАДР и по списку станций ЖД - проблем с производительностью в этом месте не было) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:58 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123-=*ShamaN*=-, если данных реально много, наверно ты прав - средства самой БД могут не хватить. И наклон проекта у тебя на report'инг, поэтому кэши коллекций-сущностей это не совсем то (параметров). автора посоветуйте, пожалуйста, БД/движок для индексации _имён_, размеров, дат (но не содержимого файлов) файлов с возможностью поиска по %query%. В данный момент используется mysql, но при базе в пару гигов скорость сильно падает (с 2-3 секунд до десятка). Пару раз пробовал lucene, но на паре млн документов на %query% запросах его скорость не выше mysql'я Удачи! Спасибо, понял... Деляю вывод, что эта технология больше подходит как раз для кнопки "Поиск", а не для создания индекса "быстрого реагирования". Petro, Кэши коллекций-сущностей как раз и нужны, дабы не нагружать отображением ВЭБ-интерфейса основную базу) Kachalov-=*ShamaN*=-Если делать в лоб, то при достаточно большом числе конкурентных запросов нагрузка на сервер значительно возрастает (у БД есть ещё и другие задачи). Кто-нибудь знает, как оптимизировать данную конструкцию, и какие решения этой проблемы используются на HighLoad-проектах? - у БД есть собственный кэш запросов, при достаточном размере этого кэша, проблем с производительностью в описанной Вами задаче не возникает (делал аналогичные поиски по КЛАДР и по списку станций ЖД - проблем с производительностью в этом месте не было) А поиск был именно по маске типа like '%ФРАЗА%'? В таком раскладе план запроса - TableScan, что не есть зер гут. + не все справочники могут влезть в горячий кэш, да и не хотелось бы драгоценную память SQL-сервера на 80% использовать для красивого Комбобокса, жирно ему будет... Я выше в посте специально указал, что на сервере и так много чего висит... Диез-=*ShamaN*=- Ситуация такая, есть готовая база и есть система аналитических отчётов, которая написана в ГУЕ. Её надо портировать на ВЭБ. ... А что за ГУЙ? Самописный или какой-то продукт? Гуй самописный, много программ, база одна... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 09:40 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
тут главное не перемудрить, что в вэбе очень часто. Узкий канал - слабое место. Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить. Попробуйте! Почему на десктопе нет кэшей? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 12:56 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123тут главное не перемудрить, что в вэбе очень часто. Узкий канал - слабое место. Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить. Попробуйте! Почему на десктопе нет кэшей? Попробовал:) Залил реальных данных в облегчённую таблицу": 25000 строк - 2 столбца BIGINT и VARCHAR(255), FF-100 Время поиска Oracle и PG одинаково (TableScan) - 15-16ms без фетча Время поиска по GIN-индексу PG ~300ms без фетча (зря парился, lucene скорее всего такие же результаты выдаст) Ну вот, вскрытие показало, что больной умер от вскрытия... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 16:11 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123тут главное не перемудрить, что в вэбе очень часто. Узкий канал - слабое место. Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить. Попробуйте! Почему на десктопе нет кэшей? В смысле на десктопе? не понял вопроса.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 16:13 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-В смысле на десктопе? не понял вопроса.. в том смысле, что у меня даже при полной загрузке справочника в 5000 строк каждой формой на каждом клиенте без оптимизации - пользователи не замечают неудобств. (внутренняя сеть - клиент-сервер - Delphi). Сервер - справляется. (пока не экономлю на спичках) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 16:36 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123тут главное не перемудрить, что в вэбе очень часто. Узкий канал - слабое место. Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить. Вот тут я позволю себе высказать сомнения :) Если вы один сидите на сайте - то разумеется, узким местом будет сеть. Но если 1000 одновременных пользователей раз в 5 секунд делают http-запрос, имеем 200 запросов в секунду. Без кэширования это будет 200 запросов в секунду к БД, причем из десятков параллельных коннектов, за счет пула. Petro123 Почему на десктопе нет кэшей? Любой датасет - это кэш. Вы ведь не загружаете все справочники при каждом действии пользователя, правильно? Вы держите их в локальном кэше приложения. -=*ShamaN*=- .... Ну вот, вскрытие показало, что больной умер от вскрытия... Если хотите реальных цифр - запускайте в параллельных потоках - например 20 потоков (коннектов) и в каждом 10 запросов в секунду, с разными параметрами, естественно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 19:14 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-А поиск был именно по маске типа like '%ФРАЗА%'? - да, база MySQL, размеры кэшей/буферов средненькие (скорее маленькие), задача именно поиск улицы по КЛАДР (аналогично решался поиск Ж/Д станции по списку станций) - проблем с производительностью тут не возникало ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 23:31 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Диез, что значит - сидите на сайте? При одинаковом количестве пользователей, нагрузка на БД в вэб меньше чем в десктопе. Если в локали СУБД "держит", то в вэб сервер жалеть вообще нет смысла, даже с AJAXом ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2010, 00:46 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Petro123Диез, что значит - сидите на сайте? При одинаковом количестве пользователей, нагрузка на БД в вэб меньше чем в десктопе. Тоже, кстати, не очевидно.. Если пользователь запускает поиск записи в БД, то на SQL сервер уйдут совершенно одинаковые sql-запросы как от десктоп-, так и от веб-приложения (ну, если напрямую, без кэшей). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2010, 12:57 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
В вэбе нагрузка немного меньше в том случае, когда есть отсечка данных аля "limit X offset X" для PG и "ROWNUM between Y and Y" для Oraclа и выборка идёт чётко по индексам (и то, это экономит память и процессор только при отсутсвии "order by..." в запросе)... Сервер понимает эти инструкции и выполняет "Поднятие" данных с винта заранее зная (из индекса), какие окна стораджа ему нужны. Пока что думаю, как снизить время ответа сервера, тогда, следуя логике, число конкурентных должно понизиться. Производительность при параллельных запросах... вот что не тестил, то действительно не тестил... Проведу обязательно эти тесты без фетча, результаты опубликую. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2010, 18:09 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Источником запросов, напомню, являются нажатия пользователем кнопок на клавиатуре... Работать оно будет так: пользователь нажал кнопку А, таймер начал отсчитывать 500мс, если пользователь нажал ещё одну кнопку, таймер сбросился и начал опять отсчитывать 500с. Как только 500с прошли производится AJAX запрос и генерация контента для слоя (DIV) выпадающего списка. т.е., гипотетически от одного пользователя максимальная частота запросов может составлять 2 запроса в секунду, если пренебречь затратами на доставку Запроса-Ответа, парсинг JSON, подготовку SQL, фетч и генерацией HTML. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2010, 18:21 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-Работать оно будет так: - есть готовые скрипты, например плагин (не помню названия, если надо вспомню) к jQuery ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2010, 19:33 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
Kachalov-=*ShamaN*=-Работать оно будет так: - есть готовые скрипты, например плагин (не помню названия, если надо вспомню) к jQuery Спасибо за помощь. Сегодня уже успел посмотреть сюда . Но у меня вопрос больше не по клиентской части, а как сэкономить ресурсы на стороне сервера при частых запросах, инициируемых набором фразы на клавиатуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2010, 13:01 |
|
Быстрая выборка по маске
|
|||
---|---|---|---|
#18+
-=*ShamaN*=-Но у меня вопрос больше не по клиентской части, а как сэкономить ресурсы на стороне сервера при частых запросах, инициируемых набором фразы на клавиатуре. - уже писал Вам выше, что проблема надуманная, нет проблемы с производительностью и ресурсами на описанной Вами задаче (поиск городов, улиц, станций), так как список по меркам БД не большой. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2010, 11:18 |
|
|
start [/forum/topic.php?fid=33&fpage=32&tid=1548293]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
3ms |
others: | 301ms |
total: | 452ms |
0 / 0 |