Как оптимизировать индексацию большого количества записей в БД с использованием Zend_Lucene и Zend_Paginator - PullRequest
0 голосов
/ 23 апреля 2010

Итак, у меня есть этот скрипт cron, который развернут и запущен с использованием Cron на хосте и индексирует все записи в таблице базы данных - позже этот индекс используется как для внешнего интерфейса сайта, так и для операций с резервными копиями.

После операции индекс составляет около 3-4 МБ.

Проблема в том, что он занимает много ресурсов (процессор: 30+ и большой объем памяти) и замедляет работу компьютера.,Мой вопрос о том, как оптимизировать операцию, описанную ниже:

Сначала создается запрос на выборку, построенный с использованием Zend Framework API, затем этот запрос передается фабрике Paginator, которая возвращает paginator, который я использую для балансатекущее количество элементов, которые индексируются и не повторяются слишком много элементов.Сценарий выполняет итерацию по текущим элементам в объекте paginator с помощью цикла foreach до достижения конца, а затем начинается с начала после получения элементов для следующей страницы.

Я подозреваю, что эти издержки вызваныZend_Lucene, но не знаю, как это можно улучшить.

1 Ответ

1 голос
/ 24 апреля 2010

См. Мой ответ на Могу ли я предсказать, насколько большим будет мой индекс Zend Framework?

Я тестировал Zend_Search_Lucene против Apache Lucene (версия Java). В моем тесте продукт Java проиндексировал 1,5 миллиона документов примерно в 300 раз быстрее, чем продукт PHP.

Вы будете намного счастливее, используя Apache Solr (контейнер Tomcat для Apache Lucene). Solr включает инструмент под названием DataImportHandler , который всасывает данные напрямую из источника данных JDBC.

Используйте расширение PECL Solr для связи с Solr из PHP. Если вы не можете установить это расширение PHP, используйте Curl , который должен быть доступен в установках PHP по умолчанию.

...