Лучшая практика Amazon Cloudsearch (или Solr, ElasticSearch) для содержимого результатов?

Я читал, что лучше всего возвращать идентификатор только при запросе результатов, а затем заполнять метаданные из базы данных. Это правда? Я беспокоюсь о производительности.


person gp.    schedule 11.12.2012    source источник


Ответы (4)


На мой взгляд, почти всегда лучше хранить и возвращать как можно меньше полей — предпочтительно только идентификатор, если вам явно не нужна такая функция, как выделение.

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

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

Возвращать значения прямо из вашей поисковой системы может быть полезно. Но если не считать использования поисковой системы в качестве основного хранилища данных, мне понадобилась бы очень веская причина, чтобы фрагментировать логику предметной области, отказавшись от ORM.

person Nick Zadrozny    schedule 13.12.2012

IMO, если вы можете получить результаты поиска и данные в рамках одного вызова, это значительно повысит производительность по сравнению с получением только идентификаторов и выполнением вызова БД для получения метаданных для них.
Кроме того, Solr/ ES предоставляет встроенные решения для кэширования, поэтому ответы на последующие запросы будут быстрее. Для БД вам, возможно, придется использовать решение или, возможно, некоторые другие варианты.

person Jayendra    schedule 12.12.2012

все зависит от вашего конкретного сценария.

В некоторых случаях то, что вы говорите, может быть правдой. Например, Etsy делает именно это (или, по крайней мере, раньше делал это), они объясняют это тем, что у них был очень мощный кластер mysql, и они очень хорошо знают, как им управлять, и очень быстро, поэтому Solr, возвращающий только идентификатор, был достаточно для них.

Но у вас может быть совершенно другой сценарий, и, возможно, вызов базы данных займет больше времени, чем сохранение всего необходимого в Solr и нажатие только на Solr.

person Persimmonium    schedule 12.12.2012

По моему опыту, Solr плохо справляется с получением результатов, когда у вас либо включено выделение, либо поля, которые вы извлекаете, очень велики, а накладные расходы на передачу сериализации/десериализации сети увеличиваются. Если это так, вам может быть лучше асинхронно извлекать эти поля из БД.

person kpentchev    schedule 12.12.2012