4k Aufrufe
Gefragt in Datenbanken von adalbert Einsteiger_in (65 Punkte)
Hallo!

Ich bastle gerade an einer "Datenbank" in der primitivsten Form: Es sind nur Textdateien!
Wenn das Ding fertig ist, möchte ich mithilfe eines Skripts (PHP oder Perl) eine Auswertung aller Daten in allen möglichen Eigenschaftskombis machen.
Da das Ding nicht so klein ist, stelle ich mir die Frage, ob es nicht performanter wäre eine Datenbanksoftware zu benutzen.
Ich bin mir aber nicht sicher, denn ich hab sowas noch nie gemacht und keine Vorstellung davon, wie das ablaufen würde.
Deshalb mal eine Frage, nur zum besseren Verständnis:

Angenommen ich habe Datensätze wie folgt:
ID Farbe Grösse Preis
1 rot gross 15
2 blau klein 9
3 rot klein 7
.. .. .. ..

Also zwei Eigenschaften mit jeweils zwei möglichen Ausprägungen:
Farbe: rot|blau
Grösse: gross|klein

Dann möchte ich für jede Eigenschaftenkombi die Anzahl des Vorkommens, den Durchschnittspreis und die Standardabweichung des Preises haben.
Also so:

Farbe Grösse Anzahl Preis Abweichung
egal egal 120 10,1 2,4
egal gross 50 14,3 ..
egal klein 70 .. ..
rot egal .. .. ..
rot gross .. .. ..
rot klein .. .. ..
blau egal .. .. ..
blau gross .. .. ..
blau klein .. .. ..

Meine Frage lautet: Wie läuft das so ungefähr ab? Vor allem: Wieviele Queries benötigt man dafür? Geht das mit Einem? Oder braucht man einen Query pro Ergebniszeile? Oder sogar mehr?

Vielen Dank!

14 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Datenbanken sind schnell! ... weniger als 15 Sekunden ...

Ich stimme zu, daß Datenbanken schnell und auch ansonsten sinnvoll sind, aber ich behaupte mal, der Vorteil eines solchen Datenbanksystems fängt erst bei sehr viel mehr datensätzen an, und daß Dein Beispiel in Javascript oder Perl nicht wesentlich länger dauern würde.
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo kicia,

da kann ich nicht zustimmen, eine DB wird ab dem ersten Datensatz sinnvoll, wenn du Schlagworte wie

- Datensicherheit
- Datensicherung
- Datenkonsistenz
- Datenpflege
- Wartbarkeit
- usw.

nicht außer acht lassen willst. Ich würde sagen, bei 1 Mio Datensätze ist auch für Access eine Grenze, bei mehr Datensätzen sollte man über eine andere DB nachdenken (SQL Server, Oracle, MySQL).

Gruß
Ralf
0 Punkte
Beantwortet von adalbert Einsteiger_in (65 Punkte)
Danke für deine Mühe, Ralf. Leider kann ich das Ganze nicht einordnen. Mir fehlen die Kenntnisse um, nur durch Lesen des Codes, zu wissen, was diese Abfrage tut und was dabei herauskommt.
Ich habe probiert es bei mir nachzuvollziehen. War ganz leerreich, mein erstes Mal mit Access. Aber leider nicht von Erfolg gekrönt. Access 2007 bindet dieses ADODB nicht mehr automatisch ein. Laut Google kann man das in der Werkzeugkiste durch Referenzieren von so einem MS Active X Gedöns reparieren, aber diese Kiste ist bei mir ausgegraut. Auch beim Versuch Komponenten nachzuinstallieren hab ich nichts dazu gefunden. Vielleicht liegts daran, dass ich ne Trial benutzt habe und das aus Platzgründen nicht dabei ist?

Wo du gerade die Vorteile einer DB aufgezählt hast, und ich von der bunten Benutzeroberfläche von Access noch ein bißchen high bin, wage ich mal zu fragen, ob es da auch irgendwelche KI-Tools gibt, die einen beim Datenimport unterstützen. Also zum Beispiel unterschiedliche Schreibweisen für dieselbe Sache zusammenzuführen, Sinnzusammenhänge zu erkennen oder sowas?

Ausserdem habe ich es nicht geschafft, Textfelder auf eine feste Grösse zu begrenzen. Rein aus Neugierde würd mich interessieren, wie das geht, damit ich nicht so dumm sterbe.
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hi,

sorry, damit du ADODB verwenden kannst, musst du im Modulfenster im Menü Extras->Verweise den Eintrag "Micrososft AciveX Data Objects x.y Libraries" einbinden, wobei x.y der höchste Wert ist, den du in der Liste so finden kannst. Danach stelle den Cursor irgendwo in den Code und drücke die Funktionstaste F5. Dann wir der Code ausgeführt, das dauert bei der Menge etwas. Du kannst aber der Wert der FOR-Schleife auch erst einmal etwas kleiner definieren. Probiere es einfach aus.

Die Tabelle musst du wie von mir angegeben natürlich erst ein mal händisch anlegen. Den Code von "Public sub" bis "End Sub" kannst du ins Modul hineinkopieren (musst du ja erfogreich ausgeführt haben, sonst hättest du die Fehlermeldung nicht bekommen). Du benötigst das nicht, wenn du schon eine Tabelle mit Werten hast. DIese Prozedur erzeugt halt nur stur eine Million Datensätze, damit man mit der Performance ein wenig spilen kann. Die Tabelle kannst du im Anschluss öffnen, dann solltest du 'ne Ganze Menge zufällig erzeugte Daten vorfinden.

Den letzten Block kopierst du in eine Abfrage (auf SQL umschalten) und führst das Ganze aus, fertig.
Wie kange dauert bei dir die Abfrage? Die 15 Sec basieren auf einem QuadCore mit 4GB RAM und einer schnellen Festplatte.

Melde dich wenn du noch Hilfe brauchst.

Gruß
Ralf
...