Datenspeicherung



  • Hallo zusammen,
    ich möchte seit langem ein kleines Projekt für mich realisieren. Ich möchte ein eigenes kleines Vokabelprogramm schreiben, in welches man seine Vokabeln eingibt und diese dann wieder abgefragt werden. Da auch Zusatzangaben wie "Sprache", "Wie oft abgefragt" etc. gespeichert werden sollen, wollte ich das eigentlich mit einer MySQL Datenbank realisieren. Da ich aber mit den ganzen MySQL Schnittstellen nicht klar komme, suche ich nun nach einer anderen Möglichkeit. Daher meine Frage:

    Wie speichert ihr in C++ viele Daten ab? Ich denke mal nicht, dass ihr alle mit Datenbanken arbeitet. Soll ich alles etwa in einer .dat abspeichern? Wie würdet ihr das in C++ realisieren?

    Vielen Dank
    lg, freakC++



  • Einfache Text-Datei zeilenweise.
    Kopfzeilen: Namen der Sprachen, Namen der Datei.

    deutsch
    englisch
    Im Bus
    In the Bus
    

    Und dann die Daten: zwei Zeilen für die Vokabeln und z.B. zwei Zahlen für die Punkte.

    Fahrer
    driver
    4
    7
    Sitz
    seat
    4
    5
    Bitte tun Sie mir nicht weh!
    Please don't hurt me!
    4
    3
    


  • Und das ist ein "annerkanntes Verfahren"? In der Schule habe ich nämlich dieses Jahr alles mögliche über Datenbanken gelernt und welche Vorteile es hat.

    Ich habe an diese Variante nämlich auch schon gedacht, doch dass das der erste Vorschlag ist, hätte ich nicht gedacht. Läuft Datenspeicherung echt so simpel ab?

    Vielen Dank
    lg, freakC++



  • Wenn das nicht mit einer DB geschieht und im Textformat ist, dann wird oft XML verwendet.



  • Ok, damit habe ich auch noch keine Erfahrung. Sollte ich mir das dafür aneignen bzw. hat es große Vorteile oder ist die ".txt - Variante" auch legitim?

    Vielen Dank
    lg, freakC++



  • Also reichen tut die normale Textvariante für dein Vorhaben schon, aber schädlich ist es auch nicht, wenn man in etwa weiss, was XML ist (ist ja auch nichts schweres dabei und prinzipiell sehr logisch aufgebaut).



  • Ich speichere Daten hauptsächlich binär ab. Damit spart gegenüber etwa XML viel Speicherplatz, was sich besonders bei großen Datenmengen bemerkbar macht.
    Außerdem ist Schreiben und besonders das Einlesen deutlich weniger CPU-lastig als bei einer auch noch so toll optimierten XML-Library (soll heißen, geht schneller).
    Die Nachteile sind, dass das ganze nicht leicht für Menschen lesbar ist (will man aber manchmal auch gar nicht) und dass Änderungen am Format etwas Voraussicht benötigen.

    DBMS wie MySQL können übrigens mehr als nur Daten speichern. Neben Daten finden können sie auch dafür sorgen, dass die Datenbank in einem konsistenten Zustand bleibt, wenn man während eines Schreibvorgangs den Stecker zieht.
    Diese Garantie hast du bei selbstgebastelten Lösungen ohne einiges an Extraaufwand nicht.



  • freakC++ schrieb:

    Ok, damit habe ich auch noch keine Erfahrung. Sollte ich mir das dafür aneignen bzw. hat es große Vorteile oder ist die ".txt - Variante" auch legitim?

    Völlig legitim.
    Beliebte Modifikationen sind:
    - Schneller gelesen werden kann, wenn Du es hinsichtlich des Lesens optimiert speichers. Zum Beispiel Zahlen binär und Strings mit führender Längenangabe statt Terminierung. Aber so wenig schneller, bei Vokabeln unmerklich.
    - Verschlüsseln, damit der User nicht deine hübsch gesammelten Vokabeln raubt. Dabei reicht schon was ganz einfaches.
    - XML, um jemanden damit zu blenden. Perfekterweise wenn die Bedarfsfeststllungskommission zum einen XML verlangt und zum anderen Verschlüsselung, dann haut man einfach einen langen UUEncodierten String in XML-Klammern, hihi.
    - Komprimieren, um z.B. von CD ein wenig Ladezeit zu sparen.
    - Sich ein Format ausdenken, daß die Daten auf der Platte bleiben können und immer nur eine Vorkabel ins Ram hüpfen muß und nicht alle.



  • Falls du komplexere hierarchische Strukturen hast, gibt es auch Alternativen zu XML, wie zum Beispiel JSON oder YAML.



  • Hallo

    So nebenbei erwähnt, es gebe auch noch SQLite. Ist eine Datenbank aber auf Dateibasis. Hier auch gleich einen Link zur Doku: http://www.sqlite.org/docs.html

    Mfg marco



  • Hallo,
    das hört sich gut an...auch volkards Zusatzmöglichkeiten sind verlockend ;). Verschlüsselung werde ich bestimmt einbauen.

    Da ich wie gesagt noch keine Erfahrung mit XML gemacht habe, wollte ich fragen, ob mir jemand ein gutes Tutorial oder eine Seite empfehlen kann, wo das Zusammenspiel von XML und C++ näher gebracht wird.

    edit:Verzeicht mir die Frage, aber XML ist doch eigentlich eine Auszeichnungssprache. Wie kann man damit so einen Verwaltungskram machen. Ich kann ja mit HTML und C++ auch keine Daten speichern 😉 Ich bin auf dem Gebiet eben ein totaler Neuling.

    Vielen Dank
    lg, freakC++





  • Danke für die tollen Infos. 😕

    Keine Sorge, das les ich mir schon durch :p


  • Mod

    freakC++ schrieb:

    edit:Verzeicht mir die Frage, aber XML ist doch eigentlich eine Auszeichnungssprache. Wie kann man damit so einen Verwaltungskram machen. Ich kann ja mit HTML und C++ auch keine Daten speichern 😉 Ich bin auf dem Gebiet eben ein totaler Neuling.

    Enthält HTML denn keine Daten? 😉

    Das könnte zum Beispiel so aussehen:

    <?xml version="1.0" encoding="UTF-8"?>
    <vokabelliste>
         <Titel>Schwierige Wörter, Deutsch-Englisch</Titel>
         <vokabel>
              <Deutsch>Foo</Deutsch>
              <Englisch>Bar</Englisch>
              <Wieoftabgefragt>5</Wieoftabgefragt>
         </vokabel>
         <vokabel>
              <Deutsch>vernünftig</Deutsch>
              <Englisch>sensible</Englisch>
              <Wieoftabgefragt>7</Wieoftabgefragt>
              <DavonFalsch>4</DavonFalsch>
         </vokabel>
    </vokabelliste>
    

    Das ist wie du siehst natürlich ziemlicher Overkill für dein Problem. Aber als Übung ziemlich gut.



  • Ja, das wäre wirklich ein Overkill ;). Bedeutet das nicht, dass XML vielleicht doch nicht so angebracht wäre, weil genauso eine mögliche Pseudo Datenbank aufgebaut sein würde.

    lg, freakC++


  • Mod

    freakC++ schrieb:

    Ja, das wäre wirklich ein Overkill ;). Bedeutet das nicht, dass XML vielleicht doch nicht so angebracht wäre, weil genauso eine mögliche Pseudo Datenbank aufgebaut sein würde.

    lg, freakC++

    Der Vorteil von XML ist, dass es einen guten Kompromiss zwischen Maschinen- und Menschenlesbarkeit darstellt. Zudem ist das Format sehr gut erweiterbar, dabei aber trotzdem kompatibel zu alten Versionen. Und das Parsen von XML ist sehr weit verbreitet, man findet also viele fertige Lösungen. Und man kann das Format sogar mit anderen Programmen lesen, eben weil es standardisiert ist.

    Ist halt die Frage, ob du diese Vorteile brauchst. Oder welchen Zweck das Programm haben soll - ich nehme mal an du schreibst es zu deiner eigenen Übung. In diesem Fall ist halt die Frage was du üben möchtest: Umgang mit XML oder Entwerfen von eigenen Formaten. Ich würde erstmal zum eigenen Format raten, denn dann machst du dir mehr Gedanken darum und machst wahrscheinlich trotzdem noch ein paar Fehler. Und dadurch lernt man, wie ich finde, mehr. Solltest du später mal für etwas anderes XML brauchen, ist das immer noch sehr flott selbst zu lernen.

    (Und ehrlich gesagt bin ich kein Fan von XML. Die Vorteile sind mir zu akademisch, ich habe sie noch nie gebraucht. Dafür jede Menge Overhead. Aber dies ist nur meine Meinung, für die ich sicherlich gleich in der Luft zerfetzt werde. Eine hübsche Liste, mit allen (menschenlesbaren!) Einträgen durch ein Trennzeichen (Beispielsweise newline) getrennt wäre meiner Meinung nach das richtige. Also eigentlich genau das gleiche wie in der ersten Antwort die du bekommen hast).



  • Ok, das leuchtet ein. Ich denke, dass ich erstmal Abstand von XML halten werde und mir Gedanken über das eigene Format machen werde. Un ja - es soll zu meiner Übung sein.

    Vielen Dank
    lg. freakC++



  • Nexus schrieb:

    Falls du komplexere hierarchische Strukturen hast, gibt es auch Alternativen zu XML, wie zum Beispiel JSON oder YAML.



  • oja ... stimmt! Danke für die Erinnerung ;).

    lg, freakC++




Log in to reply