2017-03-17 2 views
1

Pour mon C++ programme, j'utilise jobs.yml qui contient des informations sur les emplois au format YAML comme:Yaml à la base de données

141647523: 
    JobType: Turbo 
    LocalJobID: 16773779.0 
    Status: Done 
    SystemPriority: 0.0 
    UserPriority: 8.0 

Puis-je utiliser la bibliothèque yaml-cpp pour l'analyse du fichier et casting emplois C++ Job objets. En raison de la grande taille de jobs.yml (~ 900Mb) je ne peux pas lire tous les fichiers à la fois au début du programme et stocker dans RAM.

Comment puis-je surmonter cet obstacle? Je suppose que je devrais convertir jobs.yml à la base de données et dans le programme obtenir les données souhaitées à travers sql demandes? Dans ce cas, que dois-je faire?

Ou peut-être existe-t-il des solutions plus simples?

+0

flyx a une bonne réponse ci-dessous, mais considérez aussi qu'un fichier YAML de 1 Go n'est probablement pas la solution la plus efficace. Considérez un format binaire (par exemple SQLite, ou quelque chose) - vous verrez probablement des économies massives à la fois dans la taille du fichier et le temps de chargement. –

+0

@JesseBeder Avez-vous un tutoriel ou des exemples d'utilisation de 'YAML :: Parser.HandleNextDocument'? –

Répondre

2

yaml-cpp dispose d'une API basée sur les événements. Dérivez simplement de YAML::EventHandler et utilisez YAML::Parser.HandleNextDocument. Traitez ensuite les événements de votre gestionnaire d'événements un par un. Cela devrait vous éviter de charger le fichier entier dans la RAM.

+0

Avez-vous de bons exemples d'utilisation de 'YAML :: Parser.HandleNextDocument'? Ou peut-être un tutoriel? –

+0

Malheureusement pas. Je ne suis pas un utilisateur de yaml-cpp. – flyx