Ich arbeite mit Delphi / C ++ Builder XE2.
Ich muss mindestens auf diese DBMS zugreifen :
Ich muss Daten in datensensitiven visuellen Steuerelementen anzeigen und bearbeiten. Daten können sich auf einem dieser DBMS befinden , ich werde Verbindungseigenschaften und SQL-Anweisungen für eine externe Textdatei konfigurieren.
Also Ich suche nach einer Reihe von Komponenten für den Datenbankzugriff , die solche DBMS unterstützen und gute Leistungen haben, ähnlich alten Paradox-Tabellen.
BDE (Borland Datenbankmodul) ( TDatabase
, TTable
...)
Veraltet.
DBX (Embarcadero dbExpress ) ( TSQLConnection
, TSQLTable
...)
Ersetzt BDE, unidirektionale Datasets (Cursor geht nur voraus; puffert keine Daten im Speicher, ein solches Dataset kann nicht in einem DBGrid angezeigt werden; zum Erstellen einer Benutzerschnittstelle mit dbExpress müssen Sie zwei weitere Komponenten verwenden: TDataSetProvider
und TClientDataSet
)
Verwendet native Treiber (keine für HANA) oder ODBC.
FireDAC (Embarcadero Fire-Datenzugriffskomponenten) ( TADConnection
, TADTable
...)
Es ist die Fortsetzung von AnyDAC ; verwendet native Treiber (keine für HANA) oder ODBC oder dbExpress.
UniDAC (Devart-Komponenten für den universellen Datenzugriff)
Nicht kostenlos; verwendet native Treiber (keine für HANA) oder ODBC oder "DB Client".
DA (RemObjects Datenzusammenfassung für Delphi)
Nicht kostenlos.
ZDBC (Zeos Database Connectivity Interface) ( TZConnection
, TZQuery
. ..)
Quelle öffnen; als Port von JDBC zu Object Pascal gestartet; bietet keine Bindung mit datensensitiven visuellen Steuerelementen.
dbGo (Embarcadero dbGo) ( TADOConnection
, TADOTable
...)
Implementiert ADO (daher über OLE DB über ODBC). Hat eine Reihe von Macken, wie bei der Wiederholung der gleichnamigen Parameter in Abfragen.
Jv BDE ( TJvQuery
, TJvBDESQLScript
...)
Erweiterung der korrespondierenden Standardbibliothek.
Jv-Datenzugriff ( TJvADODataset
, TJvADOQuery
...)
Erweiterung der korrespondierenden Standardbibliothek.
(Fühlen Sie sich frei, diese Liste zu erweitern)
Meine Wahl liegt also bei :
Wenn Sie XE2 verwenden, würde ich dbExpress empfehlen.
Wenn Sie XE3 oder höher verwenden, würde ich FireDAC empfehlen.
Ich verstehe FireDAC kann mit XE2 verwendet werden, aber ich bin mir nicht sicher, ob es irgendwelche Probleme gibt.
Ich entschied mich für eine kleine Performance-Forschung: UniDAC (5.0.1) vs FireDAC (8.0.1), auf Delphi XE3. Datenbanken: Firebird, MySQL & amp; SQL Server.
Hier sind die 150k-Records-Fetch-Ergebnisse (Speicherbelegung wurde als der Unterschied zwischen vor und nach dem Abrufen betrachtet).
Feuervogel:
%Vor%UniDAC - 0,909 Sekunden, aß 12 324 044 des Speichers
FireDAC - 0,967 Sekunden, aß 282 179 668 der Erinnerung (ich bin schockiert)
MySQL:
%Vor%UniDAC - 0,363 Sekunden und 11 552 604 des Speichers
FireDAC - 0,713 Sekunden und 49 375 108 des Speichers
SQL Server:
%Vor%UniDAC - 0,391 Sekunden und 14 155 576 des Speichers
FireDAC - 0,324 Sekunden und 51 775 844 des Speichers
Alles wurde einfach gemessen:
%Vor% %Vor% %Vor%Wenn jemand interessiert ist, hier ist die Testanwendung , Sie können dort einen Leistungsvergleich hinzufügen für ADO, dbExpress, ZeosLib und andere, die Sie interessieren.
Ich immer ADO verwenden - verwendet es mit SQLServer, Oracle, Sybase, PostGreSQL und anderen. Sie können einen ADO-Provider für nahezu jede Datenbank finden. Hatte nie ein Problem, das ich mit ein wenig Forschung nicht lösen konnte. Da ADO so weit verbreitet ist, sind die meisten Probleme gut bekannt. Und UDL-Dateien können Ihr Leben viel einfacher machen.
Aber ich verwende niemals die ADO-Komponenten von Delphi auf der Komponentenpalette - entweder benutze ich sie im Speicher oder leite die Ergebnisse der ADO-Aufrufe direkt in eine TKBMMemtable ab und vermeide das Delphi-Tool "out of the box" . Sie können eine Dienstprogrammfunktion schreiben, die dies automatisch für Sie erledigt.
Firedac - Kommt mit Delphi, also wirst du wahrscheinlich sowieso dafür bezahlen müssen. UNidac-Faster und Sie müssen Delphi nicht so oft upgraden, damit die Daten nicht aktualisiert werden. Auch wenn Sie sich eines Tages für Lazzarus entscheiden, sparen Sie viel Arbeit.
Es gibt viele Missverständnisse in vielen Threads, also werde ich versuchen, meine 2 Cent zu geben.
Das Problem ist, dass Delphi früher in executables
dachten, also suchen wir nach Möglichkeiten, Daten zu verschieben (besonders wenn unsere Datenbank und unser Anwendungsserver außerhalb gehostet werden); Diese Szenarien werden niemals eine RIA
-Anwendung schlagen, weil Sie keine Daten mehr verschieben, sondern nur eine Darstellung des Bildschirms.
Ein weiteres Missverständnis besagt, dass TDATASET
nicht gut mit AJAX
funktioniert.
Sehen Sie sich einige UNIGUI
Beispiele für youtube
an. Übrigens verwende ich gewöhnliche DataSnap
mit einem clientdataset
, nicht ORM.
Tags und Links database delphi performance c++builder hana