sdx-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sdx-users] Utilisation SDX 2.2.1 et MySQL 4.1


From: Castonguay Dave
Subject: [sdx-users] Utilisation SDX 2.2.1 et MySQL 4.1
Date: Fri, 22 Jul 2005 10:24:51 -0400

Bonjour groupe!

Je reviens à la charge sur l'utilisation de MySQL 4.1/ SDX 2.2.1 et aussi sur la discussion qu'on avait eu sur les temps de suppression (c'était l'automne dernier mais bon mieux vaut tard que jamais). Attention aux indigestions, c'est un gros message!

En gros mon problème vient du fait que mes bases de documents pour mes applications SDX sont souvent mise à jour, soit que des documents sont modifiés ou d'autres sont ajoutés et il n'y a pas vraiment moyen de les différencier de ce qui est déjà dans la base. Alors la solution c'est que l'on ré-indexe au complet à chaque fois.

Sauf que lorsque je ré-indexe une base contenant déjà des documents ça prend une éternité et plus souvent qu'autrement l'indexation semble ne pas se compléter, la page de résultats d'indexation n'est jamais retrounée (j'utilise wget avec un délai d'attente infini) et je n'ai aucun moyen de connaître l'état exact de ma base. Alors, je vidais d'abord la base avant d'indexer, mais là encore la suppression des document prenait un temps fou à s'exécuter (quand ça se complètait).

La suggestion à l'époque qui m'avait été donné était d'utiliser autre chose que HSQL pour le repos (et la database)... J'avais tenté de me connecté sur Oracle (en développant mes propres classes), mais j'ai vite rencontré un problème que je n'ai jamais pu solutionné: je me retrouvais avec une erreur de Oracle lorsque je faisais une longue série de "INSERT", donc à l'indexation... D'après ce que j'ai fait, ce serait plutôt relié à Cocoon qu'a SDX car j'ai fait des tests avec ESQL et j'avais la même erreur... Depuis je fonctionne avec HSQL et lorsque je veux ajouter/modifier des document, j'arrête mon Tomcat, j'efface manuellement les répertoires bd dans "conf" et je repart de zéro... Inutile de vous dire que je commence en avoir assez :) Alors j'ai décidé d'y aller avec MySQL, ce qui semble logique car je crois que c'est ce que la majorité d'entre vous utilise? J'ai donc installé MySQL 4.1.12....

Premièrement, j'ai dû changé le driver utilisé "org.gjt.mm.mysql.Driver" pour "com.mysql.jdbc.Driver" et ausi changé le jar pour la connexion JDBC de "mm.mysql-2.0.11-bin.jar" pour "mysql-connector-java-3.1.10-bin.jar".  Autrement, SDX n'arrivais même pas à se connecter sur MySQL... Est-ce que c'est quelque chose que d'autres on dû faire? Ou je suis encore seul au monde?

Une fois ce problème résolu, j'ai commencé mes tests... Et question de bien mettre l'épreuve le tout j'ai utilisé notre application la plus chargée avec ses 40 000 notices.

La configuration que j'ai utilsé alors dans mon application.xconf spécifiait que j'utilisais MySQL pour les repos de ma sdx:userDocumentBase et ma sdx:documentBases avec des entrées dans le genre:  <sdx:repository id="users" type="MYSQL" dsi="sdxDb"/>. Aussi comme recommandé (voir http://lists.gnu.org/archive/html/sdx-users/2004-11/msg00002.html), j'ai plaçé la ligne suivante dans la racine du fichier de config: <sdx:database type="MYSQL" dsi="sdxDb"/>. J'ai immédiatement une erreur lors du chargement de l'application:

http-8080-Processor22/SDXException: There was a problem deleting the entity with the id, "admins", from the database with the id, "sdxuserdatabase".

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

(C'est la même exception et snas doute pour les mêmes causes que ce qui avait été rapporté par Emmanuel Bégué dans http://lists.gnu.org/archive/html/sdx-users/2005-05/msg00006.html)

J'ai donc plutôt placé deux <sdx:database type="MYSQL" dsi="sdxDb"/>. Un dans sdx:userDocumentBase  et l'un dans sdx:documentBases ... Voilà mes tables sont crées... Mais si j'essaie de changer des infos sur mes utilisateurs (mot de passe par exemple), je me retrouve avec la même exception que ci-haut.... Donc un pas en arrière, pour sdx:userDocumentBase, je reviens avec HSQL. Mais pour sdx:documentBases  voilà ce que j'ai:

      <sdx:documentBase id="notice" type="lucene" keepOriginalDocuments="true" default="true">
        <sdx:database type="MYSQL" dsi="sdxDb"/>
         <sdx:queryParser class="fr.gouv.culture.sdx.search.lucene.queryparser.DefaultQueryParser"/>
         <sdx:repositories>
            <sdx:repository id="noticeRepo" type="MYSQL" dsi="sdxDb" default="true">              
            </sdx:repository>
         </sdx:repositories>
         <sdx:fieldList xml:lang="fr-FR" analyzerConf="/sdx/resources/conf/analysis/fr.xml">
        ....

Voilà maintenant je démarre mon application et lance l'indexation... Mais après environ 17000 documents indexés, j'ai une erreur OutOfMemory! Bon... J'ai refait plusieurs tests, avec MySQL installé sur un autre serveur... Même résultats. La configuration mémoire de mon Tomcat (5.0.28) est d'un minimum de 256Mb et un max de 512Mb... Est-ce quelque chose dans la configuration de MySQL? Je n'en sais rien, j'en suis à ma première expérience, peut-être quelqu'un à des suggestions en ce sens?

Autre pas en arrière... J'enlève <sdx:database type="MYSQL" dsi="sdxDb"/>... Donc j'efface tout, je reconfigure et maintenant la seule table que j'ai dans MySQL c'est celle pour le repos. Je lance l'indexation qui se déroule à merveille en moins d'une heure (50 min environ).

Mais voilà, je modifie quelques documents et j'en ajoutes quelques un, je relance l'indexation...  Résultats, 16 heures (!!!) plus tard, je n'ai toujours pas de retour de la réponse. J'arrête tout et vérifie si au moins quelques uns des documents ont été ajoutés ou modifié... Nada! C'est comme si ça tournait à vide!

Je reviens à la solution de vider d'abord la base, mais même chose... Au bout de 2 heures ma base n'est toujours pas vide! Donc, je suis au même point qu'avec HSQL! Je déduis donc que le gros du problème est lié à la database (qui est toujours HSQL à cause du manque de mémoire que je mentionnais plus haut) et non au repos.

Je refais donc un dernier test avec une base de documents plus petite (~ 15000) afin de ne pas avoir le problème de manque de mémoire. Je mets donc la database et le repos dans MySQL... La première indexation se déroule à merveille! Je modifie certains document, j'en ajoute et je lance la ré-indexation. Ça ne fonctionne pas, parce que pour mettre à jour des documents, SDX les efface (c'est bien cela?) de la database et là encore on a la fameuse exception:

ERROR   (2005-07-21) 14:40.40:906   [sdx.framework.ral] (/sdx/ral/upload_notice.xsp) http-8080-Processor24/SDXException: There was a problem deleting the entity with the id, "0000004154", from the database with the id, "notice".

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

En plus, après environ 5700 "transactions" (j'ai compté le nombre de fois que l'exception se répétait dans le sdx.log), j'ai un OutOfMemory dans mes logs Tomcat....

Bon pour l'exception sur le executeQuery(), je pourrais modifier "AbstractJDBCDatabase.delete" pour utiliser executeUpdate au lieu de executeQuery... Mais je ne suis pas certain que je n'aurais pas quand même des problèmes de mémoire.

Voilà, je tourne un peu en rond! Si je pouvais au moins régler le problème de mémoire au moins je pourrais refaire des tests en modifiant la classe AbstractJDBCDatabase...

Alors si quelqu'un pouvait faire des suggestions/recommandation sur la configuration d'un système (hardware et software) pour une utilisation optimal de SDX, ce serait apprécié. En fait, je voudrais savoir pour ceux qui n'ont pas ces problèmes:

- quel configuration système avez vous (hardware, système d'exploitation, est-ce que vous avez des systèmes dédiés pour Tomcat/SDX et un pour MySQL?)

- quelle version de Tomcat et s'il y a des configurations particulières qui permettraient d'amélioré le fonctionnement de SDX?

- quelle version de MySQL et  encore une fois, des recommandations sur la configuration (je suis vraiment novice avec MySQL, alors toute suggestion est la bienvenue)!

- toute autre information qui pourrait être utile (des ajustements à faire dans les fichier xconf? etc...)

Pour ma part mes tests ont été effectués avec la configuration suivante:
-Un seul système Pentium 4 2.5GHz avec 1Go de RAM tournant sous Windows 2000 (SP4)
- Tomcat 5.0.28 avec mémoire d'au minimum 256 Mo pour un max de 512 Mo et un "Thread Stack Size" de 512 Ko.
- SDX 2.2.1
- MySQL 4.1.12a (la config est par défaut sauf pour le "Storage Type" que j'ai mis à MyISAM)

Voilà! Bon week-end à tous!

Dave



Dave Castonguay
Analyste informatique - Développement web
Direction des systèmes d'information
Bibliothèque nationale du Québec

475, boul. De Maisonneuve Est
Montréal (Québec) H2L 5C4
Téléphone : (514) 873-1100 poste 3138
Télécopieur : (514) 864-1118
address@hidden
www.bnquebec.ca



AVIS DE CONFIDENTIALITÉ - AVERTISSEMENT RELATIF À LA LOI SUR L'ACCÈS AUX DOCUMENTS DES ORGANISMES PUBLICS ET SUR LA PROTECTION DES RESEIGNEMENTS PERSONNELS (L.R.Q.,c.A.-2.1): L'information transmise avec ce courrier électronique est de nature privilégiée et confidentielle. Elle est destinée à l'usage exclusif de son destinataire. Si vous n'êtes pas le destinataire visé, vous êtes par la présente avisé qu'il est strictement interdit d'utiliser cette information, de la copier, la distribuer ou la diffuser. Veuillez s'il vous plaît contacter l'expéditeur initial du courrier électronique et le détruire de votre ordinateur.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]