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

PL/SQL Oracle Discussion :

Moteur de règles en PL ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut Moteur de règles en PL ?
    Bonjour,

    je me pose la question de savoir si faire un moteur de règles en PL/SQL est une solution viable.
    Par moteur de regles, j'entends :
    -un traitement complexe
    -utilisé par de nombreux utilisateurs
    -nombreux paramètres en entrée
    -utilise des règles (pouvant évoluées ponctuellement)
    -utilise des grandes tables contenant les données de référence

    -->typiquement le calcul d'un devis suivant différentes hypothèses.

    En PL/SQL chaque session va avoir une copie de ce moteur(=plusieurs packages) -> consommation de mémoire.

    Je pense qu'il doit y avoir certaines limites où une autre architecture(Java, C+, thread,..) s'impose?

    Avez vous une opinion ou un retour d'experience sur ce sujet?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Bonjour,

    J'ai souvenir d'avoir réalisé un tel mécanisme, servant à établir des devis d'assurance. Il n'y a guère de limitations concernant le PL/SQL, car il est modulaire, et les fonctions et procédures peuvent être regroupées en package.
    L'avantage est que ledit moteur alimente ensuite n'importe quel type d'interface (Forms,PL/SQL,Reports,Java,JSP,Deplhi,etc...)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    merci pour ta réponse.

    Cependant je me dis que c'est dommage d'avoir 1 copie du traitement par user, chargé, déchargé suivant l'utilisation mémoire alors que le traitement est finalement unique pour tous les users.
    Est ce qu'une architecture où le programme(ou plusieurs instanace de ce programme) reside en memoire ne serait pas plus pertinente pour la scalabilté?

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Il suffit de faire un GRANT EXECUTE sur les autres users afin que tous utilisent la même source.
    De plus, vous pouvez effectivement forcer le code du package à s'installer en mémoire. (voir dbms_shared_pool.keep())
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par kervoaz Voir le message
    ...
    Cependant je me dis que c'est dommage d'avoir 1 copie du traitement par user, chargé, déchargé suivant l'utilisation mémoire alors que le traitement est finalement unique pour tous les users.
    Est ce qu'une architecture où le programme(ou plusieurs instanace de ce programme) reside en memoire ne serait pas plus pertinente pour la scalabilté?
    Il n'y pas 1 copie du traitement par utilisateur.

    PL/SQL stored procedures are compiled once and stored in executable form, so procedure calls are quick and efficient. Also, stored procedures, which execute in the server, can be invoked over slow network connections with a single call. That reduces network traffic and improves round-trip response times. Executable code is automatically cached and shared among users. That lowers memory requirements and invocation overhead.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    Si tu as besoin :
    • de bon temps de réponse
    • pour une algorithmie riche
    • qui fait beaucoup d'échanges avec la base
    • fait d'un code maintenable
    • développé en un temps raisonnable

    tu as besoin de PL (ou de transac si tu est sur sybase ou sqlserver).


    En tout cas, d'apres mon experience, java, C++, .NET font systématiquement des choses :
    • moins rapides en temps d'éxécution (surtout s'il y a des échanges databases)
    • un code complexe et moins maintenable
    • un temps de dev plus long.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    jmguiche, je suis du même avis mais c'est peut être que dans le forum PL/SQL on est moins objectif

    Pour ce qui est du partage du code, il me faudrait des eclaircissements:
    Si ce moteur est dans un schema à partir duquel les users ont les droits execute, comment va etre chargé les packages du moteur?

    Merci

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par kervoaz Voir le message
    ...
    Pour ce qui est du partage du code, il me faudrait des eclaircissements:
    Si ce moteur est dans un schema à partir duquel les users ont les droits execute, comment va etre chargé les packages du moteur?

    Merci
    Désolé, mais je ne vois pas exactement ce que tu veux connaître; peux tu détailler ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    Le PL est réentrant.
    http://fr.wikipedia.org/wiki/R%C3%A9entrance !
    Il y aura autant de sessions que d'utilisateurs connectés.
    Chaque session travaillera sur ses propres données.
    "l'executable" ne sera chargé qu'une seule fois en mémoire.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    Merci effectivement c'etait la notion de réentrant.
    Cependant (désolé ) quand tu dis "executable" pour un prog en java, .net , je vois ce que ça représente. Pour du PL qui inclus des objets sql ayant des attributs différents suivants les users, les objets PL ont eux mêmes des privileges differents, la notion d'executable n'est plus aussi claire pour moi.

    Je peux voir la distinction entre exécution SQL et PL/SQL traitée par des "runtime" différents. Le code d'un package est il toujours une seule fois en memoire et partagé par tous les users meme s'ils ont des priviléges differents?

    Dans les doc Oracle, je ne suis pas tombé sur une explication limpide.

    Merci

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    Oui, le code, tout comme les curseurs sql, sont présent une seule fois et partagés. Seules les données propres à chaque user ne le sont pas (encore une veine).

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    J'ai souri quand j'ai vu le titre du post, car j'ai posté un message hier (cf. Différence entre l'execution d'une procédure en test (mode debug) et l'exec normale), et les procédures en question était un moteur de calcul traitant des règles.

    Donc j'ai a peu prés les même contraintes (traitement complexe, gros volumes de données, exécution distincte par utilisateur), et je peux te dire que PL/SQL donne entière satisfaction.

    Aprés je ne connais pas l'architecture finale de ton application. L'important est de modéliser la gestion des tes règles de façon à ne pas les coder en dure en PL!

    J'ai fait quelques tests dans un langage de programmation, et le temps de réponse n'a rien à voir, car les drivers ODBC ou autres ralentissent énormément les traitements.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    merci pour vos reponses.
    Pour être complet, le moteur existe déjà mais connait des problèmes de perf.
    J'ai bien quelques pistes pour optimiser mais on se demandait si une autre architecture ne serait pas plus perenne et plus scalable:
    En vrac, déplacement du traitement sur l'AS ou un serveur dédié, faire plusieurs thread, pinné le code en memoire, faire du precalcul sur les données, utilisé un langage optimisé pour les calculs en mémoire(C, C++), utiliser un cache applicatif,...

    Cdt

Discussions similaires

  1. Moteur de règle
    Par Morvan Mikael dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 29/02/2012, 11h38
  2. Moteur de règles
    Par jaromyr dans le forum Débuter
    Réponses: 5
    Dernier message: 16/08/2010, 11h57
  3. Réponses: 0
    Dernier message: 12/06/2010, 21h32
  4. Recherche d'un moteur de règles intégrable à Delphi
    Par korntex5 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 14/10/2007, 19h11
  5. Moteurs de règles : des retours ? + questions
    Par joseph_p dans le forum Général Java
    Réponses: 4
    Dernier message: 20/06/2006, 15h29

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