Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Скажите, хочу понять как работает быстрый поиск в форме на сайтах, вот когда начинаешь вводить символы, и тотчас же ниже подгружаются какие-то результаты. Получается, человек на сайте вводит первый символ, и сервер отправляет запрос к БД? Пользователь хочет найти некоторую улицу (скажем, Ленина), вбивает посимвольно в текстовое поле: Л.. тут запрос идёт к БД: Код: sql 1. вторую букву нажимает: Ле.. Код: sql 1. третью букву нажимает: Лен.. Код: sql 1. и т.д., пока не получит необходимый результат. И вот вопрос: это нормально по каждому чиху (читай, по каждой букве) делать селект к базе? Это именно так делается в современном мире? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2019, 23:41 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
palladin600, Нет, не нормально. Обычно делают поиск с момента ввода n букв + кэширование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 01:03 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
palladin600, В поисковиках SQL вообще не используется. Там другая тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 02:17 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
palladin600И вот вопрос: это нормально по каждому чиху (читай, по каждой букве) делать селект к базе? Это именно так делается в современном мире?Тут есть два разных момента. 1. Делают ли селект к базе - зависит от системы, но да, часто делают, хотя, конечно, есть и другие варианты (скажем, хранение списков в виде массивов на клиенте или сервере приложений). 2. делают ли запрос при вводе каждой буквы - нет, это всегда делается асинхронно, ввод символов не прерывается, ожидая, пока сервер не ответил, а новый запрос уже будет формироваться, исходя из введённых к этому моменту символов (т.е, например, like '%Ле%' можно будет пропустить) Это очень похоже на обработку некоторых событий в Windows API, когда некоторые типы событий сделаны "поглощающими", т.е. в очереди никогда не может быть более одного события данного типа. Например, событие "перемещение мыши" не генерится на координаты каждого пикселя, а генерится на те координаты, которые есть на момент завершения обработки предыдущего события от мыши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 02:54 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Relic HunterВ поисковиках SQL вообще не используется. Там другая тема.Разве от синтаксиса принципы меняются? Там тоже есть база, и при вводе символов в браузере последний отправляет запросы на сервер, а сервер шлёт запросы к БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 02:56 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Нет, конечно. Так-то, эта тема к сиквелу никаким боком. Обычно делают "throttling" на клиенте - отправляют запрос к серверу только если строка поиска не менялась в течении определенного промежутка времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 13:09 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 20:16 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
palladin600, Я б сделал так: если походящих записей мало, то вытаскиваю из базы всё, что начинается на заданную букву и передаю на клиент. А там уже фильтрую. Можно ещё подкачку в фоновом режиме сделать. А если много записей, то да, будет медленно работать, но так никуда от этого и не уйдёшь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 21:09 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
А разве это не работа сервиса кэшировать выборки? Если использоваться ORM с кэшем? Вообще нужно ещё делать вероятностный поиск - закладывать возможность и глубину опечаток... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 21:15 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Андрей ЮниорА разве это не работа сервиса кэшировать выборки? Если использоваться ORM с кэшем?Да и без ORM нужно кэшировать, при чём тут ORM? Просто это уже детали реализации, и это не всегда можно сделать, не усложняя систему (например, может понадобится рефрешить кэш на всех компах-клиентах, при изменениях). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 21:25 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
alexeyvgДа и без ORM нужно кэшировать, при чём тут ORM? Я не понимаю, причём тут БД для реализации подсказок поиска. Может я думаю о подсказках уровня Яндекс/Гугла/крупного интернет-магазина, а тут надо всего лишь подсказать заполнение отдельного поля в форме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 21:52 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Андрей ЮниорЯ не понимаю, причём тут БД для реализации подсказок поиска.При том, что обращение к БД может быть единственным вариантом реализации функционала подсказок. Андрей Юниора тут надо всего лишь подсказать заполнение отдельного поля в форме?Может, и так, но мы же не знаем задачи и условий. И вот, рассказываем ТС про разные варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 22:14 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
alexeyvgПри том, что обращение к БД может быть единственным вариантом реализации функционала подсказок. БД - да. Но РСУБД - нет. РСУБД для крупного поисковика вряд ли вообще теоретически возможна. Поэтому и вопрос... У майкрософта на ажуре вроде какая-то технология поиска была. Вроде как могла искать даже по pdf и docx файлам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2019, 22:26 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Андрей ЮниорalexeyvgПри том, что обращение к БД может быть единственным вариантом реализации функционала подсказок. БД - да. Но РСУБД - нет. РСУБД для крупного поисковика вряд ли вообще теоретически возможна.Есть же промежуточные варианты, между поисковиком и базой парикмахерской. Скажем, какая то база компании - контрагенты, или сотрудники - загружать сотни тысяч записей на клиента вроде бы не хочется, почему бы не искать в базе? Андрей ЮниорПоэтому и вопрос... У майкрософта на ажуре вроде какая-то технология поиска была. Вроде как могла искать даже по pdf и docx файлам.И без ажура было. Я только не понимаю, почему искать в СУБД можно, но только если это не РСУБД? В РСУБД поиск будет дешевле и быстрее, чем в корявой базе полнотекстового индекса (из Ажура или ещё откуда то). Всё таки ядра РСУБД оттачивались десятилетиями, и до сих пор их не забросили. Андрей ЮниорПоэтому и вопрос... У майкрософта на ажуре вроде какая-то технология поиска была.И ещё, в контексте задачи ТС никакая индексация не поможет, т.е. все без исключения "технологии поиска" конкретно в этой задачи неприменимы. Точнее, поможет специальная самодельная индексация, которую тут обсуждали на форуме. А все стандартные не умеют индексировать с середины слова (или есть такие, которые умеют?) То есть, в итоге, остаются варианты: 1. искать в СУБД, сделав свою индексацию, позволяющую искать фрагменты текста (неважно, в какой СУБД - можно и в РСУБД MSSQL) 2. сканировать таблицу в СУБД (неважно, какой - можно и в РСУБД MSSQL) 3. сканировать предварительно загруженные в память данные (массив, список и т.д.) на клиенте/сервере приложений. 4. ещё есть экзотический вариант - эмулировать индекс в словаре в памяти (ценой увеличения расхода памяти умножением на среднюю длину строки пополам), но это имеет смысл для очень больших нагрузок, когда нормальной скорости сканирования памяти в десятки гб/сек окажется недостаточно. С соответствующими плюсами и минусами каждого варианта, и с наворотами типа кэширования для вариантов 1 и 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 00:03 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Вообще, конечно, интересный технический момент. Тоже всегда было интересно, как такой упреждающий поиск по части ввода под капотом работает. наверное, - нужно изолировать окружение - фронт и бэк и, начиная вводить в поля формы, которые обладают такой "магией" мгновенного поиска-ответа - постоянно мониторить в открытом приложении Профайлера, что в итоге-то шлется на РСУБД и в каком виде. Пропускаются там лайки или нет, и какой в итоге код в базу летит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 16:21 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
alexeyvgСкажем, какая то база компании - контрагенты, или сотрудники - загружать сотни тысяч записей на клиента вроде бы не хочется, почему бы не искать в базе? Так речь в исходном посте про сайты, а там, если не ошибаюсь, эти данные кэшируются на сервере. В общем, топик наверное нужно было создать в другом подфоруме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 18:05 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
alexeyvgТочнее, поможет специальная самодельная индексация, которую тут обсуждали на форуме. https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/12921.full-text.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 19:28 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
iapalexeyvgТочнее, поможет специальная самодельная индексация, которую тут обсуждали на форуме. https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/12921.full-text.aspx О, даже в технет-документацию выложили :-) Для данного кейса случае даже упрощается, не нужно индексировать слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 19:32 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
alexeyvgО, даже в технет-документацию выложили :-) Какой-то странноватый кейс - искать по любому месту внутри слова. А по началу слова самый обычный фулл-текст сёрч нормально ищет. Но, вообще-то, по-моему лучше сразу двигать в сторону lucene/ellastic или чего-нибудь подобного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 22:39 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
fkthatalexeyvgО, даже в технет-документацию выложили :-) Какой-то странноватый кейс - искать по любому месту внутри слова. А по началу слова самый обычный фулл-текст сёрч нормально ищет.Пользователям это как раз не странно, это более естественно, чем искать по началу слова, и тем более по точному совпадению. fkthatНо, вообще-то, по-моему лучше сразу двигать в сторону lucene/ellastic или чего-нибудь подобного.От конкретной задачи зависит. Построить индекс на поле будет проще, чем использовать поисковые енжини, и искать будет намного быстрее. Для некоторых сценариев, например, поиск по номеру документа, или по названию, индекс предпочтительней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2019, 23:07 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Relic Hunterpalladin600, В поисковиках SQL вообще не используется. Там другая тема. жесткое заявление. SQL совсем не используется ни в каких поисковиках в этом мире! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2019, 10:42 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
Дума, что всё, что мы пытаемся искать уже искали до нас. И где-то это хранится и проиндексировано. Соответственно никакого последовательного select тут для быстрых подсказок не нужно Достаточно более щадящих методов перемещения по отсортированной базе.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2019, 11:31 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
palladin600, инкрементный поиск делают с небольшим ожиданием ввода следующего символа, так экономятся обращения к серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2019, 17:19 |
|
||
|
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
|
|||
|---|---|---|---|
|
#18+
982183 Дума, что всё, что мы пытаемся искать уже искали до нас. И где-то это хранится и проиндексировано. Соответственно никакого последовательного select тут для быстрых подсказок не нужно Достаточно более щадящих методов перемещения по отсортированной базе .. что такое "отсортированная база"? и "перемещение" по ней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2019, 18:16 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=82&tid=1687010]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 359ms |

| 0 / 0 |
