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

Windows Mobile .NET Discussion :

Optimiser le transfert de données sql server vers sql server mobile


Sujet :

Windows Mobile .NET

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 79
    Points
    79
    Par défaut Optimiser le transfert de données sql server vers sql server mobile
    Bonjour,

    J'ai un parc windows mobile avec bases sql mobile .sdf.
    J'ai une application (vb.net 2005) sur les mobiles qui récupère des données sur un serveur SQL Server.
    Pour une table contenant plus de 20000 enregistrements, la récupération dure 2min30 (pour info, sans la requête paramétrée c'était 45min! Donc j'ai déja fait un grand pas...).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQLCmd = New SqlCommand(query, SQLConn)
    SQLReader = SQL2kCmd.ExecuteReader
    While SQLReader.Read()
        SQLCeCmd.Parameters("@ArticleId").Value = SQL2kReader.GetInt32(1)
        SQLCeCmd.Parameters("@Article").Value = SQL2kReader.GetString(2)
        SQLCeCmd.Parameters("@PrixVenteArticle").Value = SQL2kReader.GetDecimal(3)
        SQLCeCmd.ExecuteNonQuery()
    End While
    J'ai fait des tests (dataset + boucle sur dataset, appel des @alias paramètres par leur index) mais je ne gagne pas en temps. Je ne souhaite pas utiliser la réplication sql.
    Y a-t-il une solution (simple?) pour sauvegarder en une seule fois toutes les lignes venant de SQL server dans une table sql mobile ?

    Merci par avance.
    Laumon.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 109
    Points : 96
    Points
    96
    Par défaut
    Tu utilises des procédures stockées?

    si oui,j'ai amélioré le temps de réponse de ma base en n'utilisant plus le dérive parameters pour déterminer le type des paramètres.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    Non je n'utilise pas de procédures stockées dans cette appli/bdd. Je met un "select xxx from yyy" dans le code : variable "query" de type string donné en param du sqlCommand de mon exemple.
    Merci quand même.
    Laumon.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Pourquoi toutes ces complications qui relèvent quand même un peu du bricolage et pourquoi ne pas utiliser la "réplication fusion" ? (qui fonctionne parfaitement entre des bases sql Server CE sur mobile et une base Sql Server 2005 ou 2008 - j'ai fait il y a deux-trois ans un projet basé la dessus chez un client où j'ai plus de 3000 bases sur téléphones portables).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 79
    Points
    79
    Par défaut
    je suis d'accord, la fusion réplication fonctionne très bien bases *.sdf (pocket mais aussi PC pour postes nomades sans sql express), je l'ai testé également. Je n'ai par contre pas fais de test en termes de temps de transfert. Mais dans ce cas précis, je ne peux pas. Du moins, je ne suis pas partis dans cette voix, d'autant plus que je n'étais pas à l'origine du dév et je n'ai pas tout repris
    Tel quel, ça tourne bien, je cherche juste à savoir s'il y a une façon d'optimiser le transfert de données dans la configuration qui est celle présentée (sqlcommand + sqlreader) vers sql server 2000.
    Laumon.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par laumon Voir le message
    je suis d'accord, la fusion réplication fonctionne très bien bases *.sdf (pocket mais aussi PC pour postes nomades sans sql express), je l'ai testé également. Je n'ai par contre pas fais de test en termes de temps de transfert. Mais dans ce cas précis, je ne peux pas. Du moins, je ne suis pas partis dans cette voix, d'autant plus que je n'étais pas à l'origine du dév et je n'ai pas tout repris
    Tel quel, ça tourne bien, je cherche juste à savoir s'il y a une façon d'optimiser le transfert de données dans la configuration qui est celle présentée (sqlcommand + sqlreader) vers sql server 2000.
    Laumon.
    de toute manière, il y a un facteur limitant c'est la liaison mobile serveur.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 79
    Points
    79
    Par défaut
    J'ai repris tout le code en faisant une récupération des données (sql server via wifi) dans un dataset en mémoire.
    Puis j'ai testé 2 méthodes d'enregistrement des données : celle donnée dans mon premier post (2minutes30) et une méthode consistant à copier ligne à ligne le dataset.datatable provenant de sql server 2000 vers un dataset.datatable pour écriture vers sql mobile puis faire un adapter.update(dataset.table(xxx)) final.
    Résultats méthode 2 :
    - Récupération de 20000 lignes sql server du serveur distant vers dataset sur mobile : 15 secondes
    - Copie d'un dataset à l'autre 33 secondes (bouche for each avec un row.add() à l'intérieur)
    - sauvegarde des lignes dataset vers la base sdf sql mobile : 2 minutes 17.

    Donc, j'en conclus que le problème vient principalement du temps pris par l'écriture en base. En second lieu vient la partie de copie d'un ds à l'autre.

    Voici où j'en suis à ce jour...
    Toute proposition sera la bienvenue.
    Laumon.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 79
    Points
    79
    Par défaut
    Fin des tests.
    Après quelques recherches sur les forums, c'est bien le temps d'écriture en base de donnée sql mobile qui bloque. Il y a une légère différence en fonction de l'emplacement de la base sur le mobile (carte sd ou mémoire interne) mais pas significative pour mon application.
    Donc je pense que je ne pourrai pas faire mieux.

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par laumon Voir le message
    Fin des tests.
    Après quelques recherches sur les forums, c'est bien le temps d'écriture en base de donnée sql mobile qui bloque. Il y a une légère différence en fonction de l'emplacement de la base sur le mobile (carte sd ou mémoire interne) mais pas significative pour mon application.
    Donc je pense que je ne pourrai pas faire mieux.
    Ceci dit, rien ne t'empêche de le faire en background. C'est comme cela que je procéde pour les réplication-fusions.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    J'ai fait divers test via un ou plusieurs thread, mais ça ne donne rien dans mon cas précis car 1- l'utilisateur ne travaillera pas sans que la totalité des données soit récupérées; 2- il doit malgré tout attendre plus de 3 minutes (on ne gagne pas en temps); 3- et le pire, le comportement de l'application devient plus qu'invivable : lenteurs voire blocages d'écrans... (Testé sur Motorola ES400)
    Laumon.

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par laumon Voir le message
    Bonjour,
    J'ai fait divers test via un ou plusieurs thread, mais ça ne donne rien dans mon cas précis car 1- l'utilisateur ne travaillera pas sans que la totalité des données soit récupérées; 2- il doit malgré tout attendre plus de 3 minutes (on ne gagne pas en temps); 3- et le pire, le comportement de l'application devient plus qu'invivable : lenteurs voire blocages d'écrans... (Testé sur Motorola ES400)
    Laumon.
    En effet pour la synchro initiale, t'as pas le choix, mais le background est pratique si tu as des envoi/reprise de données en cours de session de travail.

    Je n'ai jamais constaté le moindre blocage sur les téléphones utilisés de mon coté.

    Ceci dit, je ne connais pas ton appli mais je ne comprends pas trop pouquoi il a besoin des 20 000 lignes pour commerncer à bosser.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

Discussions similaires

  1. Synchronisation des données d'Sqlite vers Sql Server
    Par blomkvist dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 05/01/2016, 10h18
  2. [TOS] Transfert de données entre 2 bdd SQL Server
    Par Teddy.Legris dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 30/09/2013, 08h42
  3. import de données du mysql vers sql server
    Par da_latifa dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/10/2009, 15h40
  4. import de données du mysql vers sql server
    Par da_latifa dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 05/10/2009, 16h46
  5. Importer des données de Mysql vers SQL server 2005
    Par housni dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/06/2007, 18h02

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