Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 02/11/2011, 15h05   #1
Membre habitué
 
Inscription : janvier 2005
Messages : 488
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 488
Points : 130
Points : 130
Par défaut Parcours d'une base en entier

Hello,

Je dispose d'une grosse base de données (plusieurs millions d'entrées). Dans celle-ci, des objets complexes sont stockés et représentés sous forme textuelle dans une table principale.

Dans mon application client, l'utilisateur à la possibilité de faire une recherche avancée qui nécessite de parcourir l'ensemble de la base et d'applique un algorithme de recherche dans le code client.

Quel est alors la meilleur facon de parcourir la base ?

Charger l'ensemble des données en mémoire est exclu vu la quantité de donnée en jeux. Utiliser LIMIT et OFFSET me semble également exclut vu leur lenteur. Je n'ai malheureusement pas de posibilité (immédiate) de représenter mes objets autrement que par une longue chaine de caractère, donc pas vraiment de possibilité de les indexer.

Jusqu'ici, je récupère le min et le max de la clé primaire, et je parcours la base par fenêtre avec SELECT (...) FROM T WHERE t_id BETWEEN n AND n+2000... Mais ca me semble franchement être du bricolage, et je me demande si il n'y a pas mieux...

Merci d'avance vos conseils
vinzzzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 10h23   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Tu as pensé à la recherche FULL TEXT ?

Ceci dit, stocker des objets complexes dans une colonne n'est pas une bonne modélisation. Tu aurais intérêt, surtout avec plusieurs millions de lignes, à modéliser correctement tes données !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 11h44   #3
Membre habitué
 
Inscription : janvier 2005
Messages : 488
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 488
Points : 130
Points : 130
Citation:
Envoyé par CinePhil Voir le message
Tu as pensé à la recherche FULL TEXT ?

Ceci dit, stocker des objets complexes dans une colonne n'est pas une bonne modélisation. Tu aurais intérêt, surtout avec plusieurs millions de lignes, à modéliser correctement tes données !
En effet, le problème est que ces objets sont assez complexes (des graphes avec toutes sortes de propriétés), et que les algorithmes (e.g. recherche de sous graphe etc..) qui leur sont appliqués le sont aussi. La recherche full text n'est donc pas adaptée.

Du coup, même avec une modélisation un peu plus poussée (je sais qu'il existe certaines solutions pour modéliser des graphes dans des SGBD mais je ne suis même pas certain qu'ils puissent être adapté à mes objets), il faudrait de toute facon récupérer les objets, les modéliser dans l'appli et leur appliquer les algos. Il existe des moyens simple de pré-filtrer les objets dont on sait qu'il ne vont pas satisfaire les contraintes de la recherche, mais dans tous les cas certaines requêtes vont de toute facon nécessiter de tester un grand nombre d'objets.

Donc en attendant je cherche le meilleur compromis
vinzzzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 11h58   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par vinzzzz Voir le message
Du coup, même avec une modélisation un peu plus poussée (je sais qu'il existe certaines solutions pour modéliser des graphes dans des SGBD mais je ne suis même pas certain qu'ils puissent être adapté à mes objets), il faudrait de toute facon récupérer les objets, les modéliser dans l'appli et leur appliquer les algos.
Ou programmer l'algo en SQL, l'exécution sur un grand ensemble de données sera probablement plus rapide dans un SGBD que dans un programme externe. Les SGBD sont fait pour ça et le SQL est en principe un langage complet.

Tu peux donner un exemple pas trop complexe pour qu'on comprenne mieux ton besoin ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 15h12   #5
Membre habitué
 
Inscription : janvier 2005
Messages : 488
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 488
Points : 130
Points : 130
Programmer l'algo en SQL oui... mais ca nécessitera pas mal de travail et de changement, et pour le moment je n'ai pas le temps..

L.'exemple le plus simple est par exemple la recherche de sous graphes: j'ai un ensemble de graphes, et je souaite chercher parmis ceux-ci les graphes qui contiennent un sous graphe particulier. Sachant que mes noeuds et mes edges ont eux même des propriétés qu'il faut prendre en considération ou non suivant le type de la recherche.

Dans tous les cas, j'ai malgrès cela toujours une même contrainte: j'ai un moyen intermédiaire de filtrer via. le sgbd les objets qui sont certains de ne pas être dans la liste des résultats, mais lorsqu'il reste malgrès cela beaucoup d'objets, il me faut un moyen de les parcouris pour leur appliquer l'algo (dans l'appli ou dans le sgbd peu importe), sans avoir à tout charger en mếmoire.. D'où mon idée de jouer avec les IDs mais ca me semble peu efficasse.
vinzzzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h48.


 
 
 
 
Partenaires

Hébergement Web