2017-03-17 3 views
1

Für mein C++ Programm verwende ich jobs.yml die wie Informationen über Aufträge in yaml Format enthält:Yaml zur Datenbank

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

dann für das Parsen von Datei und Casting-Jobs zu C++ Job Objekten Ich benutze yaml-cpp Bibliothek. Aufgrund der großen Größe von jobs.yml (~ 900Mb) kann ich nicht alle Dateien gleichzeitig am Anfang des Programms lesen und in speichern.

Wie kann ich dieses Hindernis überwinden? Ich denke, dass ich jobs.yml in Datenbank konvertieren und im Programm gewünschte Daten über sql Anfragen erhalten soll? Was soll ich in diesem Fall tun?

Oder gibt es vielleicht einfachere Lösungen?

+0

flyx hat eine gute Antwort unten, aber bedenken Sie auch, dass eine 1 GB YAML-Datei wahrscheinlich nicht die effizienteste Lösung ist. Betrachten Sie ein Binärformat (z. B. SQLite oder etwas Ähnliches) - Sie werden wahrscheinlich massive Einsparungen sowohl in der Dateigröße als auch in der Ladezeit sehen. –

+0

@JesseBeder Haben Sie eine Anleitung oder einige Beispiele, wie Sie 'YAML :: Parser.HandleNextDocument' verwenden können? –

Antwort

2

yaml-cpp hat eine ereignisbasierte API. Einfach von YAML::EventHandler ableiten und YAML::Parser.HandleNextDocument verwenden. Verarbeiten Sie dann die Ereignisse in Ihrem Ereignishandler nacheinander. Dies sollte Sie davor bewahren, die gesamte Datei in den Arbeitsspeicher zu laden.

+0

Haben Sie gute Beispiele für die Verwendung von 'YAML :: Parser.HandleNextDocument'? Oder vielleicht ein Tutorial? –

+0

Leider nicht. Ich bin nicht yaml-cpp Benutzer. – flyx