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

Oracle Discussion :

[débutant] besoin d'avis sur architecture de base.


Sujet :

Oracle

  1. #1
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut [débutant] besoin d'avis sur architecture de base.
    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.

  2. #2
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par Mathusalem
    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.
    Daily et Intraday ca ne sont pas vraiment des types de données. De quoi parle tu? de chaines de caractères, d'entiers, d'URL, d'images, de textes...
    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.
    Une string ?? Avec quoi dedans?
    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.
    Niveau modélisation ca semble correct... Mais quel est donc ce champ numérique dans l'association? Que mets tu dans "data"?
    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...)
    Ce qui est logique me semble en général préférable mais bon...
    Quelles est la taille d'une ligne? (sommme de la taille de toutes les colonnes).
    Sinon je te signale quand même qu'Oracle gère des terabits de données sans plus de problème que ca (ajout de disques durs et configuration de la base sont quand même à faire).
    Certaines bases Oracle supportent des centaines de millions d'insert chaque jour. (par exemple en téléphonie)
    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 ?
    Ca peut être couteux (en temps) surtout si tu as beaucoup de volume mais "dangereux" pas vraiment.
    ça me parait particulièrement moche comme méthode.
    Donne un peu plus de détails et on pourra te dire si c'est vraiment moche.
    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) ?
    Si ton code est en base tu économisera surtout du traffic réseau mais cela sera un peu plus rapide oui. D'une façon très générale/schématique, les traitements métiers répétitifs (process) sont à intégrer dans la base de façon systématique. A moins que tu aies des travaux à faire que le PL/SQL ne permette pas.
    Mais si tu dois vraiment faire des insert très nombreux, il vaut sans doute mieux les grouper et les insérer via SQL Loader ou un ETL. (surtout si tes tables comportent des index et des contraintes ou des triggers)
    Dyvim

  3. #3
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par dyvim
    Daily et Intraday ca ne sont pas vraiment des types de données. De quoi parle tu? de chaines de caractères, d'entiers, d'URL, d'images, de textes...

    Une string ?? Avec quoi dedans?
    daily et intraday sont kif kif, c'est des chiffres, dans des colonnes que je ne connais pour l'instant pas. La seule différence, c'est que les premiers sont par date et les seconds par date + time

    dans la string, il y a une instruction matlab que qu'évalue dans mon programme, pour savoir où chercher la donnée chez le provider.

    Citation Envoyé par dyvim
    Niveau modélisation ca semble correct... Mais quel est donc ce champ numérique dans l'association? Que mets tu dans "data"?
    la valeur numérique, par exemple le volume pour le titre alcatel si la colonne c'est "volume".

    Citation Envoyé par dyvim
    Quelles est la taille d'une ligne? (sommme de la taille de toutes les colonnes).
    Sinon je te signale quand même qu'Oracle gère des terabits de données sans plus de problème que ca (ajout de disques durs et configuration de la base sont quand même à faire).
    Certaines bases Oracle supportent des centaines de millions d'insert chaque jour. (par exemple en téléphonie)
    la taille d'une ligne daily, aucune idée, probablement plus de 50 à 100 colonnes.
    Pour l'intraday, ça bougera beaucoup moins, vu qu'il y a moins d'indicateurs qui les intéressent et que les providers proposent beaucoup moins de données



    Pour réexpliquer ce qui me tracasse, en stockant ma donnée numérique, dans l'association reliant mon entreprise, au nom de la "colonne", je vais devoir me taper les insert des valeurs numériques une par une.
    Or ils demandent au provider des matrices de données de taille importante (30 * 30000).

    Citation Envoyé par dyvim
    Mais si tu dois vraiment faire des insert très nombreux, il vaut sans doute mieux les grouper et les insérer via SQL Loader ou un ETL. (surtout si tes tables comportent des index et des contraintes ou des triggers)
    Avec matlab, pas d'ETL me semble-t'il, mais pourquoi pas SQL Loader, je vais y réfléchir.


    Merci de votre réponse.

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    je voulais savoir , as tu trouvé une solution?
    merci

Discussions similaires

  1. [Robotique] Besoin d'un avis sur architecture Java robotique
    Par critok dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 16/01/2013, 14h45
  2. Besoin d'avis sur un architecture
    Par KraftDiner dans le forum Développement
    Réponses: 3
    Dernier message: 10/11/2012, 09h51
  3. Besoin d'avis sur le suivi de changement de colonnes en base
    Par Dharma dans le forum Développement
    Réponses: 3
    Dernier message: 12/11/2009, 14h45
  4. Besoin d'avis sur PC
    Par ren29 dans le forum Ordinateurs
    Réponses: 28
    Dernier message: 11/12/2005, 21h32
  5. Besoin d'avis sur un offre d'embauche en SSII
    Par Anne_so2121 dans le forum SSII
    Réponses: 14
    Dernier message: 25/07/2005, 13h09

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