Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mehrdimensionale Datenbank ? Firebird (https://www.delphipraxis.net/46147-mehrdimensionale-datenbank-firebird.html)

th_bone 19. Mai 2005 14:25

Datenbank: absoulte Database • Version: 4,87 • Zugriff über: per table und query

mehrdimensionale Datenbank ? Firebird
 
Hallo,

eine Frage an die Datenbankprofis

ich habe ein Problem was die Datenstruktur (ich nutze im moment absolute Database) meiner datenbank angeht

meine TabellenStruktur (ich speichere hier realtime Börsendaten für spätere tests)

ID
Datetime
open
high
low
close

Index auf ID und Datetime

Problem: ich habe jetzt nach ca. 3Wochen bereits knapp 2mio datensätze (was natürlich zu erwarten war)
aber ich musste leider feststellen das der index die datenbankgröße extrem in die höhe treibt
und abfragen sind schon jetzt sehr zeitintensiv

jetzt meine Frage gibt es eine Datenbank (vielleicht Firebird ?) in der ich in einer tabelle daten als array mehrdimensional speichern kann ?

bsp

- ID
\--- Date
\--------- time, open, high, low, close

so könnte ich mir im grunde die indeces sparen

es gibt ja in delphi "childdef" bloß habe ich hierzu nirgens ein bsp oder eine nähere beschreibung
gefunden... und absdatabase scheint das nicht zu unterstützen

eine andere möglichkeit wäre sicher für jede ID eine eigene tabelle anzulegen... aber das widerspricht ja aus meiner sicht dem sinn einer datenbank..

Danke

Ralf

trifid 19. Mai 2005 16:53

Re: mehrdimensionale Datenbank ? Firebird
 
Hallo Ralf,
Zitat:

Problem: ich habe jetzt nach ca. 3Wochen bereits knapp 2mio datensätze (was natürlich zu erwarten war)
ich kenne zwar die "absolute Database" nicht, aber ist die Datenbank für solche Größenordnungen ausgelegt, vor allem im Hinblick auf schnelle Auswertungen?

Zitat:

..und abfragen sind schon jetzt sehr zeitintensiv
wurden vorher Tests durchgeführt?
Kannst du View's verwenden?
Wie sehen solche Abfragen aus?
Und was verstehst du unter zeitintensiv ? (Sekunden, Minuten und Stunden)

Zitat:

jetzt meine Frage gibt es eine Datenbank (vielleicht Firebird ?) in der ich in einer tabelle daten als array mehrdimensional speichern kann ?
das Stichwort ist OLAP, wonach du suchen solltest
Zitat:

- ID
\--- Date
\--------- time, open, high, low, close
manchmal hilft schon eine einfache Denormalisierung
table_1
ID1 // primary Key
Date // Secondary Key

table_2
ID2 // primary Key
ID1 // foreign Key
time // Secondary Key
open
high
low
close

Zitat:

so könnte ich mir im grunde die indeces sparen
gerade der Index macht die Geschwindigkeit

Zitat:

eine andere möglichkeit wäre sicher für jede ID eine eigene tabelle anzulegen... aber das widerspricht ja aus meiner sicht dem sinn einer datenbank..
das siehst du richtig

th_bone 19. Mai 2005 20:39

Re: mehrdimensionale Datenbank ? Firebird
 
Hallo,

erst mal danke für die Antwort...

da ich ja noch nicht so viel in delphi und vor allem mit DBs gemacht habe, habe ich erst
mal die absolute database genommen da ich schnell mit ihr zurechtkam... und bei Firebird
für Delphi 200 leider noch nicht die Componenten zur Verfügung standen die ich
gerne hätte...

ABSdatabase Spezifikation

Getestet hatte ich nur mit kleineren Datenmengen, überrascht hat mich, dass die Datenbank durch den Index gelich um 50% größer wurde...

Mit Zeitintensiv bei der Abfrage habe ich einen Datenserver eines Chartprogrammes genommen - und hier
hat die abfrage der gleichen Datenmenge etwa 7 sec und bei ABSdatabase ungefähr 22 sec gedauert..

Views/OLAP gibt es scheinbar nicht - ich muß mich jetzt doch mal intensiv mit Firebird beschäfigen
naja nächste woche soll ja laut support ein trial von Fibplus für Delphi 2005 verfügbar sein.

Woran kann man den eigentlich erkennen ob eine Datenbank auf schnelle Auswertungen ausgelegt ist - sollten das nicht eigentlich alle DBs sein... ?

cu

Ralf

Hansa 19. Mai 2005 21:02

Re: mehrdimensionale Datenbank ? Firebird
 
Bei so was helfen wohl nur Tests. Indices sind beim speichern auch eher eine Bremse. Zusätzlich zu dem Datensatz an sich muß auch noch der Index angelegt und verwaltet werden. Backup/Restore dauert auch länger usw. Ich würde den Index eher mal draußen lassen und wie gesagt testen. Firebird legt schon selbst so was an, wenn es notwendig ist. Geht es um spezielle Such-Mechanismen oder wozu ein extra Index ?

trifid 19. Mai 2005 23:17

Re: mehrdimensionale Datenbank ? Firebird
 
Zitat:

da ich ja noch nicht so viel in delphi und vor allem mit DBs gemacht habe, habe ich erst mal die absolute database genommen da ich schnell mit ihr zurechtkam... und bei Firebird für Delphi 200 leider noch nicht die Componenten zur Verfügung standen die ich gerne hätte...
auch eine Entscheidung

Zitat:

Getestet hatte ich nur mit kleineren Datenmengen,
hast du von Anfang an gewust, dass 2mio Datensätze reinlaufen
Zitat:

überrascht hat mich, dass die Datenbank durch den Index gelich um 50% größer wurde...
a) Speicherplatz dürfte heutzutage kein Problem mehr darstellen.
b) manchmal ist es mehr manchmal weniger - wie eben die Strukturen (Suchbäume) abgelegt werden

Zitat:

Mit Zeitintensiv bei der Abfrage habe ich einen Datenserver eines Chartprogrammes genommen - und hier
hat die abfrage der gleichen Datenmenge etwa 7 sec und bei ABSdatabase ungefähr 22 sec gedauert..
wie sieht die Abfrage aus?
gibt es einen SELECT ?

Zitat:

Views/OLAP gibt es scheinbar nicht - ich muß mich jetzt doch mal intensiv mit Firebird beschäfigen
naja nächste woche soll ja laut support ein trial von Fibplus für Delphi 2005 verfügbar sein.
unabhängig davon, versuche einfach mal die Daten in den Firebird-Datenbankserver zu übertragen
und teste dann die Antwortzeiten

Zitat:

Woran kann man den eigentlich erkennen ob eine Datenbank auf schnelle Auswertungen ausgelegt ist -
sollten das nicht eigentlich alle DBs sein... ?
nicht jede Datenbank ist gleich - jede Datenbank hat ihre Vor- und Nachteile
Was bedeutet "eine Datenbank ist auf schnelle Auswertungen ausgelegt" ? - da spielen viele Faktoren eine Rolle
wie z.B. Tabellenstruktur, Index, View's oder Aufbau von SELECT's, Reihenfolge der Felder in der Where-Klausel, etc.

Zitat:

Ich würde den Index eher mal draußen lassen und wie gesagt testen.
Ich weiss zwar nicht wie der SQL-Optimierer von "absolute database" funktioniert, aber eine Tabelle mit 2mio Datensätzen ohne Index ist schon mutig
auch beim Interbase ist ein Index bei dieser Datenmenge zu empfehlen

Zitat:

Firebird legt schon selbst so was an, wenn es notwendig ist.
und das dauert dann

Zitat:

Geht es um spezielle Such-Mechanismen oder wozu ein extra Index ?
einfach um den SELECT und WHERE-Klausel zu optimieren, damit der Datenbankserver nicht zur Laufzeit die Hashtabellen von oben nach unten zigmal durchlaufen muss

Hansa 19. Mai 2005 23:45

Re: mehrdimensionale Datenbank ? Firebird
 
Ich wollte darauf hinaus, daß zumindest der Primary Key automatisch angelegt wird. Und der Witz ist eben der : meine Test-DBs haben ca. 10-100 MB ohne Blobs usw. So ganz klein sind sie also auch nicht ! Von Hand habe ich keinen einzigen Index neu anlegen müssen und die Geschwindigkeit ist trotzdem brauchbar.

Allerdings brauche ich schon uniques und die müssen bekanntermaßen zusammengesetzt werden. Aber auch das wird in FB/IB automatisch geregelt. Was ein Index ist, das braucht mir keiner zu erklären, das ist schon klar. Deshalb meine Empfehlung : nicht beim Feinschliff anfangen, wenn das Grundgerüst noch nicht steht. 8)

marabu 20. Mai 2005 07:57

Re: mehrdimensionale Datenbank ? Firebird
 
Hallo Ralf,

Zitat:

Zitat von th_bone
meine TabellenStruktur: (ID, Datetime, open, high, low, close), Index auf ID und Datetime. ... jetzt meine Frage gibt es eine Datenbank (vielleicht Firebird ?) in der ich in einer tabelle daten als array mehrdimensional speichern kann ?

Du kannst zwar in Interbase - wie in Adabas - Feldgruppen (arrays) definieren, aber das würde dir bei deiner Tabelle kaum helfen.

Du schreibst, dass du Daten sammelst für spätere Tests. Während der Sammelphase würde ich einen informationsfreien primary key verwenden (lfdnr) und die Asset-Nummer und den Börsentag aus der Indizierung nehmen. Der erhöhte Speicherbedarf für die Indexdaten sollte eigentlich kein Problem sein, aber da deine Daten dummerweise schon geordnet ankommen, quält sich die Datenbank beim Pflegen der Inserts sehr - und das bei einer Zuwachsrate von 100.000 pro Tag. Die Zugriffspfade kannst du ja dann in der Auswertungsphase definieren. Und wenn dann ADS nicht mitkommt, kannst du Daten immer noch mit wenig Aufwand nach Firebird oder einem anderen SQL Server schaufeln.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz