AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi mehrdimensionale Datenbank ? Firebird
Thema durchsuchen
Ansicht
Themen-Optionen

mehrdimensionale Datenbank ? Firebird

Ein Thema von th_bone · begonnen am 19. Mai 2005 · letzter Beitrag vom 20. Mai 2005
Antwort Antwort
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#1

mehrdimensionale Datenbank ? Firebird

  Alt 19. Mai 2005, 14:25
Datenbank: absoulte Database • Version: 4,87 • Zugriff über: per table und query
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
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

Re: mehrdimensionale Datenbank ? Firebird

  Alt 19. Mai 2005, 16:53
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
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#3

Re: mehrdimensionale Datenbank ? Firebird

  Alt 19. Mai 2005, 20:39
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: mehrdimensionale Datenbank ? Firebird

  Alt 19. Mai 2005, 21:02
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#5

Re: mehrdimensionale Datenbank ? Firebird

  Alt 19. Mai 2005, 23:17
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: mehrdimensionale Datenbank ? Firebird

  Alt 19. Mai 2005, 23:45
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)
Gruß
Hansa
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: mehrdimensionale Datenbank ? Firebird

  Alt 20. Mai 2005, 07:57
Hallo Ralf,

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz