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

VB.NET Discussion :

Chargement d'un fichier logs dans une base SQL server trop long


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Chargement d'un fichier logs dans une base SQL server trop long
    Bonjour,

    Je suis actuellement en train d'effectuer un algorithme sous VB Express qui transfère un fichier de logs (une sorte de XML), pour y mettre les données dans la base SQL Server associée.

    Mais le problème, c'est que le téléchargement actuel me semble beaucoup trop long. Bon, il faut déjà que je remplaces toutes mes boucles "Pour" par "Tant que" pour optimiser mon code (la machine restera moins de temps à faire une recherche qu'elle a déjà trouvé), mais à mon avis cela restera encore long.

    Est-ce que quelqu'un s'y connaît un peu là-dedans ? Si des fois il y a moyen de trouver des API, ou trucs dans le genre, capables d'accélérer le traitement...

    Harry Potter

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Si le format est pratiquement du XML, le passer en XML pourrait permettre de le parser avec SAX ou STX pour en extraire bien les données : est-ce que vous voulez toutes les mettre en base ?

    Quand vous parlez d'un temps de téléchargement trop long, de quelle étape s'agit-il ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse Alain,

    Voici un exemple d'une ligne du fichier des logs :

    <log><date>2007-12-11 15:40:54</date><process name="NomSteServer Interface" version="2.3.2.14"/><priority>NOTICE</priority><activity>LOG_AUTH</activity><message>Login_User</message><origin><login org="nomste" domain="local" name="login" ip="192.168.0.127"/></origin><target><infoUser os="Windows Vista" browser="Firefox"/></target></log>

    Je ne souhaite pas tout y mettre dans ma base. Par exemple, je n'extrais pas les données "Windows Vista" ou "Firefox".
    Sinon SAX, STX... C'est quoi ça ? Par contre, en ce qui concerne l'extraction des données, j'y arrive déjà par le biais de mon code. Serait-ce alors plus rapide avec un parseur ?

    Pour la dernière question, je sais pas si je vais bien y répondre, mais le temps de téléchargement trop long se trouve dans la phase du traitement du code.

    Si ça peut être plus clair, je peux décrire mon code brièvement...

    Après ouverture du fichier, traitement de chaque ligne du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    While Not EOF(1)
    'Récupération des données dans des variables
    ...
    Site = PrendreEntre(source, "<site name=" & Chr(34), Chr(34) & "/></target>")'source = ligne en cours du fichier logs (entre<log> et </log>)
    ...
     
    'Vérifier que les données n'ont pas déjà été stockées au préalable dans la table
    ...
    SiteExiste = False
    ...
                '...table site
                indice = 0
                While (indice <= (condition)) And (SiteExiste = False)'Sortir de la boucle quand on a parcouru tout le fichier ou que Site de la ligne en cours a déjà été stocké au préalable dans la table
                    If condition2 = Site Then'je ne rentre pas dans les détails de condition2
                        SiteExiste = True
                    End If
     
                    indice += 1
                End While
    ...
    'On crée les requêtes SQL correspondantes en vue de l'insertion
    ...
                Dim strSQLSite As String = "INSERT into Site(NumSite, Site) VALUES(" & _
                    CptCleSite & ",'" & Site & "');"
    ...
     
                    'Mise en place et execution de la requête d'insertion dans SITE
                    If SiteExiste = False And Site <> "0" Then
                        'Stockage dans un tableau du site pour éviter les doublons
                        SiteNom(CptCleSite - 1) = Site
     
                        cmSQLSite = New SqlCommand(strSQLSite, cnSQL)
                        cmSQLSite.ExecuteNonQuery()
                        CptCleSite += 1
                    End If
    end while
    En fait, le temps de téléchargement est correct quand le fichier logs fait grosso-modo 10 000 lignes. Mais si par exemple, le fichier fait plus de 65 000 lignes, l'attente me semble vraiment beaucoup trop longue (cela reste entre 0 et 2 % au bout de, peut-être, 5 minutes, 1/4 d'heure, voire plus)

  4. #4
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    SAX et STX sont en Java et permettent de lire et transformer à la volée : ils pourraient servir, à confirmer, à générer un CSV directement intégrable en base.Il est tout à fait possible de &quot;parser&quot; soi même un document mais il faut faire très attention à l'utilisation des variables pour que le temps de traitement soit raisonnable. Un parseur est optimisé pour cela mais il est généraliste...

  5. #5
    Invité
    Invité(e)
    Par défaut
    D'accord, merci.

    Mais y'a des trucs, c'est du chinois dans ce que tu me dis pour moi.

    Quand tu dis &quot;parser&quot; ???

    Sinon, existe-t'il un parseur pour VB Express ?

  6. #6
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Parser, c'est reconnaître des éléments dans du texte.

    VB Express, c'est VStudio gratuit ? Alors oui, .Net intègre un parseur XML !

Discussions similaires

  1. chargement d'un fichier csv dans une base
    Par db2newbie dans le forum DB2
    Réponses: 2
    Dernier message: 21/01/2008, 22h29
  2. uploader un fichier dans une base SQL server
    Par Flamby38 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 25/09/2007, 17h16
  3. Réponses: 3
    Dernier message: 27/07/2007, 13h06
  4. enregistrement de fichier XML dans une base SQL
    Par yelkam dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 18/07/2007, 08h58
  5. Tranfert d'un fichier Texte dans une base SQL Serveur
    Par Coin dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/03/2007, 08h55

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