Gibt es die Möglichkeit einer Schleife?

Forum für neue Firebird-Anwender.

Moderator: thorben.braun

bfuerchau
Beiträge: 545
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Ein wenig muss ich dem schon wiedersprechen.
Auch wenn SQL eine starke Sprache ist, so kann man eben längst nicht alles so transformieren, wie man es letztlich in einer Programmiersprache vermag.
Ich benutze hier eben C# mit Linq-To-Objects was sehr viele Features bietet, die SQL halt nicht hat. Ein Punkt ist hier z.B. die Parallel-Library, dass ich viele Dinge dann eben parallel erledigen kann, was bis auf wenige Ausnahmen (DB2 for i kenne ich da zumindest) niemand macht, auch nicht der SQL-Server denn parallel heißt nicht patitioned.

Der nächste Punkt ist die Erstellung von dynamischen Ausdücken in C#, die transformieren und berechnen könnne. Diese sog. Lambda-Funktionen kann man dann kompilieren und laufen dann äußerst schnell.

Z.B. lade ich 1 Mio. Zeilen mit dem .Net-Treiber in ca. 30 Sekunden in den Speicher. Schneller ist die DB sowie das Netzwerk leider nicht.
Nun kann ich mit einem bliebigen Filter (meist vom User eingegeben) in weniger als 3 Sekunden ohne einen Index, ein Resultset bilden.
Dazu kann der Filter auch Berechnungen und Transformationen enthalten, die SQL sowieso keine Chance auf einen Index geben, z.B. "Menge * Preis < 10000".
Dies funktioniert sowohl in Desktop- als auch Web-Apps.
Somit baue ich mir einen egenen Cache auf, bediene aus diesem multiple Sitzungen mit unterschiedlichen Abfragen ohne die DB überhaupt zu belasten.
Selbst die anschließende Aggregierung mit beliebig vielen Gruppenfeldern, Agregate, die die DB gar nicht kennt, incl. Window-Funktionen sind um ein vielfaches effektiver außerhalb der Firebird.

Anmerkung: Das ist kein Nachteil der Firebird, da die Vorteile, ins besonders Satzversioning bei Transactions, keine Locks während ETL-Prozessen sowie Single-File-DB maßgeblich überwiegen.

Ich weiß nicht, wie es bei PHP, o.ä. ist, ob es da vergleichbare Funktionen gibt.
JScript zumindest ist nicht multithread fähig und auch den Web-Assemblies ist diese Fähigkeit nicht gegeben worden.
100.000 Zeilen für ein Grid zu berechnen, dauert da schon mal ein wenig, das Rendern passiert dann gottseidank seitenweise.

Meine alten VB6-Anwendungen konnte ich auch nicht direkt threadfähig gestalten, dies ging auch erst als COM-Anwendung mit Thread-Pool, aber eben auch mit gewissen Einschränkungen.

Fazit: SQL ist wirklich sehr gut geworden, im Verlgeich zu den 1970ern, wo es noch nicht mal Group By und Aggregate gab.
Aber ohne eine effektive Programmierung kommt man da nicht aus. Und schon gar nicht sollte man Enduser ihre Abfragen auf DBM's erlauben lassen, wie es zur Zeit durch KI/AI so vehement propagiert wird.
Unsere User jedenfalls haben keine Lust, jeden morgen dieselbe Frage an die KI zu stellen, die möchten das auch weiterhin einfach per Knopfdruck (Link) sehen können.
waldi969
Beiträge: 14
Registriert: Fr 3. Jul 2020, 12:15

Hallo nochmal und vielen, vielen Dank an bfuerchau und vr2,

obwohl der letzte Post etwas meinen Horizont überschreitet ;), danke ich Euch für Eure Mühe und den Input!

Ich werde den "with" Teil mit "join" noch probieren, bisher hat es noch nicht geklappt, wird aber noch!

Vielen Dank an Euch!!!!

VG waldi969
Antworten