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

SQL Oracle Discussion :

Problème insoluble de versioning de données


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut Problème insoluble de versioning de données
    Bonjour,
    il est probable que je me fais des noeuds pour rien au cerveau pour essayer de trouver un moyen simple de répondre aux besoin de mon application mais j'aimerai avoir un regard neuf sur le sujet :

    J'ai une application de gestion/paramétrage au travers de laquelle un administrateur définit :
    - un ensemble de produits électroniques (caractéristiques techniques noms etc...)
    - ainsi que le prix de vente de chacun de ces produits.


    Il a alors la possibilité d'exporter ces données dans différents fichiers pour des sites vendeurs.
    Pour cela il défini :
    - une liste de produits à vendre par le siteA : par exemple contenant tout l'électroménager, téléphonie,informatique mais pas hi/fi ( a noter: il n'y a pas de lien à ce niveau entre la liste et le site de destination, ceci pour pouvoir faire des listes génériques pour plusieurs sites de ventes)

    - et une autre pour le siteB contenant essentiellement les produits électroménager pour la cuisine

    L'administrateur effectue alors ce que l'on appelle un "snapshot" et l'application, génère aussitôt des extractions sous forme de

    fichiers :
    - fichier "ListeProduitSiteA_1" : fichier contenant la liste des des produits sélectionnés précédemment pour le site A (électroménager/informatique etc...)
    - fichier "ListeProduitSiteB_1" : liste des produits pour site B
    - fichier "ListeTarifProduitSiteA_1" : tarifs des produits sélectionnés pour site A
    - fichier "ListeTarifProduitSiteB_1" : tarifs des produits sélectionnés pour site B

    Le 1 signifie que c'est la première révision de ces fichiers.

    L'administrateur doit alors faire le lien entre les fichiers et le site auquel il est destiné.
    Il crée alors ce qu'on appelle une configuration : c'est une association entre le site de vente, les fichiers qu'il doit recevoir
    et un numéro de version( j'en parle juste après).
    L'administrateur fini par faire une diffusion (c'est à dire qu'il envoie réellement les fichiers sélectionnés par site de vente).

    A ce stade j'ai donc les configurations suivantes :

    Configuration_SiteA :
    - Version : 1
    - Sites de destination : Site A
    - Fichiers envoyés : "ListeProduitSiteA_1" ,"ListeTarifProduitSiteA_1"


    Configuration_SiteB :
    - Version : 1
    - Sites de destination : Site B
    - Fichiers envoyés : "ListeProduitSiteB_1" ,"ListeTarifProduitSiteB_1"

    Si désormais l'administrateur doit ajouter des produits électroménagers et/ou modifier des tarifs des produits concernant seulement le site A :
    - il modifie les données des produits et leur tarifs
    - il refait un "snapshot" et il a désormais à disposition les fichiers d'extraction suivants :
    - fichier "ListeProduitSiteA_1"
    - fichier "ListeProduitSiteB_1"
    - fichier "ListeProduitSiteA_2"
    - fichier "ListeProduitSiteB_2"

    - fichier "ListeTarifProduitSiteA_1"
    - fichier "ListeTarifProduitSiteB_1"
    - fichier "ListeTarifProduitSiteA_2"
    - fichier "ListeTarifProduitSiteB_2"

    Le _2 corespond à la seconde révision des fichiers.

    L'administateur met alors à jour la configuration pour le site A en renseigant la dernière version des fichiers à transmettre au site A.
    (il faut savoir qu'il aurait trés bien pu concevoir une configuration basés sur des révisions de fichiers beaucoup plus anciennes)
    Il effectue une diffusion et je me retrouve avec les configurations suivantes :


    Configuration_SiteA :
    - Version : 2
    - Sites de destination : Site A
    - Fichiers envoyés : "ListeProduitSiteA_2" ,"ListeTarifProduitSiteA_2"


    Configuration_SiteB :
    - Version : 1
    - Sites de destination : Site B
    - Fichiers envoyés : "ListeProduitSiteB_1" ,"ListeTarifProduitSiteB_1"


    Ce qu'il m'est demandé de faire, c'est de donner la possibilité :
    - de savoir quelle différence il y a entre une version de configuration et une autre (par exemple lister toutes les modifications concenrnant les données entre la Configuration_SiteA en version 1 et en version 2)
    - de pouvoir faire le diff entre les données de deux révisions d'un même type de fichier :
    par exemple entre ListeTarifProduitSiteA_2 et ListeTarifProduitSiteA_1
    - d'indiquer qu'une révision future de fichier est susceptible d'être produite : par exemple si on modifie les tarifs des produits actuellement diffusés au site B, je dois avertir que sa configuration devrait peut être être rediffusée car elle contient des données obsolète.


    Et j'avoue que je me perds dans différentes méthodes :
    - soit j'essaye de faire de l'audit (produit "Grille Pain" ajouté le 20/07/2014 par V.M.) et de lier mes logs aux fichiers générés dans la phase de snapshots, mais là je m'aperçois que mes fichiers ont vraiment beaucoup de raison de changer et je n'aarive j'aimais à couvrir tous les cas.
    - j'ai essayé de stocké le contenu de chaque fichier en base et de faire des diff mais là j'ai des problèmes de volume (je suis obligé de garder certains des données de ma base dupliquées autant de fois que je fais des snapshots même si rien a bougé entre deux snapshots...)
    - j'ai pensé à une approche bi temporelle mais là je n'ai pas qu'une dépendance par rapport au temps (dans un configuration on peut référencé un vieux fichier)
    - j'ai pensé à versionné toute les données utilisées dans les fichiers par snapshot : mais pour cela il faudrait que je modifie
    les ddl et les scripts d'insertion/maj/delete existants sur plus de 250 tables pour ajouter les colonnes nécessaires...

    En bref je suis en manque d'inspiration et toutes les solutions envisagées me semblent être des usines à gaz non maintenables à terme..
    Sans compter que j'ai essayer de simplifier ma présentation (en réalité c'est un site multitenant ou plusieurs administrateur travaillent de concert et gère chacun un ensemble de sous sites de ventes...)
    Je apprête à répondre à mon boss que c'est mission impossible mais je voulais jeter une dernière bouée auprès de vous, au cas où...

    Merci de m'avoir lu...

  2. #2
    Expert confirmé 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
    Par défaut
    Bonjour,

    Probablement que je n'ai pas tout compris par rapport à la complexité de votre application mais il me semble que le plus simple sera de stocker les fichiers de configuration dans la base (ou ailleurs et les lire comme tables externes). Aujourd'hui l'espace de stockage est plutôt bon marché. Et probablement que vous n'aurez pas besoin de garder tout l'historique d'un site mais seulement les dernières N versions des fichiers.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 000
    Billets dans le blog
    6
    Par défaut
    La solution la plus simple à mon gout est de travailler sur des documents XML intégrant la totalité du versionning, c'est à dire :
    • un document xml pour ListeProduit par site et version
    • un document xml pour ListeTarifProduit par site et version

    et stocker tous ces doc dans une seule et même table avec les colonnes site, version et la date.

    A partir de là en utilisant XQuery et XPath vous pourrez faire de la mise à jour dans les productions et des comparaisons entre données "live" relationnelles et les données de versionning dans le XML.

    Pensez à faire des vues pour vos ensembles de données XML.

    A +

    PS : je sais que le niveau de fonctionnalité de manipulation du XML sous Oracle, est loin d'être le même que celui de MS SQL Server, mais vous pouvez vous inspirez de mes articles sur le sujet :
    http://blog.developpez.com/sqlpro/p8...ent_xml_simple
    http://blog.developpez.com/sqlpro/p1...vec-sql-server
    http://blog.developpez.com/sqlpro/p1...-modele-en-xml
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Expert confirmé 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
    Par défaut
    A part le fait que les fichiers XML vont nécessiter d'une manière inhérente encore plus d'espace de stockage je ne vois aucun bénéfice à votre proposition.

Discussions similaires

  1. Problème de mise à jour de données avec IBClientDataset
    Par Papino dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/09/2005, 14h04
  2. [DOM] Problème entre différentes versions de java
    Par scorpiwolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 17/03/2005, 11h40
  3. problème avec ma base de données
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 25/02/2005, 12h59
  4. Problême d'ouverture base de données
    Par comment_ca dans le forum Oracle
    Réponses: 20
    Dernier message: 14/12/2004, 12h39
  5. problème insoluble avec CHECK
    Par NiBicUs dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 25/03/2004, 17h13

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