AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ClientDataSet - wie kann man Indizes verwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

ClientDataSet - wie kann man Indizes verwenden?

Ein Thema von globetrotter77 · begonnen am 29. Jan 2009 · letzter Beitrag vom 4. Feb 2009
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#51

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 31. Jan 2009, 14:17
So, ich habe das jetzt mit Delphi 7 und Turbo Delphi getestet. Eigentlich wollte ich das hier anhängen, nur leider ist das Archiv der Datenbank >3MB so das das leider nicht geht.
Beide Anwendung sind gleich schnell. Meine Datenbank ist ~30MB groß, hat 86600 Datensätze und 15 Spalten.
Das Laden der Daten dauert ~5 Sekunden. Der "Working Set" der Anwendung ist ohne Daten ~4MB und mit Daten ~68MB. Es werden also in 5 Sekunden ~64MB Arbeitsspeicher reserviert und die dahinterliegende Datenstruktur für ~86600 Datensätze erstellt. Ich finde das ist ein sehr guter Wert, immerhin sind das 12.8 MB pro Sekunde, die von der Festplatte in den Arbeitsspeicher wandern und dort strukturiert angeordnet werden.

Ich kann auch nicht verstehen, wieso hier immer das DBGrid als Spielverderber herhalten muss. Das DBGrid ist für das Bearbeiten von Datenbankinhalten eine wunderbare Komponente. Nätürlich kann man auch das Rad selber erfinden. Aber mir erschließt sich nunmal einfach nicht, wieso man einem armen Menschen (der vor dem Bildschirm sitzt) eine so große Datenmenge hinschmeißen muss. Kann man das nicht strukturieren? Ich denke da sitzt das eigentliche Problem. Nach dem alten Spruch: "Weniger ist mehr" sollte nicht nur hier verfahren werden. Bei 500000 Datensätzen behält doch kein normaler Mensch noch den Überblick.

Wie gesagt, die Komponenten sind spitze, es gibt keine Zeit-Unterschiede zwischen Delphi 7 und Turbo Delphi und Firebird macht ebenfalls einen erstklassigen Job. Bei diesem Datenvolumen ist Fingerspitzengefühl gefragt, da kann man nicht mit dem Holzhammer vorgehen. Nicht alle Daten der Datenbank sollten immer in der Anwendung liegen, sondern eben nur die, die gerade gebraucht werden. Das ist doch gerade der Vorteil einer Datenbank.

Wie auch immer ich habe damit keine Probleme und ich kann einfach nicht nachvollziehen warum das so sein muss, wie du das unbedingt umsetzen willst. Für solch eine Datenmenge sind heutige Computer eben leider nicht leistungsfähig genug. Immerhin geht es hier im MB, die da im Hintergrund geschaufelt werden müssen, das sollte man niemals aus den Augen verlieren.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#52

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 31. Jan 2009, 15:00
Hallo,

also meine Firebird-DBs sind so ~ 300MB.
Richtig ist, dass kein Nutzer alle Datensätze ansehen will,
geschweige denn bearbeiten.

Ich benutze zur Anzeige allerdings ein aufgemotztes TStringGrid,
das DBGrid mag ich nicht besonders. Es fummelt mir zu viel mit eigenen Queries rum.
Das kann man übrigens schön im Kosch "Client-Server DB Entwicklung mit Delphi" nachlesen.

Dort steht z.B., dass das DBGrid die Daten sowohl mit Order By XXX als
mit Order Desc By XXX anholgt.
Unter Firebird muss also auch ein Desc-Index existieren.

Ausserdem holt sich das DBGrid nicht alle Daten auf einmal (BDE-Query als Dataset),
sondern arbeitet mit BookMarks.

Ein ClientDataSet holt sich aber immer alle Daten, wenn eine Tabelle als CommandText verwendet wird.
Man kann aber auch eine Query bentzen, die hat nicht alle Datensätze liefert.

Ein ClientDataSet hält die Daten übrigens im Arbeitsspeicher.
5 Mio. Datensätze, wird es da nicht etwas eng ??

Ich würde als kostenlose Lösung mal ZEOS ausprobieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#53

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 31. Jan 2009, 15:07
Zitat von hoika:
Ich würde als kostenlose Lösung mal ZEOS ausprobieren.
Hab ich auch getestet, selbes Verhalten.
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#54

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 01:57
Zitat von omata:
So, ich habe das jetzt mit Delphi 7 und Turbo Delphi getestet.
...
Beide Anwendung sind gleich schnell. ...
Das Laden der Daten dauert ~5 Sekunden. ...
Ich finde das ist ein sehr guter Wert, immerhin sind das 12.8 MB pro Sekunde
Das ist sogar ein hervorragender Wert, mit dem ich durchaus zufrieden bin.
In der Größenordnung lag es bei mir auch, wenn auch etwas langsamer
(liegt an meinem Computer, klar!)
Und das ist schon mal eine sehr hilfreiche Information ... die Entwicklungsumgebung ist dann ja wohl entlastet!
Danke für die viele Mühe!

Zitat:
Ich kann auch nicht verstehen, wieso hier immer das DBGrid als Spielverderber herhalten muss. ...
Aber mir erschließt sich nunmal einfach nicht, wieso man einem armen Menschen (der vor dem Bildschirm sitzt) eine so große Datenmenge hinschmeißen muss.
Hat das irgendjemand behauptet? Natürlich nicht!
Ich habe gesagt, dass ich testhalber mir die Daten in einem DBGrid anzeigen lassen wollte.
Der "arme Mensch" war ich selber, und ich saß auch vor dem Bildschirm, zugegeben ... aber eben testhalber!
Niemand kommt auf die Idee, jemanden so mit Daten zuzumüllen!
Und vom DBGrid als Spielverderber war auch nicht die Rede, sondern von meinem Ausflug in die ADO-Spielwiese. Der hat gar nichts gebracht und wurde deshalb wieder ad acta gelegt.

Zitat:
Kann man das nicht strukturieren? Ich denke da sitzt das eigentliche Problem. Nach dem alten Spruch: "Weniger ist mehr" sollte nicht nur hier verfahren werden. Bei 500000 Datensätzen behält doch kein normaler Mensch noch den Überblick.
Sehr gut erkannt, man kann das strukturieren, und genau das habe ich vor ... es handelt sich ganz einfach um eine Idee, wie man zumindest bei einer ganz speziellen, aber überaus lästigen Aufgabe und genau bei dieser Aufgabe und sonst nirgends trotz großer Datenmengen den Überblick behalten kann, und zwar so, dass man immer nur einen Teil der Daten "hingeschmissen" bekommt.

Das Problem ist aber ein ganz anderes, und das steht eigentlich bereits in der Überschrift, wenn auch vielleicht zunächst ein bisschen zu flapsig formuliert. Aber das habe ich ja einige Male präzisiert.

Frage: Wie kann man die in der Datenbank bereits vorhandenen Indizes nutzen?
Antwort: Offenbar gar nicht (zumindest nicht mit einem ClientDataSet) oder nur sehr umständlich bzw. sehr trickreich.
Ich finde jedenfalls keinen Weg dorthin.
Und offenbar gibt es hierzu auch keine vernünftigere Antwort.

Zitat:
Bei diesem Datenvolumen ist Fingerspitzengefühl gefragt, da kann man nicht mit dem Holzhammer vorgehen. Nicht alle Daten der Datenbank sollten immer in der Anwendung liegen, sondern eben nur die, die gerade gebraucht werden. Das ist doch gerade der Vorteil einer Datenbank.
Wenn ich's richtig verstanden habe, holt sich das ClientDataSet aber alle Daten, und das stört mich auch nicht. Aber einer der wesentlichen Vorteile einer Datenbank, nämlich Indizes festlegen zu können, die auch am nächsten Tag noch vorhanden sind, kann leider nicht genutzt werden.
Das stört mich sehr!

Zitat:
... ich kann einfach nicht nachvollziehen warum das so sein muss, wie du das unbedingt umsetzen willst.
Ich glaube nicht, dass ich es so umsetzen will, wie du denkst!
Es ist sehr nett, dass du dir so viele Gedanken machst, aber das, was du meinst, ist nicht das Problem!

Daher nochmal: Was ich suche, ist die Antwort auf die Frage, wie ich die Indizes nutzen kann, sonst nichts!

Alles andere kommt erst danach ...
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#55

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 02:02
HILFE!!!

Wie ist das denn nun passiert?
Ich wusste nicht, dass ich das Forums-Layout ändern kann ... schaut ja grauenhaft aus!

Könnte das jemand von den Moderatoren bitte wieder hinbiegen???
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#56

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 02:10
Zitat von hoika:
5 Mio. Datensätze, wird es da nicht etwas eng ??
Um Himmels willen, das will ich mit Sicherheit nicht! Da hast du ne Null zuviel gelesen ...

Zitat von hoika:
Ich würde als kostenlose Lösung mal ZEOS ausprobieren.
Ich habe halt leider nur den Turbo Delphi Explorer (noch!).
Einbinden von Fremdkomponenten dürfte damit ziemlich aufwendig sein.
Aber interessehalber: wie schaut es da mit der Weitergabe aus?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#57

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 05:13
Wie gesagt, ZEOS liefert genau das gleiche Verhalten wie dbExpress.

Ok, zurück zu deinem eigentlichen Problem: Indiezes

Schau mal hier und hier.
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#58

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 19:40
@omata:
Schade, bei deinen Links findet sich auch nichts Passendes, dort kann man sich leider eigentlich auch nur verlaufen.
Scheint so, als wäre ich der Einzige, der hier Probleme sieht.

Trotzdem danke!
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#59

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 19:53
Zitat von globetrotter77:
ich glaube, ich krieg die Krise!
habe jetzt mal das Ganze via ADOConnection versucht, wohlwissend, dass sich dann vermutlich auch keine Indizes abgreifen lassen (ist tatsächlich so), aber das Ergebnis ist noch deprimierender als erwartet.
Ein wirklich nacktes Testprogramm, nur dafür gedacht, die Daten einer Tabelle in einem DBGrid anzeigen zu lassen, und für den Open auf die Tabelle braucht das Teil mehr als 3 Minuten.
Wie könnt ihr damit arbeiten?
Das ist mir wirklich ein Rätsel!

Oder bin ich nur zu doof dafür?
3 Minuten

Wie lange das dauert,das kommt immer auch auf den Rechner an
Gruß

Thomas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#60

Re: ClientDataSet - wie kann man Indizes verwenden?

  Alt 1. Feb 2009, 19:56
Es braucht numnal eine Weilchen, die ganze Tabelle in den Hauptpsiecher zu laden. Deshalb sollte man das ja nicht machen
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    


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 23:09 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