2010-04-23 1 views
0

J'ai donc ce script cron qui est déployé et exécuté en utilisant Cron sur un hôte et indexe tous les enregistrements dans une table de base de données - l'index est ensuite utilisé pour la partie frontale du site et les opérations sauvegardées.Comment optimiser l'indexation d'un grand nombre d'enregistrements DB en utilisant Zend_Lucene et Zend_Paginator

Après l'opération, l'index est d'environ 3 à 4 Mo.

Le problème est qu'il nécessite beaucoup de ressources (CPU: 30+ et une bonne partie de la mémoire) et ralentit la machine. Ma question est sur la façon d'optimiser l'opération décrite ci-dessous:

D'abord il y a une requête de sélection construite en utilisant l'API Zend Framework, cette requête est ensuite passée à une usine de Paginator qui retourne un paginateur que j'utilise pour équilibrer le courant nombre d'éléments indexés et ne pas itérer trop d'éléments. Le script parcourt les éléments actuels de l'objet paginator à l'aide d'une boucle foreach jusqu'à la fin, puis il recommence depuis le début après l'obtention des éléments de la page suivante.

Je soupçonne que cette surcharge est causée par le Zend_Lucene mais je ne sais pas comment cela pourrait être amélioré.

+1

Plusieurs fois dans les ressources en ligne, ils mentionnent que l'indexation est une façon de ralentir en PHP et que cela peut être mieux fait en utilisant Java - ie. utilisez Java Lucene pour (re) construire l'index, utilisez PHP avec Zend_Lucene uniquement pour le frontal. BTW Certains documents de lecture: http://dadabase.de/weblog/archives/2009/07/22/recommendation-dont-use-zend-php-lucene – wimvds

Répondre

1

Voir ma réponse à Can I predict how large my Zend Framework index will be?

J'ai testé Zend_Search_Lucene contre Apache Lucene (la version Java). Dans mon test, le produit Java a indexé 1,5 million de documents environ 300 fois plus vite que le produit PHP.

Vous serez beaucoup plus heureux avec Apache Solr (le conteneur Tomcat pour Apache Lucene). Solr inclut un outil appelé DataImportHandler qui aspire les données directement à partir d'une source de données JDBC.

Utilisez l'extension PECL Solr pour communiquer avec Solr à partir de PHP. Si vous ne pouvez pas installer cette extension PHP, utilisez Curl qui devrait être disponible dans les installations par défaut de PHP.

+0

Merci pour l'aide. On dirait que je vais utiliser Lucene de Zend uniquement pour la partie recherche et faire l'indexation en Java. – jdichev

+0

Vous devez savoir que Zend Lucene ne peut pas comprendre les formats d'index Apache Lucene supérieurs à la version 2.3. –

+0

Merci, j'ai aussi trouvé la présentation pratique de la recherche en texte intégral en MySQL particulièrement utile. – jdichev

Questions connexes