Bonjour,
Je cherche à réaliser un calcul mais je commence à me demander si ce que je cherche à faire est réalisable.
j'ai un réseau composée de 145 000 segments stockés au sein d'une table postgres. La relation amont aval est identifier par une colonne possédant identifiant le noeud de départ et d'arrivée du segment.
je cherche à additionner les valeurs d'amont en aval. je pensais partir sur un algo qui part de chaque segment amont et additionne les valeurs jusqu à arriver à la mer :
Sauf que je me rend compte que juste le fait de boucler sur les listIdSource (liste des segments les plus en amont de mon réseau) ~68 000 entités dans le but de récupérer les segments stockés prend déjà 632 secondes. Ce qui risque de m'être un peu long étant donné qu'à vue de nez le nombre d'opération sera plus au alentour des 650 millions -1 milliards ..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ---- algo--- -- fonction (appel sql) recuplistAmont() recuplistAval() recupValAmont(identifiant) recupVal(identifiant) sauveVal(identifiant,valeur) listIdSource = recuplistAmont() (contient les identifiants des id les plus en amonts) listIdExutoire =recuplistAval() (contient les identifiants des id les plus en aval) TANT QUE x DANS listIdSource FAIRE : TANT QUE x PAS DANS listIdExutoire FAIRE: valAmont = recupIdAmont(x) valEncourt = recupVal(x) valeur = valEncourt + valAmont sauveVal(x,valeur)
J'avais testé initialement de stocké la table sql dans une liste en pensant naïvement qu'une donnée stockée en ram, les accès au sein de liste python serait plus rapides mais j'ai arrêté le process au bout d'une vingtaine de minutes.
Bref j'avoue que je suis un peu circonspect le nombre d'opération ne me parait pas faramineux mais je commence à me demander si ce que je cherche à faire est réellement possible ?
Partager