|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
Есть товар, у которого много характеристик. Необходимо вывести список товаров соответствующих заданным характеристикам. Как лучше сделать : 1.Сформировать массив из условий и потом сформировать один сложный и большой SQL запрос, и за раз вывести. Думаю, что будет очень долго, если пользователь установит много критериев. Конечно можно ограничить пользователя по количеству устанавливаемых критериев поиска, но пока бы не хотелось. 2.Сделать предварительные выборки ID-товаров по каждому заданному критерию и сохранить всё в DataStore. Сгруппировать по ID (чтобы не было повторений) и сформировать конечный SQL запрос. Думаю, что будет быстро, даже если пользователь установит много критериев, но может не хватить длины String 3.Как то иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2011, 12:07 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
AISЕсть товар, у которого много характеристик. Необходимо вывести список товаров соответствующих заданным характеристикам. Как лучше сделать : 1.Сформировать массив из условий и потом сформировать один сложный и большой SQL запрос, и за раз вывести. Думаю, что будет очень долго, если пользователь установит много критериев. Конечно можно ограничить пользователя по количеству устанавливаемых критериев поиска, но пока бы не хотелось. 2.Сделать предварительные выборки ID-товаров по каждому заданному критерию и сохранить всё в DataStore. Сгруппировать по ID (чтобы не было повторений) и сформировать конечный SQL запрос. Думаю, что будет быстро, даже если пользователь установит много критериев, но может не хватить длины String Если правильно реализована схема хранения данных, то SQL сервер гораздо эффективнее обрабатает запрос, чем всякие извращения с DataStore. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2011, 14:29 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
Локшин МаркЕсли правильно реализована схема хранения данных, то SQL сервер гораздо эффективнее обрабатает запрос, чем всякие извращения с DataStore. Например, только в отношении "Названия" товара пользователь может "накалядовать" с десяток правил поиска, типа "начинается с...", "содержит то-то", "заканчивается на..." и т.д. И других характеристик у товара ещё порядка двадцати. И есть отношения "один-ко многим", например - цвет. Не очень хочется ограничевать пользователя в его мудренных поисковых желаниях, но при этом надо чтобы это всё работало быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2011, 17:16 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
AISЛокшин МаркЕсли правильно реализована схема хранения данных, то SQL сервер гораздо эффективнее обрабатает запрос, чем всякие извращения с DataStore. Например, только в отношении "Названия" товара пользователь может "накалядовать" с десяток правил поиска, типа "начинается с...", "содержит то-то", "заканчивается на..." и т.д. И других характеристик у товара ещё порядка двадцати. И есть отношения "один-ко многим", например - цвет. Не очень хочется ограничевать пользователя в его мудренных поисковых желаниях, но при этом надо чтобы это всё работало быстро. Если правильно реализована схема хранения данных, то SQL сервер гораздо эффективнее обрабатает запрос, чем всякие извращения с DataStore. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2011, 17:59 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
Локшин МаркAISпропущено... Например, только в отношении "Названия" товара пользователь может "накалядовать" с десяток правил поиска, типа "начинается с...", "содержит то-то", "заканчивается на..." и т.д. И других характеристик у товара ещё порядка двадцати. И есть отношения "один-ко многим", например - цвет. Не очень хочется ограничевать пользователя в его мудренных поисковых желаниях, но при этом надо чтобы это всё работало быстро. Если правильно реализована схема хранения данных, то SQL сервер гораздо эффективнее обрабатает запрос, чем всякие извращения с DataStore. Теперь услышал :)) А это мнение, основанный на личном опыте для таких ситуаций, либо убежденность, что кроме идеальной "схемы хранения данных" ничто более не влияет на длительность обработки запроса? либо это влияние принебрижительно мало? Легенда: Пришел как-то "толстый" работодатель и говорит: а подбери-ка мне мил человел "секретаря-референта", да чтобы роста "...", ноги от "...", говорила по "...", с образованием не ниже "...", семейное положение "...", детей "...", судимости "...", и т.д. и т.п. И ответил ему "опытный" работник: вот только как полчаса назад последнего трудоустроили, приходите в конце месяца, может что-то и "найдется". Мораль: "Не важно что ты сказал. Ведь не важно ЧТО, а КАК." (C) Елена Ваенга. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2011, 22:41 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
AISЛокшин Маркпропущено... Если правильно реализована схема хранения данных, то SQL сервер гораздо эффективнее обрабатает запрос, чем всякие извращения с DataStore. Теперь услышал :)) А это мнение, основанный на личном опыте для таких ситуаций, либо убежденность, что кроме идеальной "схемы хранения данных" ничто более не влияет на длительность обработки запроса? либо это влияние принебрижительно мало? Очень много критериев, это сколько 10, 20? В чем проблема будет с таким запросом по табличке? Нормальные сервера могут производить автоматическую параметризацию запросов, кэшировать запросы (разобранные планы исполнения), использовать индексы, применять технику пересечения индексов и др. Вы все это собрались реализовать при поиске в DataStore? Почему это должно быть быстрее? Ну я уже не говорю о такой "мелоче", как консистентность данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 00:07 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
Локшин Марк , практически убедили. P.S. А зачем использовать DataStore? Для того чтобы разбить общее время выборки (если оно даже теоретически вдруг будет очень большим) на количество установленных пользователем критериев. Т.е. идея предварительной обработки данных. Пока пользователь вводит 2-ой критерий, 1-ый уже в фоне отработал и сохранил в DataStore нужные ID. И т.д. А когда пользователь в конце нажимает кнопку "поиск", то запрос по итоговому массиву ID-товара отработается моментально. И этот метод не зависит от числа введенных пользователем критериев, и будет работать очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 12:22 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
AISP.S. А зачем использовать DataStore? Для того чтобы разбить общее время выборки (если оно даже теоретически вдруг будет очень большим) на количество установленных пользователем критериев. Т.е. идея предварительной обработки данных. Пока пользователь вводит 2-ой критерий, 1-ый уже в фоне отработал и сохранил в DataStore нужные ID. И т.д. А когда пользователь в конце нажимает кнопку "поиск", то запрос по итоговому массиву ID-товара отработается моментально. И этот метод не зависит от числа введенных пользователем критериев, и будет работать очень быстро. А если каждый критерий уменьшает выборку например в 2 раза? 10 критериев могут уменьшить объем выборки до 1024 раз. Если, например, список номенклатур 50000 наименований, то в DataStore нужно оперировать с 10 выборками по 25000 записей, а в случае одновременного применения критериев - одна выборка с 50 записями. В реальности может, конечно, отличаться количество записей, но общий смысл я думаю понятен. Есть вариант когда применим первый случай - это когда тысячи пользоватей сидят и постоянно ищут товары по крайне редко изменяющемуся справочнику номенклатур. Тогда для того, чтобы разгрузить сервер, может и следует закачивать справочник на клиента и искать там. Но это сильно экзотический случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 14:41 |
|
Создание мастера поиска
|
|||
---|---|---|---|
#18+
Локшин Марк , да, Вы правы, незачем мудрить. При первом же "ну-у очень грубом" критерии, выборка может составить до (N-1), где N - количество наименований товара, и DS просто захлебнется. Про это я как то не подумал. Спасибо за комментарии и совет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 16:12 |
|
|
start [/forum/topic.php?fid=15&msg=37141348&tid=1335780]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
15ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 432ms |
0 / 0 |