Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/08/2007, 16h47   #1
Invité de passage
 
Inscription : septembre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 16
Points : 4
Points : 4
Par défaut Index Fulltext MyIsam vs InnoDB

Bonjour à tous,

J'ai dévellopé une application pour laquelle le choix c'est porté sur le moteur InnoDB pour des raisons évidentes d'efficacité. Le revert de la médaille est que malheureseument les index Fulltext ne sont pas gère sur ce moteur de stockage... Chose que j'ignorais

J'arrive à une étape de mon projet ou je dois réaliser des moteurs de recherche "complexe".

J'ai donc une idée simple : copier régulièrement la base avec les tables InnoDB vers une copie utilisant MyIsam.

Je me pose donc des questions sur la façon d'effectuer une telle manipulation ?

Hypothèse 1 : lancer, via un cron, toutes les X heures, un script qui :

- fera un dump de la base avec les tables InnoDB
- supprimera la base les tables MyIsam
- rechargera les tables en changeant les "InnoDB" par des MyIsam et en supprimant les contraintes d'intégrité

Hypothèse 2 : utiliser la réplication mais dans ce cas comment mettre le slave en MyIsam ?

Hypothèse 3 : pas d'hypothèse 3 pour le moment.

Merci d'avance pour vos idées !

++
YvesTan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 19h03   #2
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Pourquoi tu ne fais pas un trigger dans le seul cas ou tu utilises mysql 5
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 21h59   #3
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Tu peux parfaitement mêler dans la même base des tables de moteurs de stockage différents, et donc mettre en MyISAM la table sur laquelle tu as besoin de faire de la recherche FULLTEXT, tout en laissant les autres en InnoDB (ALTER TABLE machin ENGINE = MyISAM).

Tu peux également fairer un partitionnement vertical, càd garder ta table en InnoDB, mais déplacer les colonnes concernées par la recherche FULLTEXT dans une table MyISAM.

Finalement, si tu préfères copier tes données, berceker a raison, le plus simple c'est de mettre des triggers.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 09h13   #4
Invité de passage
 
Inscription : septembre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 16
Points : 4
Points : 4
Merci pour vos réponses.

La première chose : l'application est finie à 95% donc je ne souhaite pas pour le moment changer radicalement la structure de données.

Ensuite, la structure de données est assez complète et les requêtes pour les recherches utilisent parfois 5/6 tables diffèrentes. Il y a des relations un peu partout

Concernant l'éventualité de mélanger table MysIsam et InnoDB, je ne pense pas que ce soit possible. Exemple : j'ai une table "texts" sur laquelle je dois effectuer des recherches sur le champ titre mais qui a des liaisons avec 5 ou 6 autres tables (idpublisher/idcontact/idauthor...) et il y a des contraintes d'intégrités. Sur une même recherche, je vais "taper" dans le champ titre de la table texts, le nom de l'auteur (table authors), le nom d'un "publisher" (table "contacts", la production ect...

Si j'utilise des triggers, il me faudra un paquet de règles ? non ?

Je n'ai encore jamais utilisé de trigger Est-ce qu'il est possible de faire des règles "globales" ? Genre : "si n'importe quoi de la table est modifié alors faire la même modification sur l'autre table..."

C'est le premier projet ou j'utilise globalement InnoDB et les contraintes d'intégrité. pardonnez donc mon ignorance sur les triggers et les subtilités

++
YvesTan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 10h03   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par YvesTan Voir le message
Merci pour vos réponses.

La première chose : l'application est finie à 95% donc je ne souhaite pas pour le moment changer radicalement la structure de données.

Ensuite, la structure de données est assez complète et les requêtes pour les recherches utilisent parfois 5/6 tables diffèrentes. Il y a des relations un peu partout

Concernant l'éventualité de mélanger table MysIsam et InnoDB, je ne pense pas que ce soit possible. Exemple : j'ai une table "texts" sur laquelle je dois effectuer des recherches sur le champ titre mais qui a des liaisons avec 5 ou 6 autres tables (idpublisher/idcontact/idauthor...) et il y a des contraintes d'intégrités. Sur une même recherche, je vais "taper" dans le champ titre de la table texts, le nom de l'auteur (table authors), le nom d'un "publisher" (table "contacts", la production ect...

Si j'utilise des triggers, il me faudra un paquet de règles ? non ?

Je n'ai encore jamais utilisé de trigger Est-ce qu'il est possible de faire des règles "globales" ? Genre : "si n'importe quoi de la table est modifié alors faire la même modification sur l'autre table..."

C'est le premier projet ou j'utilise globalement InnoDB et les contraintes d'intégrité. pardonnez donc mon ignorance sur les triggers et les subtilités

++
Dans ton trigger tu peux declencher une procedure stockée. Ainsi tu developpe qu'une fonction pour tous le monde.

Personnellement, je m'étais posé un peut pret la même question que toi concernant le moteur de recherche. J'ai pris la décision pour deux choses.
L'utilisation du Full-Text. Plus, une taxinomie de mot.
Je peux accrocher a mon objet des hierarchies de mot. Exemple :
J'ai un objet Television. A cette tele je vais accrocher les mots suivant TV, DVD, TNT. Mais comme le monde est fait ainsi, il y a des gens qui ne savent pas écrirent (comme moi) . Donc, je fais des dérivés : TV => Tévé, Télé,Televiseur=>Télé viseur.
Pour DVD => Dévédé, DVDé ainsi de suite. Les dérivés peuvent être encore dérivé.
De là, tu enrichies un dictionnaire à laquelle tu peux accrocher n'importe quel objet. Quelqu'un tape un meut tu peux remonter toute la chaine jusqu'a trouver les objets accroché au bout.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 17h06   #6
Invité de passage
 
Inscription : septembre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 16
Points : 4
Points : 4
Bon. Je vais mettre le nez dans les triggers et les procédures stockées pour voir si je peux obtenir ce que je veux.

Ton exemple est intéressant mais comment tu remplis le dictionnaire ?

Je ne pense pas cependant que ca puisse me servir car les recherches sont assez précises (texte, nom d'artiste, spectacle...)
YvesTan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 18h56   #7
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par YvesTan Voir le message
Bon. Je vais mettre le nez dans les triggers et les procédures stockées pour voir si je peux obtenir ce que je veux.

Ton exemple est intéressant mais comment tu remplis le dictionnaire ?

Je ne pense pas cependant que ca puisse me servir car les recherches sont assez précises (texte, nom d'artiste, spectacle...)
Le dictionnaire doit être remplie par toi même mais tu peux faire en sorte qu'elle peut se remplire. Il me semble qu'il existe se genre de dictionnaire avec le mot principale et ses dérivés.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 09h26   #8
Invité de passage
 
Inscription : septembre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 16
Points : 4
Points : 4
Je reviens vers vous car je n'arrive pas à voir si avec une procédure stockée je peux faire un truc générique genre

après insertion dans les tables machins, trucs, bidules, inserer aussi dans les tables machins, trucs, bidules de la base copie_myisam.

Idem pour update/delete/replace.

J'ai une 20aine de table à gérer...

Merci ++
YvesTan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 10h32   #9
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
C'est très facile à faire Tu peux faire facilement des sortes de clone de ligne. Soit tu enregistres toute la table entiere du genre

INSERT INTO Table1 (monchamp1,monchamp2) SELECT monchamp1,monchamp2 FROM Table2.

Il y a des requêtes d'insert pour optimiser ce genre d'opération, regarde dans la doc. Genre SELECT FOR INSERT. Un truc comme ça!
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h56.


 
 
 
 
Partenaires

Hébergement Web