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

C++ Discussion :

Base de données en C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Base de données en C++
    Bonjour,
    j'ai besoin de stocker dans un fichier des structures, de pouvoir accéder rapidement à une de ces structures au moyen de clés, de la modifier et de modifier le fichier en conséquence.
    J'ai seulement 300 structures à stocker, je me demande donc si le xml convient (en utilisant la librairie libxml) malgré la lenteur d'accès aux données ou s'il existe mieux.

    Voici le type de structure que je veux stocker :

    fichier station.x
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct station {
    string nom;
    float latitude;
    float longitude;
    float altitude;
    int age;
    int nb_param_obs;
    }
    J'ai besoin d'accéder rapidement à la structure correspondant à une station donnée, sur le critère de son nom par exemple.

    J'ai déjà essayé le format xdr, en utilisant rpcgen station.x, qui me génère du code en C (à condition que nom soit un char* et pas un string) pour lire et écrire mes structures dans le format xdr.

    Je cherche la solution la plus rapide...

  2. #2
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Et pourquoi pas directement en format binaire ?
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Tu peux aller voir du côté de SQLite pour quelque chose de léger et sans serveur.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    oui, mais il me faut réécrire tout le fichier une fois l'une de mes structures modifiées, non ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    merci Julien, je vais regarder ça.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    C'est une appli PC ou embarquée ?

    Pour seulement 300 entrées sur une aussi petite structure, XML fera largement l'affaire même si tu dois régénérer tout ton fichier. Je ne connais pas SQLite mais n'est ce pas un marteau pour écraser une mouche vu le peu volume de tes données ? Charger 300 entrées dans un conteneur (vector, tr1::array ou map si tu utilises ton nom comme index) à partir d'un XML et les sauvegarder seront des actions transparentes pour l'utilisateur sur PC.

  7. #7
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    SQLite c'est justement la tapette pour ce qui est la gestion de base de donnée. C'est pas fait pour gérer d'énormes bases de données, ça va très bien pour les très petites.

    D'ailleurs, c'est le SGBDR le plus utilisé du monde. Il est dans Firefox, dans Thunderbird, et énormément de logiciels de gestion local.

    Son but c'est pas la rapidité (bien qu'il le soit assez pour des petites structures comme énoncé ici) mais de fournir une passerelle SQL pour la gestion de données dans un fichier.

    Plus à se soucier de la sérialisation ni quoi que ce soit, en fait, et ça permet de passer outre la recherche fastidieuse dans un fichier xml.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 124
    Points : 136
    Points
    136
    Par défaut
    Bonjour,

    oui, moi, j'ai fait ça en MySQL, mais ça doit être kif. Une table des champs, une table des structures, puis n tables avec les contenus implémentés par des ordres create/alter table lorsqu'une structure est créée/modifiée.

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Je pense que vous avez tous mal compris tonio_a_588. Il a parle de 300 structures, étant entendu qu'une structure est l'équivalent d'une tabe SQL. Vous semblez avoir compris qu'il n'y avait que 300 records d'une seule structure...

    Il n'a pas parlé de son volume de données, mais j'ai l'impression qu'il s'est procuré quelque chose comme la cartographie de l'Europe chez téléatlas ou navtek

    EDIT: bof, non, c'est plutôt moi qui ait mal compris
    Il dit qu'il a "seulement" 300 structures. Moi quand j'ai 300 structures déclarées dans un projet C++ avec le mot clé struct ou class je sature un peu...

  10. #10
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par camboui Voir le message
    Il dit qu'il a "seulement" 300 structures. Moi quand j'ai 300 structures déclarées dans un projet C++ avec le mot clé struct ou class je sature un peu...
    Autant il aurait dit j'ai "plus de 20 structure", j'aurais compris comme toi, autant là, "que 300 structures", je pense qu'il parlait effectivement de 300 instances

  11. #11
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par tonio_a_588 Voir le message
    oui, mais il me faut réécrire tout le fichier une fois l'une de mes structures modifiées, non ?
    Je vois pas pourquoi.... Si tu compte faire uniquement des sauvegardes; et que tu ne compte pas vérifier ton fichier de l'extérieur, c'est possible en binaire. Par contre, à toi de gérer buffer et autre. Plus casse c*****e, mais niveau perf, t'aura pas mieux.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  12. #12
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    SQLite me semble idéal pour faire ça. Côté rapidité, c'est correct, et la BD est dans un unique fichier facilement déplaçable au besoin. Si la taille de la BD augmente un peu trop, une migration vers un SGBD "normal" reste relativement simple à faire.

    Ce sera toujours moins lourd que n'importe quelle librairie de gestion XML, et plus pratique que n'importe quel container STL qu'il faudra sérialiser plus ou moins à la main...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  13. #13
    screetch
    Invité(e)
    Par défaut
    ca dépend de ce que tu comptes faire avec les instances plus tard; des recherches, des insertions, etc ? dans ce cas SQLite
    mais si c'est juste a serialiser, deux opérateur << bien placés suffisent, donc pas de marteau pour ecraser une mouche comme dirait 3DArchi
    si la seule opération de recherche est une recherche sur le nom, un map et un opérateur << ou deux quoi.

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 12h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 23h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 17h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 23h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 13h18

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