Effizienter Datenbankzugriff auf verschiedene DBMS von Delphi XE2

9

Meine Bedürfnisse

Ich arbeite mit Delphi / C ++ Builder XE2.

Ich muss mindestens auf diese DBMS zugreifen :

  • Feuervogel
  • DB2 / 400
  • SQL Server
  • SAP HANA (eine neue In-Memory-DB, verfügbare Schnittstellen: JDBC, ODBC, ODBO, SQLDBC)

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.

Meine Vermutungen

  1. Die Verwendung der ODBC-Leistung ist schlechter als die Verwendung nativer Treiber. Wenn ja, wie kann ich dieses Problem lösen?
  2. Selbst durch ODBC werden die Performances für die HANA In-Memory-DB großartig (ich kann es jetzt nicht testen).

Was ich bisher gefunden habe

  • 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 :

  • dbExpress oder FireDAC: Wohin geht Embarcadero in der Zukunft?
  • dbGo: Ist ADO eine gute Wahl? Scheint, dass es auf ODBC beruht, also was ist mit der Leistung?
  • ein kommerzielles Produkt wie UniDAC oder Data Abstract: Ist es notwendig? Wäre es besser?
bluish 15.04.2013, 13:40
quelle

5 Antworten

1

Wenn Sie XE2 verwenden, würde ich dbExpress empfehlen.

  • Es unterstützt ODBC (aber nicht für SAP HANA)
  • Unidirektionale Datasets können mit ClientDataSet zum Caching verwendet werden. Tatsächlich können ClientDataSets zum Zwischenspeichern beliebiger Datenmengenkomponenten verwendet werden.

Wenn Sie XE3 oder höher verwenden, würde ich FireDAC empfehlen.

  • Embarcadero hat AnyDAC gekauft und in FireDAC umbenannt.
  • Es ist in der Enterprise-Artikelnummer und darüber enthalten. Ein kostenloser Download ist für lizenzierte XE3-Benutzer verfügbar.
  • Ich glaube, dass dies ihre künftige Datenzugriffsstrategie sein wird. Siehe diesen aktuellen Blog-Beitrag .

Ich verstehe FireDAC kann mit XE2 verwendet werden, aber ich bin mir nicht sicher, ob es irgendwelche Probleme gibt.

    
Bruce McGee 15.04.2013, 14:40
quelle
7

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.

    
JackD 21.05.2013 11:03
quelle
2

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.

    
Vector 16.04.2013 02:47
quelle
-1

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.

    
user3145857 06.09.2016 23:05
quelle
-2

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.

    
Marcello Dias 12.07.2016 23:34
quelle