Datenhaltung in Projekten



  • Schönen guten Morgen zusammen.

    Ich beschäftige mich seit über 1 1/2 Jahren mit Java/JSF. Da arbeite ich fast ausschließlich mit "echten" DBMS wie Oracle oder MySQL.

    Da ich mich zu nativen Sprachen wie C und C++ irgendwie mehr hingezogen fühle und endlich auch mal die Zeit gefunden habe, mich aktiv mit C++ zu beschäftigen, interessiere ich mich natürlich auch für gewisse Themenbereiche, die für mich in meinem bisherigen Umfeld eigentlich kein Thema waren.

    Und nun zum eigentlichen Grund, wieso ich den Thread aufgemacht habe:

    Ich bin auf der Suche nach einer Möglichkeit um Daten effektiv und schnell ablegen zu können. Also soetwas wie eine "integrierte Datenbank".
    Existiert soetwas? Oder muss ich wirklich alles in Datenstrukturen und somit in manipulierbaren Dateien auslagern?

    grüße.



  • Vielleicht wäre Berkeley-DB was für dich?





  • Meinst du eine in die exe integrierte Datenhaltung?
    Für statische Daten: Über kleine Umwege ja.
    Für dynamische Daten: Über sehr sehr sehr viele Umwege: ja

    Im Endeffekt wirst du mit einer extra XML- oder Datenbankdatei wesentlich besser bedient sein.

    Wenn du damit das DBMS an sich meinst wäre SQLite eine Möglichkeit.



  • SQLite ist ein self-contained, embedded DBMS, im C Quelltext als einzelne Datei erhältlich. Es gibt verschiedene C++ Wrapper zur Integration in ein C++ Projekt.

    HDF5 ist schon ein ziemlicher Brocken, der allerdings wohl recht fix auch mit riesigen Datenmengen umgehen können soll.



  • Faszinierend.

    SQLite habe ich mir bereits angeschaut. Berkeley ist mir aber nicht untergekommen. Ich habe den Namen zwar schon öfter gehört, aber es dank Oracle noch nicht in dem Micro-DBMS-Bereich einordnen können.

    Bei SQLite störte mich bisher das Serielle schreiben. Es ist nicht möglich aus mehreren Prozessen parallel in die DB zu schreiben. Ich kann leider heute (noch) nicht einschätzen inwiefern mich das behindern könnte.

    Beim ersten Betrachten sieht das allerdings tatsächlich nach dem aus, was ich such(t)e.

    @ rean:

    Ja, ich meine eine Integration in .exe Dateien. Sodass ich quasi einen micro-DBMS-server mit implementiere und dann dort jegliche Daten abspeichern kann. Das soll(te) auch dynamisch machbar sein. Darum möchte ich ja ein DBMS haben und nicht über Dateien.

    Hat da bereits jemand Erfahrungen in dem bereich gesammelt und kann mir Tipps zu Stolpersteinen oder sonstigem geben?

    HDF5: Muss ich mir gleich mal anschauen.
    Vor allem interessiert mich bei allen genannten die Lizenzierung. Aber das kriege ich schon selbst auf die Kette 🙂

    Vielen dank nochmals an alle.

    Best regards.

    memento



  • So eine dynamische Datenhaltung in der exe ist wie gesagt nur über extrem viele Umwege zu bewerkstelligen.

    Die Idee:
    In den Resources einer exe kann man ja beliebige Daten ablegen, diese werden im Normalfall ja vom Compiler in die exe hereincompiliert. Windows bietet Funktionen an mit denen man die Resources einer exe-Datei verändern kann (müsste jetzt aber auch erst wieder suchen). Allerdings funktioniert das nur bei exe-Dateien die gerade nicht ausgeführt werden.
    Hab vor Jahren mal folgenden Aufbau konstruiert:
    MainExe hatte folgende Resources:
    XML-Datei für die Datenhaltung
    Zweite exe-Datei (EditExe)
    Der Vorgang:
    Die XML-Datei wurde beim Start der MainExe direkt aus den Resources in den Speicher geladen und damit wurde dann gearbeitet. Beim Beenden musste zunächst die EditExe aus den Resources entpackt werden, die Daten wurden in eine temporäre XML-Datei auf Platte geschrieben und das Hauptprogramm wurde beendet.
    Jetzt konnte die EditExe die Resources der MainExe updaten und sich anschließend selbst löschen (über ein Batch-Skript).

    Du siehst dass dieses Verfahen 1. Unglaublich kompliziert und 2. Sehr viele Hinkefüße hat: Funktioniert z.B. schonmal garnicht wenn die MainExe mehrmals ausgeführt werden soll, ein weiteres Problem könnte sich auftun wenn dem Benutzer die Rechte fehlen um die MainExe zu bearbeiten etc. etc. etc.

    Von daher eigentlich absolut nicht zu empfehlen, ich hab vor Jahren nur mal Just-for-Fun damit rumgespielt.

    Mit einer extra Datei bist du wirklich besser und einfacher bedient.

    [EDIT]
    Hab grad einen entsprechenden MSDN-Artikel gefunden:
    http://msdn.microsoft.com/en-us/library/ms648008(VS.85).aspx#_win32_Updating_Resources
    Da steht bei den einzelnen Funktionen:
    "It is recommended that the resource file is not loaded before this function is called. However, if that file is already loaded, it will not cause an error to be returned."
    Laut diesem Artikel: http://www.codeproject.com/KB/cpp/UpdateResource.aspx
    müsste eine exe sich theoretisch sogar selbst editieren können.
    Aber nochmal mein Appell: Sowas sollte man nicht machen!



  • es klingt auf jeden fall lustig 🙂

    Ich werds mir mal anschauen / testen. Einfach nur aus purem Interesse.
    Produktiv würde ich soeinen Mechanismus eher nicht einsetzen wollen. Da greife ich doch eher auf die "konventionelle" Lösung mit meiner micro-dbms-Idee zurück.

    Das editieren von Exe-Dateien (sich selbst oder gar andere), klingt schon so'n bischen nach viraler Manipulation. Ich könnte mir sogar vorstellen, dass so mancher Virenscanner evtl Alarm schlagen könnte?



  • @Memento:
    Falls du das HDF5 benutzen/testen solltest, kannst du dann bitte deine Erfahrungen posten? Wir benutzen im Moment ein eigenes Dateiformat, vielleicht ist HDF5 eine Alternative dazu und da bin ich sehr an den HDF5 Fähigkeiten interessiert.



  • memento schrieb:

    Bei SQLite störte mich bisher das Serielle schreiben. Es ist nicht möglich aus mehreren Prozessen parallel in die DB zu schreiben. Ich kann leider heute (noch) nicht einschätzen inwiefern mich das behindern könnte.

    Generell ist es eine gute Idee, die Datenzugriffsschicht der Anwendung zu kapseln. Wenn Du dann feststellst, daß Deine Datenbank Deinen wachsenden Ansprüchen nicht mehr genügt, kannst Du mit relativ wenig Aufwand auf eine andere Datenbank wechseln.



  • @DocShoe
    Werde ich - ich kann dir aber leider kein genaues Datum nennen, da ich derzeit Projektmäßig viel zu tun habe und mich um C++ in meiner kaum vorhandenen Freizeit kümmere.

    @WonkoTheSane
    Dennnoch möchte ich von vorn herein das richtige selektieren um später eben Aufgrund des zusätzlichen Aufwandes nicht wechseln zu müssen.
    Denn wenn ich jetzt erstmal SQLite nehme, bleibt mir ein späteres einarbeiten in z.B: Berkeley oder HDF ja sowieso nicht erspart. Klar würde ich für ein kleines Tool nicht ein OR Mapping einbauen. Aber bei allem was 3000+ Zeilen hat, kann man da drüber nachdenken..

    So long, memento.



  • Ich verwende SQLite jetzt knapp ein Jahr, es ist einfach ein gutes Tool und
    mit gutem Gewissen zu empfehlen. Die Performance ist (wie bei SQL allgemein)
    etwas schlaff, aber ausreichend. Für Projekte mit kleinen und mittleren
    Datenmengen auf jeden Fall ok.


Log in to reply