IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Parcours d'une base en entier


Sujet :

MySQL

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    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

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    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

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    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.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/07/2009, 11h28
  2. l'ordre des fichiers en parcourant une base d'images
    Par mspeach dans le forum Images
    Réponses: 5
    Dernier message: 08/05/2009, 09h55
  3. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 09h24
  4. Convertion d'entier vers une base et vice versa.
    Par Ptit_Dje dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 04/09/2007, 10h14
  5. Insérer un entier sur 64 bits dans une base ?
    Par DJZiaK dans le forum SQLite
    Réponses: 1
    Dernier message: 10/05/2005, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo