Oliver Arend
Administrator
Administrator
Registriert seit: Aug 2000
Wohnort: Great Falls, VA, USA
Verein: RMV/Solaris/AGM/TRA L1/TCV/MDRA/NOVAAR
Beiträge: 8351
Status: Offline
|
Weiss jemand wo/wie ich rausbekommen kann, wie leistungsfähig bestimmte Datenbanksysteme sind? Die Antwort wird "hängt davon ab" sein, aber ganz grob:
Ich habe in einer Tabelle x Felder und y Einträge (z.B. Verkaufsvorgänge von Raketenteilen mit Angaben wie Datum, Artikel, Artikelgruppe, Kunde, VK- und EK-Preis). Ich mache eine SELECT-Abfrage mit z Kriterien und will darüber hinaus bei bestimmten Feldern summieren (also bspw. nur Kunden in Deutschland, und alle Zentrierringe die 2010 an Privatkunden verkauft wurden bitte zusammenzählen zu einem Eintrag in der Ausgabetabelle, Zentrierringe 2010 an Geschäftskunden in einen anderen Eintrag).
Die Datenbank läuft auf einem aktuellen PC, und der Datenbestand passt vollständig in den Arbeitsspeicher (also maximal einige GB).
Wie lange dauert dann so ein Abfrage?
Oliver
|
Dany
Der mit dem Dremel tanzt
Registriert seit: Aug 2000
Wohnort: Fislisbach, CH
Verein: ARGOS, TRA, HGV
Beiträge: 1213
Status: Offline
|
Das wird ganz schwierig sein, das auch nur annähernd zu beantworten, da jedes Datenbank-System verschiedene Optimierungen hat und anwendet. Die Fragen sind dann immer, z.B. bei Oracle:
Welche Indexe sind definiert, welche Art (Hash, Bitmap, usw) ? Welcher Explain-Plan wurde gefunden ? Welche Forein-Keys, welche Primary-Keys sind definiert ? Wie ist das DB-Filesystem angebunden, welcher Durchsatz kommt vom Disksystem ? Irgenwann muss Du das alles auch mal ins Memory laden. Wie sind die Tabellen organisiert, welches Modell (normalisierter DataStore oder denormalisierter, dafür abfrageoptimierter DataMart) ?
Die Anzahl Felder x hat da nur ein untergeordnete Rolle, der Zugriff über den Join (das Zusammensuchen aller benötigten Informationen) ist das Wesentliche ! Für z brauchst Du die Indexe, die Summen werden erst danach gebildet.
Fly High & Recover Safe Dany Flury ( ARGOS WebMaster & Ariane 4 Team, Schweiz) / EURocketry Forum
|
MarkusJ
Gardena Master of Rocketry
Moderator
Registriert seit: Apr 2005
Wohnort: Kandel
Verein:
Beiträge: 2148
Status: Offline
|
"hängt davon ab" ...
... welche Indizes du verwendest ... welche DB du verwendest ... welche Abfragen du machst
Generell kann ein Index die meisten Anfragen signifikant beschleunigen, benötigt aber einiges an zusätzlichem Speicherplatz. Umgekehrt sind Aggregatfunktionen "teuer", da sie (meist) sequentiell auf dem End-/Zwischenergebnissen ausgeführt werden, wo dann in der Regel kein Index zur Verfügung steht.
Solange du nicht "die Welt" anforderst, solltest du deine Ergebnisse eigentlich innerhalb weniger Sekunden erhalten. Du wirst aber wohl nicht umhinkommen, einige Testläufe durchzuführen.
mfG Markus
WARNUNG: Dieser Beitrag kann Spuren von Ironie beinhalten Ich bin weder eine Suchmaschine, noch ein Nachschlagewerk - PNs zu Themen die im Forum stehen oder dorthin gehören, werde ich nicht beantworten. Bilder bitte NICHT über Imageshack oder andere Imagehoster einbinden!
|
AlexanderM
Epoxy-Meister
Registriert seit: Feb 2004
Wohnort: Düsseldorf
Verein: FAR
Beiträge: 238
Status: Offline
|
Wenn Du die DB selber betreiben willst, solltest Du auch in Betracht ziehen, wie aufwendig Einrichtung und Administration sind. So kann ein einfaches System (Access, MySQL, etc.), das für große Datenmengen und viele (gleichzeitige) Nutzer nicht ausreichen würde, für eine private DB oder die einer kleinen Firma ausreichen, auch wenn eine Abfrage dann ein paar Millisekundne länger dauert, was man dann aber in der Praxis nicht merkt. Auch die Anschaffungskosten sind bei Oracle & Co deutlich höher. Bei Datenbeständen von < 1 GB reicht ein einfaches DBMS sicher aus.
|
Oliver Arend
Administrator
Administrator
Registriert seit: Aug 2000
Wohnort: Great Falls, VA, USA
Verein: RMV/Solaris/AGM/TRA L1/TCV/MDRA/NOVAAR
Beiträge: 8351
Status: Offline
|
Nein, es geht um was berufliches, wo ich keine Details zu preisgeben darf/soll/will. Ich will nichts einrichten, und hab leider auch keine Ahnung von den Details nach denen Dany gefragt hat. Ich wollte die Grössenordnung für die Dauer bestimmter Abfragen bestimmen, in Abhängigkeit von der Datenmenge, und herausfinden ob meine Einschätzung, dass das aktuelle System grottenschlecht ist, richtig ist oder nicht.
Was die Datenmengen angeht: Ich schätze den Bestand auf eine siebenstellige Zahl an Einträgen, und es geht wirklich um Verkaufsvorgänge, und die Abfragen, die mich interessieren, summieren vor allem die Verkaufszahlen einzelner Produkte über ein Jahr, je nach Land und Vertriebskanal, so dass die Ausgabetabelle rund 10 000 Zeilen hat. Da die ursprüngliche Datenmenge in den Arbeitsspeicher eines Rechners passen sollte, und die Firma gross genug ist um eine entsprechende Infrastruktur vorhalten zu können, halte ich es einfach für etwas schwach, dass solche Abfragen mehrere Stunden dauern sollen. Es ist m.E. unwahrscheinlich, dass mehrere solcher Abfragen parallel laufen.
Oliver
|
Neil
99.9% harmless nerd
Administrator
Registriert seit: Aug 2000
Wohnort: Delft
Verein: SOLARIS
Beiträge: 7776
Status: Offline
|
Hi,
das hängt doch damit zu sammen, wie man die Abfrage programmiert, ob man immer im gesamten Datenbestand schaut, oder ob man erstmal fieltert und dann weiter schaut. Wenn ich z.B. bei jedem Kunden in der Artikeliste einen Artikel suche, und gleichzeitig noch das Land des Kunden raus suche um zu sehen wie viele Artikel in dieses Land gegangen sind, so ergibt das insgesamt
Abfragen = Kunden * Artikel * Land
Wenn ich hingegen erstmal nach Ländern Filter, so verkleinert sich die Anzahl der Kunden, und somit auch der gesamte Abfrage Aufwand. Jetzt wäre noc zu klären was mehr Sinn ergeben würde, zuerst nach Ländern oder nach Artikeln filtern? Da es wohl weniger Länger als Artikel gibt die ein Kunde gekauft hat, würde ich erst nach den Ländern filtern. Die Zahl ist auf alle Fälle begrenzt, die Artikel Anzahl nicht.
Es kommt also im Prinzip darauf an, wie gut die Abfragen programmiert wurden. Ich denke das ist auch das, was du wissen willst.
Gruß
Neil
Die Erde ist eine Scheibe. Egal in welche Richtung sich die Menschheit bewegt, sie geht immer auf einen Abgrund zu.
|
Dirk
Überflieger
Registriert seit: Feb 2002
Wohnort: Woltersdorf (Berlin)
Verein: AG Modellraketen, L1, T2, §7, §20,§27
Beiträge: 1886
Status: Offline
|
Interessant wäre die Frage nach der eigentlichen Datenbank. Also z.B. MS SQL, Oracle, MySql, Gupta, TXT Files, Excel uvm. Das wäre schon ein erster Indikator. Kann ja auch sein das da irgendwas wildes hinter hängt. Das mit den indizes geht dann schon etwas in richtung Tuning. "Mein" Datenbanker isst die Dinger sogar zum Frühstück Aber so eine Abfrage bei einer kleinen DB kann keine Sekunden dauern. Gruß Dirk
|
hybrid
SP-Schnüffler
Registriert seit: Mai 2005
Wohnort:
Verein:
Beiträge: 675
Status: Offline
|
Zitat: Original geschrieben von Oliver Arend und die Firma gross genug ist um eine entsprechende Infrastruktur vorhalten zu können, halte ich es einfach für etwas schwach, dass solche Abfragen mehrere Stunden dauern sollen. Es ist m.E. unwahrscheinlich, dass mehrere solcher Abfragen parallel laufen. Oliver
Das ist ganz schwach, selbst wenn die Daten NICHT in den Hauptspeicher passen. Ich betreibe eine Datenbank mit ca 750 Mio Einträgen, (Gesamtgröße der DB ~80GB) die nach diversen Parametern sortiert und gruppiert werden können. Der Rechner auf dem das passiert ist ein normaler Desktop-Rechner mit 8GB Hauptspeicher und einem Quadcore-Prozessor. Die Abfragen dauern nicht länger als einige Sekunden. Grüße Malte
|
Johannes (Axe) Haux
Poseidon
Registriert seit: Okt 2000
Wohnort: D-73035 Göppingen-Jebenhausen
Verein: HGV, AGM, TRA #7891 L2 z.Zt. inaktiv
Beiträge: 1067
Status: Offline
|
Zitat: Original geschrieben von Oliver Arend
Weiss jemand wo/wie ich rausbekommen kann, wie leistungsfähig bestimmte Datenbanksysteme sind?
Wie lange dauert dann so ein Abfrage?
Oliver
Spät, aber vielleicht hilfts. Das größte Problem bei Datenbanken sind die Indices. Dann gibt es noch Views ... z.B. SAP hat den Artikelstamm (eigentliche jede Tabelle) in zig Tables gesplittet und dann eine große View drüber gelegt. Das bedeutet dann: Ein Verdeutlichungsbeispiel: Ich suche Nach einer Artikelnummer: 0.0 Ich suche nach einem bestimmten Artikelnamen: 0.001 Ich suche nach einem Lagerort: 0.01 Ich suche nach allem drei und dazu noch Farbe und Gewicht: zig Minuten. Jetzt sollte man meinen wenn ich jetzt genauere Angaben mache wird der Suchkreis kleiner und es geht schneller, das Gegenteil ist jedoch der Fall: Durch die View die über die Tabellen gelegt ist erscheint der Stamm als eine Tabelle die er nicht ist. Wenn ich nun 5 Felder die alle in verschiedenen Tabellen liegen selektiere so macht die View ein riesengroßes Kreuzprodukt draus in dem es alle möglichen Verbindungen knüpft und geht dann im 2. Schritt her und wirft alle Kreuzprodukte die nicht den Kriterien entsprechen weg - und das dauert. Wenn es dieses Problem ist (aber dazu müsstest Du den Aufbau der DB kennen) müsstest Du zuerst z.B. die Artikelnummern aller Artikelnamen/Farben/Gewichte suchen die Du brauchst und dann mit den Artikelnummer in die Lagerorte gehen. z.B. in dem Du einen Temp-Table aufbaust. Das beschriebene gilt für relationale Datenbanken wie Oracle oder Informix Gruß Johannes
Die Zensur ist das lebendige Geständnis der Großen, daß sie nur verdummte Sklaven aber keine freien Völker regieren können. (Johann Nepomuk Nestroy) Das Merkwürdige an der Zukunft ist wohl die Vorstellung, daß man unsere Zeit einmal die gute alte Zeit nennen wird. (Ernest Hemingway) Es wird niemals so viel gelogen wie vor der Wahl, während des Krieges und nach der Jagd. (Otto Fürst von Bismarck)
|
Zreak
Drechsel-Lehrling
Registriert seit: Jul 2010
Wohnort: Kahl
Verein:
Beiträge: 68
Status: Offline
|
Hey Leute,
kleiner Tipp: Caching ?! Gibt es wirklich einen sinnvollen Grund so eine Abfrage mehr als einmal durchzuführen? Danach muss doch nur bei jedem Verkauf die Verkaufszahl des Artikels in der richtigen Spalte um 1 erhöht werden? Das sollte kaum Aufwand darstellen. (Eine zusätzliche Update Query pro Bestellung => 0,03 s)
Sowas ist meiner Meinung nach kein Problem der Datenbank, sondern ein Aufbaufehler. Warum sollte man jeden Eintrag jedesmal wieder auswerten, wenn man ihn bereits einmal ausgewertet hat?
Gruß, Christoph
P.S. so ne Anfrage kann schon mal dauern, aber bei einigen Stunden, würde ich auch schwitzen.
|
|