Как я должен запрашивать MySQL и как кэшировать результаты из MySQL? - PullRequest
2 голосов
/ 31 января 2010

Мне удалось наконец заставить Solr работать с помощью всех вас, ребята, так что СПАСИБО! И я должен сказать, теперь я понимаю, почему вы рекомендовали это, это действительно мощно.

Теперь к вопросу ...

Я проиндексировал всю информацию для поиска в Solr, и я планирую запросить Solr, а затем получить ID:s результатов запроса (для всех записей, каждая из которых имеет значение поля ID) , который я затем использую для query MySQL и получения остальной информации. Итак, первый запрос Solr, следующий solr отправляет обратно id: s для всех объявлений, которые соответствуют запросу, затем я использую ID: s, чтобы запросить MySQL для остальной информации.

Мой вопрос: при выполнении части с MySql я должен сохранить все полученные ID: s в array, а затем query mysql, чтобы найти все записи с этими ID: s? Должен ли я сделать что-то подобное? (может содержать некоторые ошибки кода):

       for ($i=0; $i<$id_from_solr.length; $i++){
       mysql_query("SELECT * FROM table_name WHERE ad_id=$id_from_solr[$i]");
       }

Вышеупомянутое не похоже на хорошее решение, потому что он выполняет «новый запрос» каждый раз, когда снова зацикливается!

Как бы вы это сделали?

Дополнительный вопрос: Замедляет ли добавление функции сортировки в MySQL запрос по сравнению с БЕЗ использования функции сортировки? например:

      ORDER BY insert_date ASC

И последнее Q: Есть ли способ кэшировать результаты MySQL, поэтому при сортировке мне не нужно делать новый запрос?

Большое спасибо!

Если вам нужно больше информации, дайте мне знать, и я обновлю этот вопрос!

Ответы [ 2 ]

3 голосов
/ 31 января 2010

Вопрос 1 (получение идентификаторов и последующий запрос к базе данных): почему бы не вернуть некоторые поля из запроса Solr, чтобы вам не всегда приходилось обращаться и к базе данных?

Q2 (Производительность и сортировка): ну, сортировка представляет собой дополнительную задачу для ваших данных, поэтому она обязательно добавит немного работы для базы данных: это, конечно, можно свести к минимуму, если у вас есть индекс в столбцах ORDER BY.

Q3 (перехват запросов MySql): вы можете включить кэш MySql (который вернет кэшированную копию ваших результатов, если запрос соответствует предыдущему, при условии, что данные не были изменены в промежуточный), или используйте уровень кэширования вне базы данных, такой как EhCache:

http://ehcache.org/

1 голос
/ 31 января 2010

Для первой части, вот как бы я написал один запрос:

$instr=implode(", ",$id_from_solr);
$stmt = "SELECT * FROM table_name WHERE ad_id IN (".$instr.")";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...