Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/03/2011, 15h44   #1
Membre éclairé
 
Avatar de jmjmjm
 
Homme Jérémy
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 751
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : avril 2005
Messages : 751
Points : 381
Points : 381
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 :
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 :
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.
jmjmjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 01h04   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 10h51   #3
Membre éclairé
 
Avatar de jmjmjm
 
Homme Jérémy
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 751
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : avril 2005
Messages : 751
Points : 381
Points : 381
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.
jmjmjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h13   #4
Membre éclairé
 
Avatar de jmjmjm
 
Homme Jérémy
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 751
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : avril 2005
Messages : 751
Points : 381
Points : 381
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
jmjmjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h32.


 
 
 
 
Partenaires

Hébergement Web