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

Développement SQL Server Discussion :

Besoin d'un avis


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut Besoin d'un avis
    Bonjour,
    j'ai une base de données "PRINCIPALE" qui est remplie à partir d'autre bases "SECONDAIRES".
    En gros chaque bases SECONDAIRE est liées à la PRINCIPALE et insère une ligne à chaque nouvelle enregistrement.

    Mon problème est que les bases externe ne sont pas toutes de ma création et je me retrouve avec des types d'identifiants différents (bigint et uniqueidentifier...)

    C'est pourquoi j'ai pensé, a creer un champ de type XML pour retrouver mes données qui contiendra les valeurs nécessaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Exemple:
    <Reference>
         <id type="long">4546</id> <!-- Id externe de type long -->
    </Reference>
     
    <Reference>
         <id type="guid">4456-4565.....</id> <!-- Id externe de type GUID -->
         <PartitionDate type="datetime">03/05/2005</PartitionDate> <!-- Id de la partition -->
    </reference>
    Pour le fonctionnement coté applicatif, tout se passe à merveille !! Je récupère un XML que j'analyse dans le code et je récupère mes données pour interroger les bases SECONDAIRES.


    Mon problème est que les serveurs SECONDAIRES vont effectuer des mises à jour des données sur le serveur PRINCIPALE en se basant sur leur Id ( contenu dans le XML)

    j'ai donc une requête de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE INDEX
    SET IDX_type = XXX
    WHERE Id = ( SELECT I.Id
                 FROM INDEX I
                 CROSS APPLY idx_xml.nodes(N'/reference[1]') T(C)
                 WHERE C.Value(N'(//id)[1]',N'bigint') = XXXXX)
    Mon problème est que c'est long, j'ai un résultat en 25 secondes ( ma table fait 2 millions de ligne pour le moment) ce qui est beaucoup trop long, j'ai essayer d'optimiser à mort en mettant en oeuvre ce que j'ai vu dans pas mal de tuto (index principal xml, index secondaire ...).

    Avant je n'avais que des systèmes avec des id de type long et j'avais donc un champ IdExterne(long), mes updates était instantanée et la en XML je perd trop de temps.

    Je ne veux pas faire des champs tout crade avec idExterneLong, IdExterneGUID, PartitionDate... et un champ sur deux de rempli ce n'est pas propre je trouve.

    Ai-je un moyen d'optimiser mon XML ??

    Voyez vous une meilleur solution ??


    Merci d'avance, j'espère avoir été clair.

    PS : désolé pour la longue tirade.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Par nature le XML est faiblement optimisable et en comparaison avec du pur relationnel ce sera toujours un match totalement inégal. Vous ne pouvez donc pas exiger des performances de quelques chose qui ne peut y prétendre.
    Par exemple il n'est pas possible de traiter le XML de manière parallèle alors que c'est le lot quotidien du relationnel (données ensemblistes donc pas de relation d'ordre !).
    Reconcevez votre système en purgeant le XML, en utilisant du relationnel correctement typé, et en indexant !

    A +
    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/ * * * * *

  3. #3
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Ok, c'est ce que je pensais, c'est dommage mais je vais abandonné cette idée car même si les dit update sont rare, il reste présent de temps en temps.



    Merci pour ta réponse.

  4. #4
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Pour info, si vous chercher à optimiser une recherche xml, il y a un article tres bien fait sur le MSDN en utilisant les catalogues de recherche textuelle :
    http://msdn.microsoft.com/fr-fr/library/bb522491.aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/11/2005, 13h35
  2. Besoin d'un avis entre un CDD et un CDI...
    Par klereth dans le forum Emploi
    Réponses: 20
    Dernier message: 03/08/2005, 10h46
  3. Réponses: 6
    Dernier message: 28/02/2005, 14h32
  4. optimisation requetes (besoin de votre avis)
    Par seb92 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/12/2004, 11h27

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