Bonjour,
je dois traiter un problème épineux, et j'aurais aimé avoir des conseils de développeurs confirmés :
Je dois stocker des données assez particulières, des données financières, en très grand nombre.
Il y a grosso modo deux types de données : daily (au jour le jour) et intraday (dans une journée, avec une périodicité à définir)
Je vais chercher mes données sur des fournisseurs type bloomberg, reuteurs et datastream.
Ma grosse contrainte, et mon principal problème est que les utilisateurs
1°) ne connaissent pas à l'avance les données dont ils vont avoir besoin
2°) vont spécifier à mon appli ce qu'ils auront besoin dorénavant : typiquement si ils ont besoin d'un nouvel indicateur, ils donneront une string, avec l'instruction de récupération vers tel ou tel provider.
Donc mécaniquement, je me fais une table "titres" qui correspondent aux différents titres financiers (Alcatel, France Telecom, ...) et une table "data" qui contient le nom de la donnée, et cette fameuse chaine.
Au milieu je mets une association, avec ma donnée numérique et sa date.
Avec ça, je peux donc bien ajouter autant de données que je souhaite à mes titres.
Or, quand on traite de l'intraday, il est raisonnable de compter une opération par seconde, sur une journée ça nous fait 8h*3600s = 28800 inserts.
Les providers ne gardent les données intraday que 50 jours, donc il vaut tout stocker avant leur effacement.
Si j'ai, disons 20 données, pour un titre, en 50 jours, je vais avoir 50*28800*20 insert à faire.
Evidement, ils ne travaillent pas sur un seul titre...
Cette solution "logique" ne me semble pas du tout viable, vu la quantité de données : mais je n'ai aucune expérience de bases de cette taille (je sors de la fac...)
Autre solution :
Créer une table avec mes 20 données en colonnes, pour pouvoir faire mes inserts ligne par ligne.
A coté, garder une table qui décrit chaque colonne, avec la string permettant de récupérer / calculer les données
Et en cas d'ajout de colonnes, que mon programme fasse un alter table.
Est ce que ça peut être dangereux ?
ça me parait particulièrement moche comme méthode.
Vous voyez d'autres moyens de faire ?
petite question subsidiaire : si je code mes insert dans des procédures oracle, que j'appelle ensuite, est-ce que ça ira plus vite que si je fais tout depuis le langage de prog (matlab en l'occurence) ?
dernier détail, ici nous avons oracle 9i.
Merci si vous pouvez me conseiller.
Partager