Можно ли осуществить быстрый поиск по 20-50 тысячам полей практически мгновенно?

Каковы оптимальные подходы для реализации сервиса по поиску в базе данных с 20 000 записями: использовать стандартный метод через Ajax для пошагового возврата количества найденных соответствий с сервера или загружать все значения в массив JavaScript и затем выполнять поиск с помощью различных методов на клиенте? Какие методы вы используете и какие советы можете дать для повышения производительности, учитывая наличие небольшой задержки?
  • 26 февраля 2024 г. 2:28
Ответы на вопрос 2
Для осуществления быстрого поиска по 20-50 тысячам полей практически мгновенно, оптимальным подходом будет использование специализированных инструментов и методов, таких как индексирование данных, кэширование результатов поиска, асинхронный поиск.

Для реализации сервиса по поиску в базе данных с 20 000 записями рекомендуется использовать комбинацию методов как на серверной, так и на клиентской стороне. Например, можно загрузить все данные на клиентскую сторону один раз и затем выполнять поиск на стороне клиента с помощью JavaScript. При этом можно использовать различные методы для оптимизации поиска, такие как использование индексированных структур данных (например, деревья поиска), фильтрация данных до и после загрузки на клиентскую сторону, использование асинхронных запросов для обновления результатов поиска без перезагрузки страницы.

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

Итак, для повышения производительности поиска в базе данных с небольшой задержкой, рекомендуется использовать комбинацию методов как на серверной, так и на клиентской стороне, а также следовать советам по оптимизации запросов к базе данных, использованию кэширования и другим методам оптимизации кода.
Тут обычное нормальное решение - это кэширование. 
И ваш второй вариант как раз и является таким велосипедом. В нём нет ничего зазорного, но зачем что-то городить, когда есть проверенные решения, которые будут работать "на вырост".
Если вы знаете, что размер вашего кэша будет помещаться в оперативной памяти машины, то используйте Redis. Это будет очень быстрое решение.
Если же ваш кэш больше, то используйте Elasticsearch. Он представляет отличные инструменты как раз для такого поиска. Он чуть помедленней, чем Redis, но, как мне кажется, удобнее, и всё равно гораздо быстрее реляционных баз.
Главная проблема - это инвалидация кэша. Т.е. надо чётко продумать правила, когда какая-то запись уже устаревает, и надо снова обновить её из базы данных.
Похожие вопросы