Datenbank oder Datei ??
-
Heiho,
bräuchte mal Erfahrungswerte oder Vorschläge, meine Aufgabe wird demnächst die Untersuchung eines Kompressions-Algorithmuses sein, bei dem ich einige MB's (ich schätze es werden einige 100MB's sein) quasi spiegel, kompremiere und anschließend mit dem Original vergleiche. Das Original bekomme ich in Form einer Datei. Unter der Prämisse, daß ich die Operationen nicht komplett im Hauptspeicher ausführen kann, muß ich sie also auslagern... so gibt es viele Möglichkeiten, dabei spielt auch die Geschwindigkeit eine Rolle, denn ich habe mehrere Datensätze und mehrere Filter- bzw. Kompressionsmethoden. Die Datensätze bestehen dabei ausschließlich aus Float's...
1. Möglichkeit: Transfer in eine (MySQL) Datenbank, sämtliche mathematischen Operationen finden "direkt" in der Datenbank statt.
2. Möglichkeit: Transfer in eine (MySQL) Datenbank, die mathematischen Operationen finden "sequentiell" im Hauptspeicher statt. Das Absichern wieder in der Datenbank.
Die 3.te und 4.te Möglichkeit ergibt sich, wenn ich die Datenbank durch eine Datei ersetze. Wie würdest Ihr vorgehen ? Kann die (MySQL) Datenbank eigentlich Float's abspeichern ?
So Long Winn
-
Unter der Prämisse, daß ich die Operationen nicht komplett im Hauptspeicher ausführen kann
öhm, du bist dir bewusst, das auch Datenbanken deine Daten zT im Hauptspeicher lagern?
"direkt" in der Datenbank statt.
entweder sind meine SQL Kentnisse mittlerweile so eingerostet oder ich verstehe nicht, wie du das meinst mit dem direkt?
Um den Hauptspeicher wirst du nicht rumkommen, wenn du mit den Werten arbeiten willst (okay, du kannst sie natürlich auch in irgend welchen CPU Registern hin und her schieben. Nur hast du keine 100MB Register (idr) ;)).
zwischenzeitlich kannst du die Daten ja in eine Datei schreiben, falls das deine sorgen sind. Dann musst du nur drauf achten, dass die Datei nicht etwa im RAM gebuffert wird
-
öhm, du bist dir bewusst, das auch Datenbanken deine Daten zT im Hauptspeicher lagern?
Das würd ja dann für die Datenbank sprechen... und natürlich finden die arithmetischen Operationen innerhalb des Registers statt, aber das Ergebnis kann ich entweder im Haupspeicher lassen (und später ablegen) oder halt direkt in der Datenbank ablegen
Die Frage läßt sich eigentlich genauer forumlieren, ist die Datei im Zugriff oder die Datenbank schneller ?
Gruß Winn
-
Zum Bearbeiten einer Datenbank ist immer Overhead dabei, sie ist also primär zwangsläufig langsamer als einfaches Dateihandling. Mit Betonung auf 'einfaches'. Es kommt zum Beispiel drauf an, wieviele Dateien Du verwenden willst, und ob vielleicht noch eine Vielzahl anderer Dateien in dem Ordner sind, dann werden nämlich u.U. die Filefunktionen des OS langsamer. Willst Du nur auf einer Datei arbeiten, dort eventuell noch mit Seek arbeiten und wirst garantiert keine Probleme mit irgendwelchen Umspeicherungen innerhalb der Datei bekommen, dürftest Du sicher schneller sein als eine Datenbank.
-
Sehe das wie Bitsy... Deine Aufgabenstellung klingt nicht nach einer typischen Aufgabe für eine Datenbank. Vor allem wenn Du einzelne Werte aus einer Datenbank liest wird das dramatisch langsamer sein als ein blockweiser Transfer aus einer Datei.
Vor allem wenn alle Datensätze in der Datei gleich breit sind kannst Du ja mit einem seek(Position * Breite) jede Stelle direkt ansteuern.
-
Um die Datenstruktur noch ein wenig zu präsesieren, handelt es sich um dreidimensionale Daten. Den Kompressionsmethoden ist eins gemein, ich arbeite mich erst durch den kompletten Qubus in X-Richtung, dann den kompletten geänderten Qubus in Y-Richtung usw., d.h. habe ich die Daten nach X-Richtung durchgearbeitet, muß ich anschließend den Qubus von der Y-Seite begehen, muß mir also die entsprechenden Stellen aus dem File herauspicken... was angenehmer über die Datenbank zu regeln wäre, aber ich erkenne wohl, daß es schneller über die Datei laufen würde.
Über die Anzahl der Dateien habe ich mir noch keine Gedanken gemacht, derweil ich mehrere Filter zur Kompression habe, hatte ich erst gedacht, ich mache alles in einem Rutsch... aber wenn die Anzahl die File I/O Performance drückt, dann wohl lieber Step-by-Step.
Nun gut in meinem Fall ist die Datei wohl die beste Lösung...
Danke, Winn