Access oder MySQL

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Access oder MySQL

Beitrag von mschnell »

Christian hat geschrieben:Die Jet DB wird warscheinlich zu grösseren Teilen in den Hauptspeicher geladen. Da der DatanbankServer ja quasi lokal läuft.
Nö. Dann wäre das Suchen ja schnell. Das ist bei Jet aber langsam.
Christian hat geschrieben:Ich würd nach den Assuagen auch mal drauf tippen das der Linux Server langsamer als dein Client ist.
Nö. Im Gegenteil. Außerdem Dann wäre das Suchen ja langsam, wenn es auf dem Linux Server läuft. Das ist bei CS aber deutlich schneller. (Vermutlich weil nicht so viele Daten über Netzwerk transportiert werden müssen.)
-Michael

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

So Zeos kann nun bei mir unter Free Pascal / Lazarus auch ADO und somit auch Access :D

Code: Alles auswählen

 
program ZeosTest;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses Classes, SysUtils, Variants, ZConnection, ZDataset;
 
function IIF(b: boolean; sTrue: string; sFalse: string = ''): string;
begin if b then result := sTrue else result := sFalse; end;
 
var
  cn: TZConnection;
  rs: TZQuery;
  i:integer;
begin
//connect db
  cn := TZConnection.Create(nil);
  cn.Protocol := 'ado';
  cn.Database := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mydb\test.mdb';
  cn.Port := 0;
  cn.Connect();
{  cn := TZConnection.Create(nil);
  cn.Protocol := 'mysql-5';
  cn.Database := 'test;
  cn.HostName := 'localhost';
  cn.Port := 3306;;
  cn.User := 'root';
  cn.Password := 'root';
  cn.Connect(); }
{  cn.Protocol := 'mssql';
  cn.Database := 'test';
  cn.Host := 'localhost'
  cn.Port := 1433;
  cn.User := '';
  cn.Password := '';
  }
 
//select
  rs := TZQuery.Create(nil);
  rs.Connection := cn;
  rs.SQL.Add('SELECT * FROM tblTable');
  rs.Open;
//list fieldnames
  for i:=0 to rs.Fields.count-1 do
  Write(IIF(i>0, ';') + rs.Fields[i].Name);
  WriteLn();
//list values
  while not rs.eof do
  begin
    for i:=0 to rs.Fields.count-1 do
    Write(IIF(i>0, ';') + VarToStr(rs.Fields[i].Value));
    WriteLn();
    rs.Next;
  end;
//close recordset
  rs.Close;
  rs.Free;
//close connection;
  cn.Disconnect;
  cn.Free;
end.
Die Größen der kompilierten Beispiele habe ich schon (Größen nach Strip und UPX):
ADO mit CreateOleObject: 91 KB (mein erstes Beispiel, ohne alles)
ADO Komponente: 101 KB (meine zweites Beispiel, mit meiner ADO Implementierung)
ADO über Zeos : 429 KB (das hier gelistete Beispiel, mit meiner angepassten ZEOS 7.1 Version)
Alle drei Beispiele greifen ohne zusätzliche DLL auf eine Access "Datenbank" zu und liefern die selbe Ausgabe!

Damit wären wir schon mal einen Schritt weiter!
Zuletzt geändert von gocher am Mi 27. Mär 2013, 08:50, insgesamt 3-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

Nun die ersten Verarbeitungszeiten für Access gemessen mit GetTickCount() von einem Starter-Programm:
ADO mit CreateOleObject: 17150
ADO Komponente: 17373
ADO über Zeos : 19672

Die Werte sind gemittelt aus 5 Durchläufen pro Programm, die Werte liegen sehr nah bei einander jede Komponente hatte zumindest einmal einen Wert der unter dem tiefsten Durchschnittswert lag.
Das die Werte so nahe beieinander liegen verwundert natürlich nicht sehr, da alle drei Varianten die selbe Schnittstelle und Datenbank nutzen und lediglich der Zugriff auf die Schnittstelle leicht unterschiedlich ist.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Access oder MySQL

Beitrag von MacWomble »

Christian hat geschrieben:...Die Jet DB wird warscheinlich zu grösseren Teilen in den Hauptspeicher geladen...
Ich glaub es nicht ;-) Jetzt muss ich als gelernter Softwareentwickler mit 20 Jahren ADO/Jet Erfahrung meinen Senf dazu geben:

1. Access als Datenbank zu bezeichnen ist schon etwas Abwegig (in Anbetracht heutige DB-Standards)
2. Die Einleitende Aussage von Christian trifft sehr wohl zu. Angesprochene Tabelle werden bei Anfragen i.d.R. einmal komplett durch den Speicher gezogen. Bei kleinen Datenbanken mag das noch angehen, aber wenn die Tabelle mal einige tsd. Sätze umfassen, dann womöglich noch über Netzwerk angesprochen werden .... da geht nicht nur die Netzbandbreite in die Knie ;-)

Aus Erfahrung: Verwende SQLite, Firebird oder MariaDB und lass vom Rest die Finger wenn Du professionelle Ergebnisse erwartest und auch in einiger Zeit noch Freude an den Programmen haben möchtest! Dies auch schon alleine aus Gründen der Datensicherheit (Access verliert hin und wieder Daten).
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Access oder MySQL

Beitrag von mschnell »

gocher hat geschrieben:So Zeos kann nun bei mir unter Free Pascal / Lazarus auch ADO und somit auch Access :D
Super !!!

:twisted: :twisted: :twisted: :twisted:
Dann könnte man ja mit ZEOS eine DLL oder eine Programm machen, das über einen TCP/IP Server Port mit einem Client SQL sprechen kann und hat eine Norm-konforme SQL Client Server Jet Database, die man auch mit con einem Linux Rechner aus verwenden kann .
:twisted: :twisted: :twisted: :twisted:

-Michael

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

Nun die Verarbeitungszeiten für MySQL gemessen mit GetTickCount() von einem Starter-Programm:
ADO mit CreateOleObject: 17768
ADO Komponente: 17415
Zeos mysql-5: 15990

MySql 5.5.9 auf lokalen Rechner selbe Datensätze wie bei der Access-Messung!

Ich glaube 2331 Datensätze nur auszugeben macht die Vorzüge einer Server-Datenbank nicht wirklich klar, ich glaube ich muss da noch mal was mit 'Joins' und 'Order By' messen und vielleicht mal mehrere gleichzeitige Abfragen.
Ich werde auch noch eine neue Testmenge anlegen mit unterschiedlicheren Datentypen um die Schnittstellen härter zu prüfen. Blob, Memo, usw.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

Für diejenigen die es interessiert, um Zeos unter Lazarus auch mit ADO zum laufen zu kriegen benötigt man eine oledb.pas welche man über Google findet und den angehängten Patch.
Dateianhänge
ZeosLib.patch
(8.2 KiB) 187-mal heruntergeladen
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Access oder MySQL

Beitrag von Christian »

Aus Erfahrung: Verwende SQLite, Firebird oder MariaDB und lass vom Rest die Finger
Also mit Postgres hab ich noch deutlich bessere Erfahrungen als den o.g.
MSSQL ist auch nicht zu verachten falls eh nen Server da ist (in Business Bereichen oft so)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Access oder MySQL

Beitrag von af0815 »

Am besten man nimmt das System mit dem man sich auskennt.

Für Beginner ist eher die Wahl des richtigen Tutorial wichtig, die DB sucht man dann nach den Tutorial aus.

SCNR
Andi
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Access oder MySQL

Beitrag von MmVisual »

Für einen Anfänger empfehle ich MySQL.
- Einfach zu installieren mittels XAMPP (www.apachefriends.org)
- Einfach zu administrieren, mittels Internetbrowser und phpMyAdmin
- Einfach zu administrieren mit HeidiSQL (Alternative)
- Gut dokumentiert, auch auf deutsch und es gibt zu jedem Problem jede Menge Lösungen im Internet zu finden
- Sehr weit verbreitet
- Funktioniert mit so ziemlich allen Betriebssystemen und allen Programmierumgebungen
EleLa - Elektronik Lagerverwaltung - www.elela.de

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

Am besten man gibt schon mal Tipps ohne die Anforderungen an die Datenbank zu kennen und real verglichen zu haben.
Sicherlich ist es gut darauf bauen zu können, das eine Variante Funktioniert, aber gilt oder reicht das für das zukünftige Projekt.
Mal ein paar Beispiele:
  • wenn auf eine Datenbank hin und wieder kleinere Anfragen eintrudeln, ich sage jetzt mal eine pro Sekunde, dann ist die Datenbank scheiß egal
  • wenn auf eine Desktop-Datenbank (Access), die in unserem Hause seit ca.8Jahren im Betrieb ist und damals unter ganz anderen Voraussetzungen eingesetzt wurde, z.Z. ca.100 Komplexe Abfragen pro Sekunde, auf Tausende Datensätze in ca.20 Tabellen, verarbeiten muss wird es grenzwertig, in solch einem Fall ist eine Umstellung dringend Erforderlich, dafür ist es von Vorteil wenn das Programm leicht umzustellen ist
  • wenn jedoch ein Systemen mit konkurrierenden Zugriffen geplant ist wird der Entwicklungsaufwand bei Desktop-Datenbanken erheblich höher, da dann die Software die Möglichkeiten/Aufgaben des Servers übernehmen muss und somit macht die Entwicklung auf dieser Basis an dieser Stelle keinen Sinn.
Also es macht meines Erachtens keinen Sinn eine Pauschal-Antwort zu geben, die gibt es auch nicht!
Ich habe schon Systeme aufgesetzt die mit Access wesentlich schnellere Antwortzeiten als mit ein Serverdatenbank hatten, das liegt einfach daran das das Drumherum auch noch an Arbeitszeit bei den SQL-Servern anfällt, wie z.B. die Kommunikation ich sage nur mal vereinfacht Protokoll und das Logging was bei Access z.B. nicht anfällt!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Access oder MySQL

Beitrag von mschnell »

+1

(Zusatz: Bei manchen high-Performance Anwendungen ist auch eine in-Memory-Datenbank gefragt.)

-Michael

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

für diejenigen die ADO nutzen (wollen) ich habe gerade mal überprüft wie sich die ODBC Treiber von MySQL verhalten, also
der alte ODBC 3.51 ist ca. 10% schneller als der neue ODBC 5.2a die Connectionstrings lauten übrigens:
  • Provider=MSDASQL.1;Extended Properties="Driver={MySQL ODBC 3.51 Driver};Server=localhost;Port=3306;Database=test;User=root;Password=root;Option=3;
  • Provider=MSDASQL;DRIVER={MySQL ODBC 5.2a Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=root;
Der neue kann allerdings mehr, so ist es halt oft, wieder eine Entscheidung mehr, braucht man den Mehrnutzen oder die Performance. :roll:
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Access oder MySQL

Beitrag von hde »

MacWomble hat geschrieben: Access als Datenbank zu bezeichnen ist schon etwas Abwegig
und wenn ihr mySQL unter Lazarus benutzen wollt, wozu braucht ihr dann ADO oder ODBC?

- vorwärts Leute, wir wollen zurück - (in's IT-Mittelalter? :wink: )

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Access oder MySQL

Beitrag von gocher »

hde hat geschrieben:
MacWomble hat geschrieben: Access als Datenbank zu bezeichnen ist schon etwas Abwegig
und wenn ihr mySQL unter Lazarus benutzen wollt, wozu braucht ihr dann ADO oder ODBC?

- vorwärts Leute, wir wollen zurück - (in's IT-Mittelalter? :wink: )
Motz, motz, :evil: mein Gott was hast Du für eine Laune?
  • Wie transferierst Du Daten zwischen zwei Datenbanken wie z.B. von Access :) nach MySql?
  • Ich hatte gerade so eine Sache am laufen, Datensätze eines alten Forums in ein neues überführen, eine Datenbank hat ca. 150 Tabellen und die andere hat 70, dabei müssen natürlich die Daten umgeformt werden, also die Datensätze aufgetrennt, Feldtypen geändert und und und ... leider wird die Ursprungsdatenbank auch nicht von Zeos unterstüzt
  • wie kannst Du ganz simpel mal eben einen Webserver-Logfile analysieren
  • wie kannst Du mal schnell eine Excel-Mappe importieren (ok das geht auch nett über ole-Automatisierung)
Ein Datenbank-System DBS besteht aus zwei Teilen: der Verwaltungssoftware, genannt Datenbankmanagementsystem (DBMS) und der Menge der zu verwaltenden Daten, der Datenbank (DB) im engeren Sinn. Die Verwaltungssoftware organisiert intern die strukturierte Speicherung der Daten und kontrolliert alle lesenden und schreibenden Zugriffe auf die Datenbank. Also Access ist eine Datenbank, selbst Excel könnte man als solche benennen, bei Access gibt es sogar ein System bei Excel würde ich das nicht so nennen und jetzt werde ich noch dreister der kleine Karteikasten mit den Adressen von meiner Oma ist eine Datenbank nur leider kein Datenbank-System.

Doch verstehe jetzt nicht falsch ich wiederhole mich erneut, jedes System hat Vor- und Nachteile und diese zu kennen heißt diese nutzen zu können. Hast Du als Kind mal Quartett gespielt, in diesen Spielen gab es gute und schlechte Karten aber man konnte trotzdem mit den schlechteren gewinnen, wenn man sie richtig eingesetzt hat!
Wenn du Quartett nicht mehr kennst, also später aufgewachsen bist, fehlen Dir natürlich die Grundlagen das zu verstehen, dann habe ich natürlich etwas mehr Verständnis für Dich, dann bist nämlich ein armer Junge und kein alter Hase :( .
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antworten