Welche offline Datenbank?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Welche offline Datenbank?

    Liebe vb-paradise Community,

    ich suche eine Empfehlung für eine Datenbank die am Besten auf mein Problem zugeschnitten ist.

    Derzeit kommuniziert mein VB Programm erfolgreich mit einer Access Datenbank mit den folgenden 10 Variablen (ungefähre Angaben):
    • 6 Variablen mit einem Text <250 Zeichen
    • 1 Variable mit einer Jahreszahl
    • 1 Boolean
    • 1 RTF Text (beliebig viele Zeichen, meistens 0 - 2000)
    • 1 Text mit tlws SEHR vielen Zeichen (bis ~2 Millionen, wobei das Access nicht wirklich schafft)

    Die Datenbank liegt bei jedem Nutzer des Programms lokal auf der Festplatte oder dem USB Stick - eine online Funktion ist nicht nötig.
    Im Programm mache ich öfters Abfragen à la "SELECT * FROM Database WHERE ..." um einen Teil der Daten selektiv rauszufischen.
    Ich habe derzeit ~200 Datensätze mit diesen 10 Variablen in der Datenbank, mehr als 10000 Datensätze sind sicher bei keinem User nötig (ich halte 1000 schon für viel).
    Ich will keinem Nutzer irgendeine Installation einer Datenbank aufzwingen, da das Programm auch tlws auf Arbeits-PCs genutzt wird, bei denen man nichts installieren kann.

    Ein Kollege meinte, dass ich nicht jedem Nutzer Access aufzwingen kann.
    Bisher habe ich tatsächlich nicht wirklich darüber nachgedacht, da jeder Windows PC auf dem ich das Programm getestet habe Access installiert hatte...
    Kennt ihr eine gute Alternative? Der Kollege meinte SQLite, wobei ich damit keine Erfahrung habe und auch nicht weiß ob das auf allen PCs vorinstalliert ist.

    Liebe Grüße
    Dr_Gre
    Ich würde Sqlite empfehlen und außerdem wenn du dich mit Sqlite auseinandergesetzt hättest, dann wüsstest du das dort nichts "vorinstalliert" sein muss. ;)
    Sqlite speichert seine Daten in einer lokalen Datenbankdatei ab die dein Programm generiert mit entsprechender Bibliothek.
    Weiterhin wenn du dich mit der Datenbankentwicklung auskennen würdest, dann wüsste man das diese nicht für Texte bzw sogenannte Blobs ausgelegt sind bzw. nicht der Sinn und Zweck ist.

    FormFollowsFunction schrieb:

    Wenn die Daten nicht verschlüßelt werden müssen, würde ich zu einem Dataset greifen.


    Stimmt, das habe ich vergessen zu erwähnen: die Daten müssen nicht verschlüsselt werden.
    Wäre ein Dataset dafür effizienter als SQLite? (Ich habe mit keinem der beiden Erfahrung)
    die Daten sollen nur schnell geladen, gespeichert und gefiltert werden können.
    im Programm selbst werden diese dann in einer DataGridView dargestellt.
    Datasets sind von Natur aus einen ticken schneller, weil ja alle Daten zu beginn der Anwendung in den RAM geladen werden, was aber auch bedeutet, dass deine Anwendung immer mindestens so groß ist, wie dein Dataset.
    Bei SQLite lädst du die Daten so wie du sie brauchst von der Platte, wesegen es auch zu Empfehlen ist, die großen Texte erst dann zu laden, wenn du sie auch wirklich brauchst. Das spart RAM, die Anwendung startet schneller, brauch jedoch evtl. etwas länger bis zum Anzeigen der Daten.

    Bei den jedoch inzwischen handelsüblichen Rechnern, und der von dir beschriebenen Datenmenge ist es jedoch ziemlich unherheblich, RAM ist üppig, und die Zugriffszeiten sind selbst auf HDDs aber vorallem SSDs schneller denn je.

    Einzig für dieses rießige Textfeld würde ich eher zu SQLite anstatt zu Datasets tendieren. Wenn ein User da wirklich mal mehrere tausend Datensätze mit mehreren Millionen von Zeichen drin hat (Nicht vergessen, .NET Arbeitet in UTF-16, 2/4 Byte per Zeichen) Dann würde die Anwendung beim Start jedes mal mehrere GB in den RAM laden. Andererseits könntest du auch einfach einen Link auf eine zusätzliche Datei im Dataset speichern, und dann, wenn benötigt, den Text entsprechend nachladen.

    Am Ende ist es eine Frage des Geschmacks. Und wenn du dich nicht entscheiden kannst, benutz einfach beides. ;)

    Edit:
    Eines habe ich vergessen, eine SQLite-Datenbankdatei wird vermutlich ein ganzes Stück kleiner sein, als die XML-Datei die das DataSet generieren würde. Aber wie schon gesagt, bei deinen Datenmengen, unerheblich.
    An sich würde das mit dem DataSet sehr gut gehen, v.a. das hier:

    Dr_Gre schrieb:

    die Daten sollen nur schnell geladen, gespeichert und gefiltert werden können.
    im Programm selbst werden diese dann in einer DataGridView dargestellt.


    Nur mach(te) ich mir etwas Gedanken über Anforderung 5:
    • 1 Text mit tlws SEHR vielen Zeichen (bis ~2 Millionen, wobei das Access nicht wirklich schafft)
    Aber ich hab's mal mit nem String mit 104 Mio. Zeichen probiert. Geht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    So oder so - also auch wenn du dich für SqLite entschieden hättest - sollte dein Programm mit typisierten(!!!!) Datasets arbeiten.
    Aber wie angedeutet ganz wichtig der Unterschied zw. typisiertem und untypisiertem Dataset. Also keinesfalls einfach mit Dataset arbeiten (weil damit ist üblicherweise das untypisierte gemeint) - sondern nur mit typisiertem Dataset.
    paar Tuts:
    Daten laden und speichern
    vier Views-Videos
    Grundlagen: Relationale Datenmodellierung