|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 488 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() |
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 ! |
|
00
|
|
|
#3 | |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 488 ![]() |
Citation:
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 |
|
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
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 ! |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 488 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com