AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

Ein Thema von michele_tedesco · begonnen am 1. Jul 2015 · letzter Beitrag vom 4. Jul 2015
Antwort Antwort
Seite 1 von 3  1 23   
michele_tedesco

Registriert seit: 19. Mär 2014
50 Beiträge
 
#1

Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 1. Jul 2015, 17:15
Datenbank: Dbase • Version: 1 • Zugriff über: BDE
Hallo Zusammen

Bei der Evaluierung nach einer Alternative zu den heutigen DBase Tabellen, welche bei uns vor allem über TTable (BDE) zugegriffen werden, habe ich einen einfachen Test geschrieben um ca 17000 Records auszulesen.

Der Test hat die selbe DBF Datei in 4 verschiedene Arten ausgelesen:
- TTable
- TQuery
- TAdoTable (dbGo)
- TAdoQuery (dbGo)
(Programm im Anhang)

Ich habe die Events BeforeOpen und AfterOpen mit einem TimeStamp versehen und habe gemerkt, dass DBase-Tabellen über TTable x-Mal schneller gelesen werden können. 17 Millisekunden für das Anzeigen von 17000 Datensätze auf einer DBGrid.
Hier eine einfache Aufstellung:
Code:
ADO table beforeopen 07:58.106
ADO table afteropen 07:05.596
173071

ADO query beforeopen 07:22.947
ADO query afteropen 07:30.336
173071

query beforeopen 07:43.170
query afteropen 07:49.116
173071

table beforeopen 07:03.660
table afteropen 07:03.677
173071
Nun verstehe ich das BDE (und auch DBase??) depricated ist

Daher bin ich überzeugt eine Alternative ist ein Muss.

Davon ausgegangen dass die DBase Tabellen über BDE dem Zweck gedient haben für eine Desktop-Applikation, welche auch offline (no internet, no cloud), Daten mehrheitlich in DBGrids darzustellen UND zu bearbeiten, frage ich mich was ist heute die gängigste Alternative, welche diesen Zweck erfüllt??

Was sind so eure Erfahrungen?

Ich hätte als nächstes einen Test mit der Firebird embedded Datenbank (über FireDAC) geschrieben, doch nun bin ich verunsichert ob da nicht zu viel "Performance" verloren geht

Danke für eure Feedbacks!
Angehängte Dateien
Dateityp: zip Unit3.zip (57,0 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.293 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 1. Jul 2015, 17:32
Hi,

ich habe hier ein altes Projekt Delphi 5 + BDE auf Paradox Tabellen. Das habe ich auf XE2 umgestellt und da hier etwas Geschwindigkeit verloren geht auch einen Test bzgl. Auswertung bei Firebird gemacht.

Auswertung: Query über 2 Tabellen mit Daten (Rechnung + Rechnungsposition) über mehrere Jahre, genaue Anzahl bin ich gerade überfragt (jedenfalls mehr als 17.000 Einträge).
Query BDE: ca. 30 Sekunden
Query Firebird: ca. 3 Sekunden.

Wenn ich die Zeit für das anzeigen der Ergebnisse noch abziehe (ca. 1,5 Sekunden) dann sieht die Sache noch deutlicher aus 28,5 Sekunden:1,5 Sekunden. Und genau hier liegt der Vorteil von Firebird (und anderen "richtigen" DBMS): Die sind bzgl. Auswertungen verdammt schnell.

Allerdings kann ich dir auch sagen, dass Firebird mit großer Sicherheit bei deinem Test auch deutlich schlechter abschneiden wird als die BDE. Grund dafür ist einfach in der unterschiedlichen Art zu finden wie Firebird und lokale Filebasierte Datenbanken arbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.347 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 1. Jul 2015, 17:59
Irgendwie stimmt die Anzeige im O-Thread nicht mit dem überein, was Du in der Test-Unit programmiert hast (z.b. Recordcount-Zeit). Wenn Du nur die Datenzugriffe messen willst, dann solltest Du keine Seiteneffekte zulassen. Die Darstellung der Daten in einem Grid gehört definitiv nicht dazu. Und auch die Arbeitsweise sämtliche Daten (wobei das non-dterministisch ist) in einem Grid anzuzeigen und zu bearbeiten. Das ist die sog. Excel-Lepra.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#4

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 1. Jul 2015, 18:01
1) Wer braucht schon 17.000 Datensätze?
Wenn man nicht zum Stamme der Datenfresser gehört, kein Mensch. Und hier treten jetzt die "richtigen" DBMS auf, die z.B. auch SQL interpretieren können. Damit ist gezielte Datenextraktion nur noch ein Kinderspiel!
2) Ob Firebird oder MSSql-Express (heißt das noch so?) oder welche Embedded/lokale DB auch immer, das ist teilweise Geschmackssache teilweise eine Glaubenssache. Auf jeden Fall ist eine solche Lösung den DBase/Paradox-Dinosauriern vor zu ziehen, da sie durch ihre SQL-Schnittstelle einfach ausgetauscht werden können. Wenn Du es richtig aufgesetzt hast, dann wird die lokale Datenbank durch einen Server ersetzt, ob der in einem RZ steht oder unter Deinem Schreibtisch und es geht weiter.

(Ob ADO nun das richtige Tool ist um auf DBase-Dateien zuzugreifen, darüber kann man bestimmt auch streiten!)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
828 Beiträge
 
#5

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 1. Jul 2015, 19:41
wer wirklich alte und "schlecht" programmierte Applikationen(speziell Zugriffe und "Seek" per "RecNo") auf aktuellen Stand bringen will oder muss, der nehme irgendein ein MEMtable als DataSet.

kbmMemTable ist nicht ganz kostenlos und erst in der "ProVersion" richtig schnell(unter Win32), aber es erfüllt gut seinen Zweck bei solchen Anforderungen ein TTable als DataSet zu ersetzen. Da DBF Files im Prinzip nix weiter sind wie ein Header plus folgende Records mit fester Size, lässt sich auch mit wenig Aufwand ein native Live-Read-Adapter schreiben um auf ein DBF File auf Harddisk per kmbMMemTable direkt Native zuzugreifen. Wenn SQL Abfragen gebraucht werden, gibt es das auch noch als Zwischenschicht.

DataSet MemTables gibt es einige, wenn es um wirklich alte RecNo basierte Sachen geht, hat die KBM Variante aber ein paar Vorteile.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 1. Jul 2015, 21:17
Hallo,

wenn es schnell sein soll, und nativer Zugriff ohne Zwischenschicht, dann kann ich dir NexusDB empfehlen. Es ist meines Wissens die einzige Datenbank die komplett mit Delphi programmiert ist. Keine externen DLL's, zwischen Embedded Version oder externere Server-Version mit ein paar Codezeilen umzuschalten, und wirklich rattenschnell. Daten einlesen beispielsweise (Neuanlage, Import aus Textdatei) je nach Feldanzahl zwischen 40.000 und 100.000 Datensätze/Minute
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 2. Jul 2015, 08:21
Das etwas in Delphi geschrieben ist, ist ja nun kein Qualitätsmerkmal und 100k Datensätze pro Minute ist nicht rattenschnell. 100k DS pro Sekunde wären schnell.

Wie schon erwähnt, ist der Ansatz ziemlicher Murks, 17k Datensätze anzeigen zu lassen. Obwohl, wenn man genau weiß, das es nie mehr als die paar DS werden, kann man das schon machen: Dann muss man sich keine großartigen Gedanken um Pagination machen und kann mit einfachen Mitteln ein kleines Frickeltool hinbasteln.

Generell sollte man aber keine großen Mengen an Daten transportieren, denn man ist i.A. nicht alleine im Netz. Muss man aber immer selbst entscheiden.

Und die einzig richtige Alternative zu DBase heißt: Irgend ein ordentliches RDBMS, also FB, SQL-Server Express usw. Die kosten nichts und sind trotzdem 'fett', wie man so schön sagt.

xxMemData ist eine sehr gute Wahl, wenn die Daten lokal und exklusiv gehalten werden, d.h. kein Mehrbenutzerzugriff benötigt wird.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.635 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 2. Jul 2015, 09:10
Auch mit der BDE werden keine 17k Records geladen und im Grid angezeigt, sondern nur immer soviele wie sichtbar sind. Wegen der direkten Adressierung über die RecNo und die Tatsache, daß die Tabelle physikalsich als Datei im Zugriff ist, kann die BDE da halt sehr schnell positionieren.

Die Rückgabemenge einer SQL-Abfrage muss aber erstmal erzeugt werden, um darin zu navigieren. Deswegen ist bei einer SQL-Query mit 17k Records das Open; Last; deutlich langsamer als bei der BDE, für die das am Ende lediglich ein FileSeek ist. Auch das seitenweise durchblättern der 17k Datensätze (aber wer will das schon) ist mit der SQL-Query nicht wesentlich langsamer, wenn man nicht beim Open schon alle Datensätze abruft, sondern nur soviele, wie ins Grid passen. Bei FireDAC z.B. würde man den FetchOptions.Mode auf fmOnDemand stellen (bzw. belassen).

Die SQL-Abfrage hat aber genau dort einen entscheidenden Vorteil, wo ich die Datenmenge vorab schon einschränken kann und dem User nur das präsentiere, was er wirklich braucht. Das erfordert an manchen Stellen schon ein bisschen mehr Überlegung als nur ein Grid auf das Form zu schubsen und mit einer Tabelle zu verbinden.

Jemand hat das mal mit der Telefonauskunft verglichen (ja, ist schon 'ne Weile her): SQL ist "Geben Sie mir bitte die Nummer von Heinz Müller, Heusengasse 14 in Köln". BDE ist: "Lesen Sie mir bitte das Telefonbuch von Köln vor und wenn ich Stop sage, geben Sie mir die Nummer".
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#9

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 2. Jul 2015, 17:16
SQL ist "Bitte geben Sie mir die Telefonnummer, die Etage und die Farbe der Wohnungstür von allen Kölnern deren Name "lle" enthält
deren Hausnummer 14 ist
und deren bevorzugter Sportverein Fortuna Düsseldorf ist
sortiert nach der 3.Stelle der Telefonnummer"



Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Lesegeschwindigkeit DBase (BDE) DBGrid (ALternative für die Zukunft?)

  Alt 3. Jul 2015, 15:29
Auch mit der BDE werden keine 17k Records geladen und im Grid angezeigt, sondern nur immer soviele wie sichtbar sind. Wegen der direkten Adressierung über die RecNo ...
Wie macht die BDE das bloß, wenn ich damit einen SQL-Server anspreche? Wahnsinn.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 14:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf