Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Быстрая выборка по маске / 25 сообщений из 26, страница 1 из 2
13.05.2010, 14:53
    #36625825
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Вопрос такой, есть БД и в ней справочник улиц.
Приложение на WEB содержит выпадающий список на AJAX, в котором необходимо по первым буквам организовать поиск по маске %строка% в базе и обновление выпадающего списка. Т.е. поиск осуществляется не по началу, а по вхождению набранной пользователем строки.

Если делать в лоб, то при достаточно большом числе конкурентных запросов нагрузка на сервер значительно возрастает (у БД есть ещё и другие задачи). Кто-нибудь знает, как оптимизировать данную конструкцию, и какие решения этой проблемы используются на HighLoad-проектах?
...
Рейтинг: 0 / 0
13.05.2010, 15:19
    #36625904
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-,

Кэшируйте справочник улиц в памяти на стороне Web-сервера. И синхронизируйте его с БД, например, по таймеру.
...
Рейтинг: 0 / 0
13.05.2010, 15:36
    #36625946
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-,
вэб-приложения (в отличии от десктопа) на голом ЯП не пишут.
Поэтому кэш, например в хибернейте присутствует.
Посмотрите что у вас над БД сидит.
...
Рейтинг: 0 / 0
13.05.2010, 15:47
    #36625985
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123,
На текущий момент ничего нет, я проектированием занимаюсь...
вот задумался на тему выбора типа селекторов: ComboBox на AJAX или отдельная форма с полем ввода кнопкой "Найти"... вот думаю, как комбо-бокс будет работать и прикидываю ресурсы и нагрузки.

С кэшем понятно... т.е. без дополнительного ресурса не обойтись, ок)
А что может выступать в качестве такого кэша? Есть решения?
...
Рейтинг: 0 / 0
13.05.2010, 15:48
    #36625988
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Над ораклом будет или Hiber или TopLink
...
Рейтинг: 0 / 0
13.05.2010, 15:50
    #36626000
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Но вообще, лучше, чтоб "Кэш-машина" лезла в базу сама по соображениям производительности...
...
Рейтинг: 0 / 0
13.05.2010, 16:21
    #36626106
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-
На текущий момент ничего нет, я проектированием занимаюсь...

проект ВЭБ с нуля вообще дело неблагодарное.
От наличия и квалификации плясать надо.

Я просто искал себе инфу для нового ЯП (java) с нуля, поэтому есть такая инфа:

авторHibernate по определению медленее ( iBATIS ).
Да бинд с испоьлзованием JDBC будет выполнен быстрее. (так как хибернатат использует прокси и рефлексию)
Транзакции можно использовать и без EJB ( ), тот же hibernate прекрастно справляется, да и на JDBC проблем с транзакциями нет.

Для чего может понадобится EJB? ну для масштабирования и кэширования.
Хотя и кэширование можно решить при помощи различных доп фреймворков, тот же JBoss Cache

Чем реально может помочь Hibernate, EJB так это связанные объекты и коллекции.
т.к. у меня от оракла идёт (БД уже ГОТОВА), то хибернейт будет хуже iBATIS.
Во втором я сам полностью управляю всеми запросами (полный контроль)
...
Рейтинг: 0 / 0
13.05.2010, 16:37
    #36626162
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123,
Ситуация такая, есть готовая база и есть система аналитических отчётов, которая написана в ГУЕ.
Её надо портировать на ВЭБ.
В качестве генератора отчётов выбран Jasper, репозиторий отчётов JasperServer, у которого есть открытое API. Чтобы сгенерить отчёт, нужно ввести входные параметры и дёрнуть JasperServ, чтобы тот выдал печатную форму в указанном формате или в режиме пейджинга запрашивать нужную страницу для отображения в HTML.
Я сейчас нахожусь на стадии раздумий по поводу ввода параметров. Цель примерно нарисовал такую, создать библиотеку тэгов, в которой были бы прикладные селекторы-валидаторы различных справочников и объектов существующей базы.

Работа комбо-бокса очень привлекает своей интерактивностью, сразу видно что есть ещё в БД рядом. Но для этого нужен индекс, чтобы не "бомбить" БД запросами.
Вот lucene нашёл... наверно он меня спасёт...
...
Рейтинг: 0 / 0
13.05.2010, 17:11
    #36626251
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-
Ситуация такая, есть готовая база и есть система аналитических отчётов, которая написана в ГУЕ.
Её надо портировать на ВЭБ.
...


А что за ГУЙ? Самописный или какой-то продукт?

ЗЫ. Писал подобную штуку, но под BIRT reporting. Жесть... :)
...
Рейтинг: 0 / 0
13.05.2010, 17:23
    #36626290
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-,
если данных реально много, наверно ты прав - средства самой БД могут не хватить.
И наклон проекта у тебя на report'инг, поэтому кэши коллекций-сущностей это не совсем то (параметров).

автора посоветуйте, пожалуйста, БД/движок для индексации _имён_, размеров, дат (но не содержимого файлов) файлов с возможностью поиска по %query%. В данный момент используется mysql, но при базе в пару гигов скорость сильно падает (с 2-3 секунд до десятка). Пару раз пробовал lucene, но на паре млн документов на %query% запросах его скорость не выше mysql'я
Удачи!
...
Рейтинг: 0 / 0
13.05.2010, 17:58
    #36626406
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-Если делать в лоб, то при достаточно большом числе конкурентных запросов нагрузка на сервер значительно возрастает (у БД есть ещё и другие задачи). Кто-нибудь знает, как оптимизировать данную конструкцию, и какие решения этой проблемы используются на HighLoad-проектах?
- у БД есть собственный кэш запросов, при достаточном размере этого кэша, проблем с производительностью в описанной Вами задаче не возникает (делал аналогичные поиски по КЛАДР и по списку станций ЖД - проблем с производительностью в этом месте не было)
...
Рейтинг: 0 / 0
14.05.2010, 09:40
    #36627268
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123-=*ShamaN*=-,
если данных реально много, наверно ты прав - средства самой БД могут не хватить.
И наклон проекта у тебя на report'инг, поэтому кэши коллекций-сущностей это не совсем то (параметров).

автора посоветуйте, пожалуйста, БД/движок для индексации _имён_, размеров, дат (но не содержимого файлов) файлов с возможностью поиска по %query%. В данный момент используется mysql, но при базе в пару гигов скорость сильно падает (с 2-3 секунд до десятка). Пару раз пробовал lucene, но на паре млн документов на %query% запросах его скорость не выше mysql'я
Удачи!

Спасибо, понял...
Деляю вывод, что эта технология больше подходит как раз для кнопки "Поиск", а не для создания индекса "быстрого реагирования".
Petro, Кэши коллекций-сущностей как раз и нужны, дабы не нагружать отображением ВЭБ-интерфейса основную базу)


Kachalov-=*ShamaN*=-Если делать в лоб, то при достаточно большом числе конкурентных запросов нагрузка на сервер значительно возрастает (у БД есть ещё и другие задачи). Кто-нибудь знает, как оптимизировать данную конструкцию, и какие решения этой проблемы используются на HighLoad-проектах?
- у БД есть собственный кэш запросов, при достаточном размере этого кэша, проблем с производительностью в описанной Вами задаче не возникает (делал аналогичные поиски по КЛАДР и по списку станций ЖД - проблем с производительностью в этом месте не было)

А поиск был именно по маске типа like '%ФРАЗА%'? В таком раскладе план запроса - TableScan, что не есть зер гут. + не все справочники могут влезть в горячий кэш, да и не хотелось бы драгоценную память SQL-сервера на 80% использовать для красивого Комбобокса, жирно ему будет... Я выше в посте специально указал, что на сервере и так много чего висит...


Диез-=*ShamaN*=-
Ситуация такая, есть готовая база и есть система аналитических отчётов, которая написана в ГУЕ.
Её надо портировать на ВЭБ.
...


А что за ГУЙ? Самописный или какой-то продукт?


Гуй самописный, много программ, база одна...
...
Рейтинг: 0 / 0
14.05.2010, 12:56
    #36627896
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
тут главное не перемудрить, что в вэбе очень часто.
Узкий канал - слабое место.
Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить.
Попробуйте!
Почему на десктопе нет кэшей?
...
Рейтинг: 0 / 0
14.05.2010, 16:11
    #36628721
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123тут главное не перемудрить, что в вэбе очень часто.
Узкий канал - слабое место.
Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить.
Попробуйте!
Почему на десктопе нет кэшей?

Попробовал:)
Залил реальных данных в облегчённую таблицу": 25000 строк - 2 столбца BIGINT и VARCHAR(255), FF-100
Время поиска Oracle и PG одинаково (TableScan) - 15-16ms без фетча
Время поиска по GIN-индексу PG ~300ms без фетча (зря парился, lucene скорее всего такие же результаты выдаст)

Ну вот, вскрытие показало, что больной умер от вскрытия...
...
Рейтинг: 0 / 0
14.05.2010, 16:13
    #36628732
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123тут главное не перемудрить, что в вэбе очень часто.
Узкий канал - слабое место.
Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить.
Попробуйте!
Почему на десктопе нет кэшей?

В смысле на десктопе? не понял вопроса..
...
Рейтинг: 0 / 0
14.05.2010, 16:36
    #36628833
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-В смысле на десктопе? не понял вопроса..
в том смысле, что у меня даже при полной загрузке справочника в 5000 строк каждой формой на каждом клиенте без оптимизации - пользователи не замечают неудобств.
(внутренняя сеть - клиент-сервер - Delphi). Сервер - справляется.
(пока не экономлю на спичках)
...
Рейтинг: 0 / 0
14.05.2010, 19:14
    #36629282
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123тут главное не перемудрить, что в вэбе очень часто.
Узкий канал - слабое место.
Пока по каналу дойдут события мышки или открытие комба бокса - СУБД 1000 раз успеет ответить.


Вот тут я позволю себе высказать сомнения :) Если вы один сидите на сайте - то разумеется, узким местом будет сеть. Но если 1000 одновременных пользователей раз в 5 секунд делают http-запрос, имеем 200 запросов в секунду. Без кэширования это будет 200 запросов в секунду к БД, причем из десятков параллельных коннектов, за счет пула.
Petro123

Почему на десктопе нет кэшей?

Любой датасет - это кэш. Вы ведь не загружаете все справочники при каждом действии пользователя, правильно? Вы держите их в локальном кэше приложения.

-=*ShamaN*=-
....

Ну вот, вскрытие показало, что больной умер от вскрытия...

Если хотите реальных цифр - запускайте в параллельных потоках - например 20 потоков (коннектов) и в каждом 10 запросов в секунду, с разными параметрами, естественно.
...
Рейтинг: 0 / 0
14.05.2010, 23:31
    #36629533
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-А поиск был именно по маске типа like '%ФРАЗА%'?
- да, база MySQL, размеры кэшей/буферов средненькие (скорее маленькие), задача именно поиск улицы по КЛАДР (аналогично решался поиск Ж/Д станции по списку станций) - проблем с производительностью тут не возникало
...
Рейтинг: 0 / 0
15.05.2010, 00:46
    #36629583
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Диез,
что значит - сидите на сайте?
При одинаковом количестве пользователей, нагрузка на БД в вэб меньше чем в десктопе.
Если в локали СУБД "держит", то в вэб сервер жалеть вообще нет смысла, даже с AJAXом
...
Рейтинг: 0 / 0
15.05.2010, 12:57
    #36629843
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Petro123Диез,
что значит - сидите на сайте?
При одинаковом количестве пользователей, нагрузка на БД в вэб меньше чем в десктопе.

Тоже, кстати, не очевидно..
Если пользователь запускает поиск записи в БД, то на SQL сервер уйдут совершенно одинаковые sql-запросы как от десктоп-, так и от веб-приложения (ну, если напрямую, без кэшей).
...
Рейтинг: 0 / 0
16.05.2010, 18:09
    #36630783
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
В вэбе нагрузка немного меньше в том случае, когда есть отсечка данных аля "limit X offset X" для PG и "ROWNUM between Y and Y" для Oraclа и выборка идёт чётко по индексам (и то, это экономит память и процессор только при отсутсвии "order by..." в запросе)... Сервер понимает эти инструкции и выполняет "Поднятие" данных с винта заранее зная (из индекса), какие окна стораджа ему нужны.

Пока что думаю, как снизить время ответа сервера, тогда, следуя логике, число конкурентных должно понизиться. Производительность при параллельных запросах... вот что не тестил, то действительно не тестил... Проведу обязательно эти тесты без фетча, результаты опубликую.
...
Рейтинг: 0 / 0
16.05.2010, 18:21
    #36630796
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Источником запросов, напомню, являются нажатия пользователем кнопок на клавиатуре...
Работать оно будет так:
пользователь нажал кнопку А, таймер начал отсчитывать 500мс, если пользователь нажал ещё одну кнопку, таймер сбросился и начал опять отсчитывать 500с. Как только 500с прошли производится AJAX запрос и генерация контента для слоя (DIV) выпадающего списка.
т.е., гипотетически от одного пользователя максимальная частота запросов может составлять 2 запроса в секунду, если пренебречь затратами на доставку Запроса-Ответа, парсинг JSON, подготовку SQL, фетч и генерацией HTML.
...
Рейтинг: 0 / 0
16.05.2010, 19:33
    #36630860
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-Работать оно будет так:
- есть готовые скрипты, например плагин (не помню названия, если надо вспомню) к jQuery
...
Рейтинг: 0 / 0
17.05.2010, 13:01
    #36631873
-=*ShamaN*=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
Kachalov-=*ShamaN*=-Работать оно будет так:
- есть готовые скрипты, например плагин (не помню названия, если надо вспомню) к jQuery

Спасибо за помощь. Сегодня уже успел посмотреть сюда . Но у меня вопрос больше не по клиентской части, а как сэкономить ресурсы на стороне сервера при частых запросах, инициируемых набором фразы на клавиатуре.
...
Рейтинг: 0 / 0
18.05.2010, 11:18
    #36633627
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая выборка по маске
-=*ShamaN*=-Но у меня вопрос больше не по клиентской части, а как сэкономить ресурсы на стороне сервера при частых запросах, инициируемых набором фразы на клавиатуре.
- уже писал Вам выше, что проблема надуманная, нет проблемы с производительностью и ресурсами на описанной Вами задаче (поиск городов, улиц, станций), так как список по меркам БД не большой.
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Быстрая выборка по маске / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]