Enregistrer un graphe dans une base...

Enregistrer un graphe dans une base... - SQL/NoSQL - Programmation

Marsh Posté le 29-03-2003 à 06:58:48    

Hello tous !
 
J'ai besoin d'enregistrer un graphe dans une base tournant sous un MySQL.
 
Le graphe se compose actuellement de 40 valeurs relevees a des espaces predefinis.
 
Ce graphe est principalement compose de variation minimes sur l'axe des y, et a beaucoup l'apparence d'une ligne droite augmentant un peu et baissant un peu.
 
Quel est la meilleure facon de l'enregistrer a votre humble avis ?
 
Tout d'abord le format. Pour l'instant, j'utilise une chaine de caractere avec | comme separateur, en limiutant les float au format 9.99 . Une meilleure idee ? Ca doit passer sous MySql ;)
 
Ensuite, les mesures. Quelle est la facon la plus efficace d'enregistrer ce graphe ? Trouver des points de controle ? Chercher a quel endroit ca change enormement ?
 
Je vous remercie de toutes les idees que vous pourrez apporter =)
 
Pensez que l'espace est plus important que le temps de calcul dans mon cas, mais que les deux parametres se doivent de rester modestes quand meme ;) Jre peux pas lacher des integrales et autres quoi ;)

Reply

Marsh Posté le 29-03-2003 à 06:58:48   

Reply

Marsh Posté le 29-03-2003 à 12:31:56    

Les graphs c'est un peu loin derrière moi, et habituellement, je me base sur des applications physiques pour modéliser mes bases et alogs, par sur des concepts mathématiques qui m'embrouillent.
 
Donc si tu pouvais poster un petit exemple, ou une appplication physique pour qu'on puisse mieu se représenter ton problème, ça pourrait certainement nous aider...
 
Bon, ton histoire de ligne avec variations me fait bêtement penser à une évolution d'une valeur dans le temps, comme le cours de la bourse par exemple.
 
-> Si les points sont répartis de façon homogène selon X, et que chaque point n'est connecté qu'aux points ayant la valeur précédente et suivante de X, alors il suffit que tu stockes ton graphe dans une table ne reprennant comme clé les couples X,Y et la valeur associée s'il y en a une.
Pour les requêtes, tu pourras sans problème te baser sur les fonctions statistiques telles que éccart type ou autres, ce sera très rapide, et tu n'aura pas de perte de place.
 
-> Si les points forment un nuage, c'est plus chiant. Tu stockes de la même façon, mais avec un ID en plus, et une seconde table qui va stocker les liaisons entre les points. A priori, là tu devrait pouvoir t'en sortir de la même façon. A savoir que sous Oracle il y a une instruction "conect by" qui permet de suivre un cheminement père/fils, qui pourrait te venir en aide lors de l'interrogation. Je ne sais pas s'il y a un équivalent sous MySQL.
 
-> Si non seulement les points mais aussi les segments sont pondérés, alors il faudra stocker les pondérations des segments en plus.
 
 
Exemple des deux structures :
 

Code :
  1. La première :
  2. -------------
  3. X
  4. Y
  5. POIDS_POINT
  6. POIDS_PREV
  7. POIDS_NEXT
  8. -> (X,Y) = Clé primaire, coordonées du point
  9. -> POIDS_POINT : Pondération du point
  10. -> POIDS_PREV et POIDS_NEXT : Pondération des segements précédents et suivants. Ce ne marche qu'avec un graphe linéraire.
  11. La seconde :
  12. ------------
  13. ID
  14. X
  15. Y
  16. POIDS_POINT
  17. -> ID : Clé primaire. Identifiant du poids utilisé pour les relations entre segments
  18. -> X, Y : Clé alternative. Coordonnées du point.
  19. -> POIDS_POINT : Pondération du point.
  20. ID_PERE
  21. ID_FILS
  22. POIDS_SEG
  23. -> ID_PERE : Clé étrangère. Point de départ.
  24. -> ID_FILS : Clé étrangère. Point d'arrivée.
  25. -> POIDS_SEG : Pondération du segment. (le modèle est bi-directionnel)


 
Voilà, j'espère que ça pourra t'être utile, mais vu que je vois pas ce qu'est ton graph, et encore moins ce que tu veux en faire, je peux pas t'aider plus.


Message édité par MagicBuzz le 29-03-2003 à 12:32:14
Reply

Marsh Posté le 30-03-2003 à 22:01:14    

Mon graphe est une mesure dans le temps ( donc c'est lineaire et j'ai qu'a les relier )
 
Mes donnees sont du type :


 X    Y
0.5  2.2
1.0  2.3
1.5  2.1
2.0  2.1


 
Le Y ne variant pas enormement, et le X est pour l'instant fixe ( donc pas la peine de l'enregistrer ).
 
Pour l'instant, j'enregistre mon graphe sous la forme :  
 
2.2|2.3|2.1|2.1|...
 
Et je me demandais si il y avait plus pratique, car comme j'ai 5 courbes chacunes faites de 40 mesures, je tape le Ko dans la base et c'est beaucoup trop :/
 

Reply

Marsh Posté le 30-03-2003 à 23:17:31    

Non non, utilise mon premier système.
 
1) Enregistre X, car pour certains calculs il te sera utile.
2) Fait une ligne par mesure, comme ça tu peux faire la plupart des calculs directement dans la base, ce qui sera bien plus rapide que tout récupérer à chaque fois, spliter dans un tableau, et traîter en PHP ou autre.
3) Ajoute un champs pour stocker l'ID de la courbe.
 
Genre :
 

Code :
  1. MESURES
  2. COURBE_ID
  3. X
  4. Y
  5. Avec COURBE_ID et X en clé primaire. (plus plus de propreté, je te conseille de faire un ID séparré, et de mettre un indexe unique - clé laternative - sur COURBE_ID et X)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed