INI als Datenbank geeignet?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Thias.

    Difinition von Datenbank: ,,Eine Datenbank, auch Datenbanksystem (DBS) genannt, ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe eines DBS ist es, große Datenmengeneffizient, widerspruchsfrei und dauerhaft zu speichern und benötigte Teilmengen in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer undAnwendungsprogramme bereitzustellen."

    Ist die Funktionsweise von INI denn anders? ;)

    Zitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Mr. Johny schrieb:

    funktioniert INI dann nicht wie eine Datenbank
    Nein - siehe Datenbank
    wenn du eine ordinäre Strohhütte mit einem Hotel mit allem Drum und Drann vergleichen willst, buchst du sicher das Hotel...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    @VB1963 Jou.

    Mr. Johny schrieb:

    Datenverwaltung
    INI ist eine Datei zur linearen Datenablage, das hat mit Verwaltung nix zu tun. Und von den mir bekannten Möglichkeiten zur linearen Datenablage ist eine INI-Datei die schlechteste. Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mr. Johny schrieb:

    Difinition von Datenbank: ,,Die wesentliche Aufgabe ist es, große Datenmengeneffizient, widerspruchsfrei und dauerhaft zu speichern und benötigte Teilmengen in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer undAnwendungsprogramme bereitzustellen."

    Ist die Funktionsweise von INI denn anders?
    INi ist fähig, "Datenmengen" (große eher nicht) so leidlich effizient, "widerspruchsfrei und dauerhaft zu speichern", aber nicht: "benötigte Teilmengen in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer undAnwendungsprogramme bereitzustellen."

    Aber wenn du eine lightweight Alternative zu Datenbanken suchst, gugge Daten laden und speichern
    Der dortige DatasetOnly-Ansatz kann zwar - ebenso wie INI - auch keine Teilmengen bereitstellen, stellt aber die Gesamtmenge (also einfach alle gespeicherten Daten) überaus komfortabel bereit.
    Danke, aber ehrlich gesagt hatte ich bis jetzt mit INI nie wirkliche Probleme, auch nicht mit der Performance. Die frage stellt sich nun was man unter "Datenmengen" versteht? Sehr viele Sektionen und Schlüssel oder Sehr größe Einträge? Oder vielleicht auch beides zusammen? Wie wärs wenn ich dazu mal die INI mal richtig Penteste. Ich nutze dafür auch nicht die INI funktion von .Net sondern eine eigene Klasse mit Regex. Der Unterschied bei meiner Klasse ist allerdings, das wenn ich Daten ändere, die komplette INI erst einmal in die RAM lade und sie von der RAM aus beliebig oft ändern kann und wenn ich fertig bin sie abspeichern kann und nicht wie gewöhnlich der weg gegangen wird: Bei jeder Schlüssel Änderung wird die ini nach und nach geladen, bearbeitet und dann gespeichert. Dies ist wirklich eine Geschwindigkeitsbremse wenn es um VIELE Einträge geht, also wirklich viele, sagen wir mal mehrere Tausend in der Sekunde? Die Einträge beinhalten ca. bis zu 32kb? Da hat fängt eine gewöhnliche HDD richtig an zu rattern :). Also ich werde das mal mit meiner INI Klasse mal ein richtigen Stresstest durchführen und kann ja dann mal genauere Informationen dazu geben. Probleme wird da glaube ich denn da aber .Net machen, da bei 32bit Programmen schon bei 2gb Resourcen laden Schluss ist. Ist das auch so bei 64bit?(Weiß ich gerade garnicht)

    Unnötiges Vollzitat entfernt. -Solaris

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

    Mr. Johny schrieb:

    was man unter "Datenmengen" versteht?
    jo, das ist die Frage.
    Eine Datei von mw. 20MB einzulesen ist doch heutzutage kein Thema.
    Das heisst, wenn jeder Datensatz (bei DatasetOnly gibts Datensätze) mw. 100 Bytes einnimmt (das wären mehrere nicht ganz kurze Strings), dann käme man bei ca. 20000 Datensätzen raus, eine Menge, die meist zeitlebens eines Proggis nicht erreicht wird.

    Aber wie gesagt - die Frage

    Mr. Johny schrieb:

    Eignet sich INI als Datenbank?
    ist Unsinn, wenn man Datenbank definiert, wie du es getan hast.
    Definiere Datenbank als "etwas zum Daten speichern und laden", dann eignet sich INI evtl. schon.

    Man könnte "Datenbank" auch definieren als "etwas zum Daten speichern und laden, wobei die Daten in Tabellen organisiert sind".
    Mit Gewalt geht das mit INI immer noch, aber die Aufwand-Kurve dafür strebt ins Groteske.

    Ich empfehle dir nochmal DatasetOnly, und dann bin ich draussen.
    @Mr. Johny
    Dann starte ich mal die gegenoffensive:

    Wieso ist den .ini denn sowas von überaus gut geeignet als Datenbank?
    Die Kiritkpunkte wären:
    • Man kann keine Joins machen (bzw. selbst Implementieren)
    • Man hat keine Relationen (bzw. selbst Implementieren)
    • Man hat keine Transaktionen (bzw. selbst Implementieren)
    • Man hat keine Datentypen (bzw. selbst Implementieren)
    • Man kann nicht konkurrent in einer Datei arbeiten (bzw. selbst Implementieren ??).
    Zudem ist sind und waren .ini Dateien dazu gedacht, am start der Anwendung gelesen zu werden, und dann nie wieder. Nicht umsonst bekommen sie von Windows den Namen "Konfigurationsdatei".

    Wenn du, wie es @ErfinderDesRades vorgeschlagen hat, mit Datasets arbeitest, hast du das alles (mal abgesehen vom konkurrenten Arbeiten), und musst dich nicht einmal darum kümmern wie es auf die Platte kommt. Nur Wo. 2 Funktionen zum Laden und speichern, den Rest erledigt das Framework für dich. Dann liegen die Daten schön formatiert, mit Datentypen und mit relationen im Arbeitsspeicher.

    Das unterliegende Datenformat ist dann halt XML, aber das sollte einen ja nicht weiter stören, da man an die Dateien sowieso keine Hand anlegt.
    Hmm, zusätzlich kommt es den meisten Menschen, die Datenbanken nutzen auch auf Schnelligkeit an. In Datenbanken kannst Du auch alle Datentypen zuvor definieren. So als Beispiel:

    Tinyint mit nur einem Byte speichert Ganzzahlen von -128 bis +127 (mit Vorzeichen) und ohne 255.
    Smallint komm mit 2 Bytes daher und mit einem Wertebereich von -32768 bis + 32767 (mit Vorzeichen) und ohne 65535
    Mediumint (3 Bytes)....
    Int (4 Bytes)....
    Bigint (8 Bytes)....

    Bei Datenbanken musst du niemals alle Datensätze oder zumindest nie alle Spalten/Reihen abfragen.

    Du kannst selbst einen Index setzen (Indizes). Direktes sortieren und gruppieren einzelner Datensätze ist möglich, so wie der direkte Vergleich zu anderen Datensätzen auch innerhalb einer Reihe.

    Ganz zu schweigen von den zahlreichen Bedingungen, die festgelegt werden können.

    Bei einer Ini-Datei könnte ich mir davon fast gar nichts vernünftig vorstellen. Wobei ich vor einigen Jahren die gleiche Idee hatte, weil Datenbanken nicht immer ganz einfach sind, gerade wenn Du viele Daten vergleichen oder zusammenstellen willst aus mehreren Tabellen (Left Join / Right Join / Inner Join).

    Ich denke mal, dass es sicher einfacher wäre sich mit den verschiedenen Datenbankmodellen auseinanderzusetzen. Ich werde gerade auch persönlich von 2 netten Mitboardlern gequält, die mir als begriffsstutzigen Neuling versuchen Ownerdrawing beizubringen. Leider bzw. gut dass ich mich darauf eingelassen habe. Ich bin froh, dass ich damit angefangen habe. Es macht alles einfacher...

    Es leben die Datenbanken, in die Ini-Dateien kann man ja ein paar Böse Gedanken schreiben, wenn man mal nicht so recht mit der Datenbank weiterkommt :).
    @thefiloe Welche nicht (professionelle) relationele Datenbank benutzt Du denn unter vb.net?

    Weil in den allermeisten Fällen (speziell im professionllen Umfeld) dürfte unter vb.net eine relationale Datenbank (https://de.wikipedia.org/wiki/Relationale_Datenbank) mit SQL als Abfrage-Sprache eingesetzt werden und diese haben nun einmal Tabellen.

    Dass NoSQL-Datenbanken keine Tabellen haben (müssen) weiß ich - aber ich habe (leider) diesbezüglich noch kein (professionell, brauchbares) Beispiel unter vb.net dafür gesehen.