Y0Gi hat geschrieben:Sobald es um schnellen Zugriff und spezielle Abfragen geht, macht sich ein RDBMS schon gegenüber Flatfiles/Marshalling bezahlt.
Hi!
Kaum etwas ist schneller als der direkte Zugriff auf Textdateien. -- Vorausgesetzt du weißt wo diese Textdatei liegt und wie sie heißt. Da kann keine Datenbank mithalten.
Wenn ich also eine Textdatei in einen Ordner schreibe, und in diese Textdatei ein paar Zeilen Text rein schreibe, dann kann ich sehr schnell auch wieder auf diesen Text zugreifen und diesen auslesen. Eine Datenbank hätte in solchen Fällen keinen Vorteil und wäre sogar langsamer.
Wenn ich also Daten habe, die ich nur über einen Schlüssel (z.B. den Dateinamen) ansprechen und finden muss, dann ist die Ablage im Dateisystem keine schlechte Wahl. Die Dateisysteme sind hoch optimiert und finden die Speicheradressen einer Datei sehr schnell.
Shelve bringt in manchen Fällen sogar noch einen Geschwindigkeitsvorteil, da die Datei offen gehalten wird und die Speicheradressen der Daten von Shelve selber verwaltet werden und die Datei nicht mehr im Dateisystem gesucht werden muss. (Dateifragmentierung ausgeschlossen)
Eine Datenbank bringt etwas, wenn ich auf Daten nicht nur über einen eindeutigen Schlüssel zugreifen kann. Z.B. Adressen. Abfragen wie "Gib mir alle Adressen, deren Ort "Innsbruck" ist und deren Nachnamen mit "M" beginnen. Solche Abfragen sind ein leichtes für Datenbanksysteme, aber extrem aufwändig für reine Textdateien. Diese müssten im Normalfall alle durchsucht werden und das kostet Ressourcen.
"Gib mir alle Personen zurück, die in den letzten 30 Tagen bei mir eingekauft haben"... --> Für eine Datenbank kein Problem. Für Dateien im Dateisystem müsste man sich das alles selber programmieren. -- viel zu aufwändig!
Wenn die Datenmenge klein ist und bleiben wird oder wenn sicher ist, dass auf die Daten immer nur über einen Schlüssel zugegriffen werden soll, bringt eine Datenbank keine Vorteile.
Ich glaube sogar, dass in solchen Fällen die Verwendung von Datenbanken sich nachteilig auf die Geschwindigkeit und auf die Dauer der Programmierung auswirkt.
Wenn ich glaube, dass meine Anwendung wachsen wird und es in Zukunft mehr Daten, verschiedenste Daten und jetzt noch nicht vorhersehbare Daten geben wird, dann setze ich auf eine Datenbank -- auch wenn am Anfang das Datenaufkommen noch nicht dafür spricht. SQLite ist dafür sicher keine schlechte Wahl.
So, genug geschrieben...
mfg
Gerold