(German-language version below)
Information about the controller
| Company: | IBExpert Ltd |
| Legal representative: | Holger Klemt |
| Address: |
22 Triq Ir-Rabat Marsalforn, Iz-Zebbug MFN 9012 Malta |
| Contact: | info@ibexpert.com |
As part of the registration process for our newsletter, you will need to provide us with your e-mail address and other optional data. We will only use this information to send you the newsletter. We will store the data you provide when registering for the newsletter until you unsubscribe from our newsletter. It is possible to unsubscribe at any time via the link provided in the newsletter, or by providing us with appropriate notification. By unsubscribing you withdraw your consent to the use of your e-mail address.
Furthermore, we will only use your e-mail address, which we have obtained in connection with the sale of a product or service, exclusively for direct marketing in the form of our newsletter for similar products or services of our own company to those purchased, unless you have objected to this use. You may withdraw permission to use your e-mail address at any time without incurring any costs other than the base rate transmission costs. Your objection (and thus the cancellation of our newsletter) can be exercised by an appropriate message to our e-mail address.
This website uses its own "cookies" to increase user-friendliness ("Cookies" are data records sent by the web server to the user's browser and stored there for subsequent retrieval). Our custom "cookies" do not store any personal information. You can generally prevent the use of "cookies" by setting your browser to disallow the storage of "cookies".
Personal data is only collected if you provide it to us voluntarily. No additional personal data is collected. Any processing of your personal data that goes beyond the scope of the statutory conditions will only be based on your express consent.
| Processing purpose: | Contract execution. |
| Categories of recipients: | Public entities with priority legislation. External service providers or other contractors. Other external bodies if the data subject has given his consent or the transmission of the data is permitted by another prevailing interest. |
| Third country transfers: | Within the scope of the contract execution, processors based outside the European Union may also be used. |
| Storage period: | The duration of the data storage depends on the statutory storage requirements and usually constitutes a period of 10 (ten) years. |
Data provided for the execution of contracts, software activation and usage information; if necessary, additional data for processing, if the data subject has given his explicit consent.
| Processing purpose: | Contract execution, as well as the activation, registration and administration of the IBExpert software registrations and, if relevant, administration of the support hotline account (balance and usage). |
| Categories of recipients: | Public entities with priority legislation. External service providers or other contractors. Other external bodies if the data subject has given his consent or the transmission of the data is permitted by another prevailing interest. |
| Third country transfers: | Within the scope of the contract execution, processors based outside the European Union may also be used. |
| Storage period: | The duration of the data storage depends on the statutory storage requirements and usually constitutes a period of 10 (ten) years. |
Contract execution; if necessary, additional data for processing, if the data subject has given his explicit consent.
| Processing purpose: | Contract fulfilment. |
| Categories of recipients: | Public entities with priority legislation. External service providers or other contractors. Other external bodies if the data subject has given his consent or the transmission of the data is permitted by another prevailing interest. |
| Third country transfers: | Within the scope of the contract execution, processors based outside the European Union may also be used. |
| Storage period: | The duration of the data storage depends on the statutory storage requirements and usually constitutes a period of 10 (ten) years. |
| Affected data: | Application information. |
| Processing purpose: | Implementation of the job application process. |
| Categories of recipients: | Public entities with priority legislation. External service providers or other contractors. Other external bodies if the data subject has given his consent or the transmission of the data is permitted by another prevailing interest. |
| Third country transfers: | Within the scope of the contract execution, processors based outside the European Union may also be used. |
| Storage period: | Application data will generally be deleted within four months following notification of the decision, unless consent has been given for a longer period of data storage. |
In addition, you also have the right to demand the amendment, deletion or restricted processing of data, or to exercise your right of objection to processing and the right to data portability at any time. Here you can contact us by e-mail or letter. You also have the right to contact the data protection authorities in the event of any grievances.
IBExpert Ltd reserves the right to update this privacy policy as necessary to adapt to technical developments or in connection with the offer of new services or products. The latest version can always be viewed on the website https://ibexpert.net/cms/ via the Website Privacy Policy link.
Angaben zur verantwortlichen Stelle
| Unternehmen: | IBExpert Ltd |
| Gesetzlicher Vertreter: | Holger Klemt |
| Adresse: |
22 Triq Ir-Rabat Marsalforn, Iz-Zebbug MFN 9012 Malta |
| Kontaktdaten: | info@ibexpert.com |
Im Rahmen der Registrierung unseres Newsletters teilen Sie uns Ihre E-Mail-Adresse und optional weitere Daten mit. Diese Angaben verwenden wir ausschließlich, um Ihnen den Newsletter zuzusenden. Ihre bei der Newsletter-Anmeldung eingegebenen Daten bleiben bei uns gespeichert, bis Sie sich wieder von unserem Newsletter abmelden. Eine Abmeldung ist jederzeit über den dafür vorgesehenen Link im Newsletter oder eine entsprechende Mitteilung an uns möglich. Mit der Abmeldung widersprechen Sie der Nutzung Ihrer E-Mail-Adresse.
Ihre E-Mail-Adresse, die wir im Zusammenhang mit dem Verkauf einer Ware oder Dienstleistung erhalten, nutzen wir darüber hinaus ausschließlich für Direktwerbung in Form unseres Newsletters für eigene ähnliche Waren oder Dienstleistungen, wie die von Ihnen bestellten, sofern Sie dieser Verwendung nicht widersprochen haben. Sie können der Verwendung Ihrer E-Mail-Adresse jederzeit widersprechen, ohne dass hierfür andere als die Übermittlungskosten nach den Basistarifen entstehen. Ihr Widerspruch (und damit die Abbestellung unseres Newsletters) kann durch entsprechende Nachricht an unsere E-Mail-Adresse (siehe Impressum) ausgeübt werden.
Diese Webseite verwendet eigene „Cookies“, um die Benutzerfreundlichkeit zu erhöhen („Cookies“ sind Datensätze, die vom Webserver an den Browser des Nutzers gesendet und dort für einen späteren Abruf gespeichert werden). In unseren eigenen „Cookies“ werden keinerlei personenbezogene Daten gespeichert. Sie können die Verwendung von „Cookies“ generell verhindern, wenn Sie in Ihrem Browser die Speicherung von „Cookies“ untersagen.
Personenbezogene Daten werden nur erhoben, wenn Sie uns diese von sich aus mitteilen. Darüber hinaus werden keine personenbezogenen Daten erhoben. Eine über die Reichweite der gesetzlichen Erlaubnistatbestände hinausgehende Verarbeitung Ihrer personenbezogenen Daten erfolgt nur auf Grundlage Ihrer ausdrücklichen Einwilligung.
| Verarbeitungszweck: | Vertragsdurchführung. |
| Kategorien von Empfängern: | Öffentliche Stellen bei Vorliegen vorrangiger Rechtsvorschriften. Externe Dienstleister oder sonstige Auftragnehmer. Weitere externe Stellen soweit der Betroffene seine Einwilligung erteilt hat oder eine Übermittlung aus überwiegendem Interesse zulässig ist. |
| Drittlandtransfers: | Im Rahmen der Vertragsdurchführung können auch Auftragsverarbeiter außerhalb der Europäischen Union zum Einsatz kommen. |
| Dauer Datenspeicherung: | Die Dauer der Datenspeicherung richtet sich nach den gesetzlichen Aufbewahrungspflichten und beträgt in der Regel 10 Jahre. |
Zur Vertragsdurchführung mitgeteilte Daten, Lizenz- und Nutzungsinformationen; ggfs. darüber hinaus gehende Daten zur Verarbeitung auf Basis Ihrer ausdrücklichen Einwilligung.
| Verarbeitungszweck: | Vertragsdurchführung, sowie die Aktivierung, Registrierung und Verwaltung der IBExpert Software Registrierungen sowie ggfs. Verwaltung von Support Hotline Guthaben und Verbrauch. |
| Kategorien von Empfängern: | Berechtigte Mitarbeiter der IBExpert GmbH Öffentliche Stellen bei Vorliegen vorrangiger Rechtsvorschriften. Externe Dienstleister oder sonstige Auftragnehmer. Weitere externe Stellen soweit der Betroffene seine Einwilligung erteilt hat oder eine Übermittlung aus überwiegendem Interesse zulässig ist. |
| Drittlandtransfers: | Im Rahmen der Vertragsdurchführung können auch Auftragsverarbeiter außerhalb der Europäischen Union zum Einsatz kommen. |
| Dauer Datenspeicherung: | Die Dauer der Datenspeicherung richtet sich nach den gesetzlichen Aufbewahrungspflichten und beträgt in der Regel 10 Jahre. |
Zur Vertragsdurchführung mitgeteilte Daten; ggfs. darüber hinaus gehende Daten zur Verarbeitung auf Basis Ihrer ausdrücklichen Einwilligung.
| Verarbeitungszweck: | Vertragsdurchführung. |
| Kategorien von Empfängern: | Öffentliche Stellen bei Vorliegen vorrangiger Rechtsvorschriften. Externe Dienstleister oder sonstige Auftragnehmer. Weitere externe Stellen soweit der Betroffene seine Einwilligung erteilt hat oder eine Übermittlung aus überwiegendem Interesse zulässig ist. |
| Drittlandtransfers: | Im Rahmen der Vertragsdurchführung können auch Auftragsverarbeiter außerhalb der Europäischen Union zum Einsatz kommen. |
| Dauer Datenspeicherung: | Die Dauer der Datenspeicherung richtet sich nach den gesetzlichen Aufbewahrungspflichten und beträgt in der Regel 10 Jahre. |
| Betroffene Daten: | Bewerbungsangaben |
| Verarbeitungszweck: | Durchführung Bewerbungsverfahren |
| Kategorien von Empfängern: | Öffentliche Stellen bei Vorliegen vorrangiger Rechtsvorschriften. Externe Dienstleister oder sonstige Auftragnehmer. Weitere externe Stellen soweit der Betroffene seine Einwilligung erteilt hat oder eine Übermittlung aus überwiegendem Interesse zulässig ist. |
| Drittlandtransfers: | Im Rahmen der Vertragsdurchführung können auch Auftragsverarbeiter außerhalb der Europäischen Union zum Einsatz kommen. |
| Dauer Datenspeicherung: | Bewerbungsdaten werden nach Mitteilung der Entscheidung in der Regel binnen vier Monaten gelöscht, soweit nicht eine Einwilligung in eine längere Datenspeicherung vorliegt. |
Darüber hinaus können Sie jederzeit Ihre Ansprüche auf Berichtigung oder Löschung oder auf Einschränkung der Verarbeitung oder der Wahrnehmung Ihres Widerspruchsrechts gegen die Verarbeitung sowie das Recht auf Datenübertragbarkeit geltend machen. Hier finden Sie die Möglichkeit, uns per E-Mail oder Brief zu kontaktieren. Sie haben ferner das Recht, sich bei Beschwerden an die Datenschutz-Aufsichtsbehörde zu wenden.
IBExpert Ltd behält sich vor, diese Datenschutzerklärung bei Bedarf zur Anpassung an technische Entwicklungen oder im Zusammenhang mit dem Angebot neuer Dienstleistungen oder Produkte zu aktualisieren. Die aktuelle Version können Sie stets auf der Internetseite https://ibexpert.net/cms/ über den Link Webseiten-Datenschutzerklärung einsehen.
Sie haben einen neuen Entwickler im Team, der mit einer bestehenden Firebird-Anwendung arbeitet oder künftig damit arbeiten soll?
In unserem 3-tägigen Praxistraining vermitteln wir die wichtigsten Grundlagen für den Einstieg in bestehende Firebird-/Pascal-Projekte:
16.–18. November 2026 | München
Das Training richtet sich an Entwickler, Junior Developer und Einsteiger, die praxisnah mit bestehenden Firebird-/Pascal-Anwendungen arbeiten möchten.
Alle Informationen, Agenda und Anmeldung: Firebird SQL und Pascal-Programmierung für die Next Generation
Holger Klemt, September 2026
The reliability of a Firebird database does not depend on Firebird alone. It is equally important that the underlying operating system and storage system execute and acknowledge write operations in the way the database expects.
Firebird is designed to write changes to storage in a defined and carefully coordinated order. In particular, when Forced Writes are enabled, Firebird ensures that critical changes have actually been written to persistent storage before subsequent operations are considered successfully completed.
Modern operating systems, RAID controllers and storage systems attempt to optimize write operations for performance reasons. For example, write operations may be collected, combined or passed to the physical storage device in a different order.
This is generally useful and usually unproblematic for normal file access. For a database system, however, it is essential that so-called flush or synchronization requests are reliably passed through all layers down to the actual persistent storage medium.
Additional layers between Firebird and the physical storage device can therefore become critical, for example:
The problem arises in particular when one of these layers reports a write operation as completed even though the data has not yet been permanently stored.
In the event of a power failure, kernel crash or hardware failure, write operations that have already been acknowledged may therefore be lost.
This becomes particularly problematic when a later database state has already reached the storage device while related earlier changes are still waiting in a cache. This can result in information within the database file that is no longer consistent.
Firebird’s carefully designed write strategy is intended to prevent exactly these situations. However, this requires the operating system, drivers, controllers and storage system to correctly implement the corresponding synchronization requirements.
Disabling Forced Writes may therefore significantly improve write performance, but at the same time it removes an important layer of database protection.
Linux file systems such as ext4 provide mechanisms for controlling the order and durability of write operations. However, this does not automatically mean that every underlying storage configuration provides the same guarantees.
As soon as additional cluster, mirroring, RAID or virtualization layers are involved, it must be ensured that flush operations and write barriers are actually passed through to persistent storage.
For database systems, the more important question is therefore not whether Windows or Linux is being used, but whether the entire storage stack reliably provides the guarantees required by the database system.
Several years ago, a serious failure occurred in a business-critical Firebird environment managed by us. The database was hosted on an externally implemented Linux cluster and storage solution.
Following an error, not only the production database but also the copy created at storage level was affected. Restoring the system required extensive analysis and repair work.
The architecture was subsequently changed. Since then, redundancy has no longer been provided through transparent mirroring of an open database file, but through replication at the Firebird database level to independent server systems. This architecture has been operating reliably in that environment for many years.
For Firebird systems, we therefore prefer storage architectures that are as simple and transparent as possible.
Where possible, redundancy and high availability should be implemented in such a way that two independently operating Firebird servers each maintain their own local database file, with synchronization being controlled at the database level.
This approach offers several advantages:
Strictly maintaining the required order of write operations inevitably introduces a certain amount of latency. In applications with very intensive write activity, this latency can be clearly measurable.
However, this additional latency is not unnecessary performance loss. It is an essential component of transaction safety.
When optimizing a Firebird server, the goal should therefore not be to circumvent these safety mechanisms. A better approach is to design the hardware and storage architecture in such a way that synchronous write operations can be completed as quickly as possible.
A fast database requires fast storage. A reliable database, however, requires storage whose claims regarding successfully stored data actually hold true.
(German-language version below)
From basic developer knowledge to productive involvement in real-world Delphi, Lazarus, Firebird and IBExpert projects.
- 16 -18 November 2026 – Munich – 3 days, 9.00 am–5.00 pm – German language -
This 3-day hands-on training course can also be booked as a remote or on-site in-house training course.
|
Basic programming skills are often not enough to start working productively on an existing enterprise application straight away. Project files, units, forms, components, packages, events, database access and SQL objects must be understood as an integrated system. This training course provides precisely this orientation and practical knowledge. Participants will build a small application using Lazarus, create the associated Firebird database and programme the connection between the two using IBExpert. |
“The best programming language at the moment is German.” |
Not a retrospective look at old development environments, but a practical introduction for people who will be working productively on existing systems in the future. No practical experience with Delphi, Lazarus, Firebird or IBExpert is required.
Suitable for
|
Recommended Requirements
|
|
Benefits for employers
|
Understanding the Pascal world
Project structure, language, components, events and launching your own Lazarus application.
Firebird SQL, PSQL and IBExpert
Data model, SQL, database programming and connecting the application to Firebird.
Interaction, modularity and AI
Clean application structure, practical AI support and verifying generated results.
Participants do not learn about the individual components in isolation, but instead combine Pascal code, the user interface, the Firebird database and IBExpert step by step to create a small, fully functional application.
Over the course of the three training days, a practical time and attendance system will be developed step by step:
In this way, participants learn, through a coherent example, the journey from a simple local prototype, through database integration, to a modular, cross-platform application.
Project structure, the language, components, events and launching your own Lazarus application.
|
Morning: How is a Delphi or Lazarus project constructed? Project orientation
Basic structure of a Pascal unit
|
Afternoon: Language, Components and Events Basic language elements
Graphical applications
Practical project
|
Today's outcome: Participants will be able to explain the structure of a Pascal project, read basic Object Pascal code and create a small application with their own events, procedures and functions.
Data model, SQL, database programming and connecting the application to Firebird.
|
Morning: Structure and language of a Firebird database Fundamentals of relational databases
SQL basics
|
Afternoon: Programming in the database Firebird PSQL
Working with IBExpert
Connection to the Lazarus application
Expanding the practical project
|
Today's outcome: Participants will understand the basic structure of a Firebird database, be able to create simple SQL and PSQL objects, and connect a Lazarus application to the database.
A clear application structure, practical AI support and the verification of generated results.
|
Morning: Creating an application from individual components Structure of a database-driven application
Modularity in practice
GUI and console applications
|
Afternoon: AI as a Development Tool The best programming language is German
Useful Applications of AI
Limitations and Risks
Functional testing of AI results
Final project
|
Today's outcome: Participants will understand the interplay between the user interface, Pascal code, database access and the Firebird database. They will be able to use AI tools as a support without relinquishing responsibility for functionality, security and maintainability to the AI.
ChatGPT, Codex and similar tools can explain source code, prepare routines, generate SQL, develop test cases and assist with debugging. However, they are no substitute for technical understanding or systematic testing. This training course therefore not only demonstrates how AI is used, but above all how requirements are formulated, results are broken down, compiled, tested and examined for unintended side effects.
Why modularity is becoming increasingly important
Small, clearly defined, and independently testable modules can be developed more reliably with AI support than large, complex blocks of source code.
Training Course: Firebird SQL and Pascal Programming for the Next Generation
Date: November 16 -18, 2026, 9.00 am–5.00 pm
Price per participant: 1,490.00 EUR (plus VAT)
For the second and subsequent participants billed to the same invoice recipient: 1,290.00 EUR per participant (plus VAT)
Venue: TBK Patent Attorneys, Bavariaring 4–6, 80336 Munich, Germany
Contact and registration via email: register@ibexpert.net
This 3-day hands-on training course can also be booked as a remote or on-site in-house training session, in which we will use your existing software and database as a basis.
(English-language version above)
Vom grundlegenden Entwicklerwissen zur produktiven Mitarbeit in realen Delphi-, Lazarus-, Firebird- und IBExpert-Projekten.
- 16.-18. November 2026 - München - 3 Tage 9.00-17.00 Uhr - Deutsch -
Diese 3-tägige Praxisschulung kann auch als Remote- oder Onsite-Firmenschulung gebucht werden.
|
Grundlegende Programmierkenntnisse reichen oft nicht aus, um in einer bestehenden Unternehmensanwendung sofort produktiv mitzuarbeiten. Projektdateien, Units, Formulare, Komponenten, Packages, Ereignisse, Datenbankzugriffe und SQL-Objekte müssen als zusammenhängendes System verstanden werden. Diese Schulung vermittelt genau dieses Orientierungs- und Praxiswissen. Die Teilnehmer bauen mit Lazarus eine kleine Anwendung auf, erstellen die zugehörige Firebird-Datenbank und programmieren die Verbindung zwischen beiden Welten mit Unterstützung von IBExpert. |
„Die beste Programmiersprache ist aktuell Deutsch.“ |
Nicht als Rückblick auf alte Entwicklungswelten, sondern als praxisnaher Einstieg für Menschen, die künftig produktiv an bestehenden Systemen mitarbeiten sollen. Keine praktische Erfahrung mit Delphi, Lazarus, Firebird oder IBExpert erforderlich.
Geeignet für
|
Empfohlene Voraussetzungen
|
|
Nutzen für Arbeitgeber
|
Tag 1
Die Pascal-Welt verstehen
Projektaufbau, Sprache, Komponenten, Ereignisse und der Start einer eigenen Lazarus-Anwendung.
Tag 2
Firebird SQL, PSQL und IBExpert
Datenmodell, SQL, Datenbankprogrammierung und die Verbindung der Anwendung mit Firebird.
Tag 3
Zusammenspiel, Modularität und KI
Saubere Anwendungsstruktur, sinnvolle KI-Unterstützung und die Prüfung generierter Ergebnisse.
Die Teilnehmer lernen die Einzelteile nicht isoliert kennen, sondern verbinden Pascal-Code, Benutzeroberfläche, Firebird-Datenbank und IBExpert Schritt für Schritt zu einer kleinen, funktionsfähigen Anwendung.
Über alle drei Schulungstage entsteht schrittweise eine praxisnahe Arbeitszeiterfassung:
So lernen die Teilnehmer an einem zusammenhängenden Beispiel den Weg vom einfachen lokalen Prototyp über die Datenbankintegration bis zur modularen, plattformübergreifenden Anwendung kennen.
Projektaufbau, Sprache, Komponenten, Ereignisse und der Start einer eigenen Lazarus-Anwendung.
|
Vormittag: Wie ist ein Delphi- oder Lazarus-Projekt aufgebaut? Orientierung im Projekt
Grundstruktur einer Pascal-Unit
|
Nachmittag: Sprache, Komponenten und Ereignisse Grundlegende Sprachelemente
Grafische Anwendungen
Praxisprojekt
|
Ergebnis des Tages: Die Teilnehmer können den Aufbau eines Pascal-Projekts erklären, grundlegenden Object-Pascal-Code lesen und eine kleine Anwendung mit eigenen Ereignissen, Prozeduren und Funktionen erstellen.
Datenmodell, SQL, Datenbankprogrammierung und die Verbindung der Anwendung mit Firebird.
|
Vormittag: Aufbau und Sprache einer Firebird-Datenbank Grundlagen relationaler Datenbanken
SQL-Grundlagen
|
Nachmittag: Programmierung in der Datenbank Firebird PSQL
Arbeiten mit IBExpert
Verbindung zur Lazarus-Anwendung
Erweiterung des Praxisprojekts
|
Ergebnis des Tages: Die Teilnehmer verstehen die Grundstruktur einer Firebird-Datenbank, können einfache SQL- und PSQL-Objekte erstellen und eine Lazarus-Anwendung mit der Datenbank verbinden.
Saubere Anwendungsstruktur, sinnvolle KI-Unterstützung und die Prüfung generierter Ergebnisse.
|
Vormittag: Aus Einzelteilen wird eine Anwendung Struktur einer datenbankgestützten Anwendung
Modularität in der Praxis
GUI- und Konsolenanwendungen
|
Nachmittag: KI als Entwicklungswerkzeug Die beste Programmiersprache ist Deutsch
Sinnvolle Einsatzbereiche von KI
Grenzen und Gefahren
KI-Ergebnisse funktional prüfen
Abschlussprojekt
|
Ergebnis des Tages: Die Teilnehmer verstehen das Zusammenspiel von Benutzeroberfläche, Pascal-Code, Datenbankzugriff und Firebird-Datenbank. Sie können KI-Werkzeuge als Unterstützung einsetzen, ohne die Verantwortung für Funktion, Sicherheit und Wartbarkeit an die KI abzugeben.
ChatGPT, Codex und ähnliche Werkzeuge können Quellcode erklären, Routinen vorbereiten, SQL erzeugen, Testfälle entwickeln und bei der Fehlersuche helfen. Sie ersetzen jedoch weder fachliches Verständnis noch systematische Prüfung.Die Schulung zeigt deshalb nicht nur, wie KI eingesetzt wird, sondern vor allem, wie Anforderungen formuliert, Ergebnisse zerlegt, kompiliert, getestet und auf unbeabsichtigte Nebenwirkungen untersucht werden.
Warum Modularität wichtiger wird
Kleine, klar definierte und unabhängig prüfbare Module lassen sich zuverlässiger mit KI-Unterstützung entwickeln als große, unübersichtliche Quellcodeblöcke.
Schulung: Firebird SQL und Pascalprogrammierung für die Next Generation
Zeitraum: 16.-18. November 2026, 9.00 - 17.00 Uhr
Preis pro Teilnehmer: Preis pro Teilnehmer: 1.490,00 EUR (zzgl. MwSt.)
Ab dem 2. Teilnehmer bei demselben Rechnungsempfänger: 1.290,00 EUR pro Teilnehmer (zzgl. MwSt.)
Veranstaltungsort: TBK Patentanwälte, Bavariaring 4-6, 80336 München
Kontakt und Anmeldung per E-Mail: register@ibexpert.net
Diese 3-tägige Praxisschulung kann auch als Remote- oder Onsite-Firmenschulung, in der wir dann Ihre schon existierende Software und Datenbank als Basis nehmen, gebucht werden.
Soundex, Cologne Phonetics, PSQL, Free Pascal and Visual C++ in a practical benchmark
IBExpert Ltd - Technical White Paper
Firebird applications have been able to extend the database engine with external functions for many years. Older installations commonly used UDFs (User Defined Functions). Modern Firebird versions provide UDRs (User Defined Routines), a substantially better integrated architecture.
This white paper follows the transition from UDF to UDR through a practical example: phonetic name matching using Soundex, a German-adapted Soundex variant, Cologne Phonetics, and distance and similarity functions. The same functionality was implemented as Firebird PSQL stored functions, a native Lazarus/Free Pascal UDR, and a native Microsoft Visual C++ 2022 UDR.
The most surprising finding was that programming language was not the dominant performance factor. Once Free Pascal and C++ used a comparable low-level strategy, optimized FPC was typically only about 10 to 25 percent behind Visual C++.
UDFs were a proven way to move calculations into external DLLs or shared libraries across many Firebird generations. The old UDF interface, however, belongs to an earlier generation of API design.
UDRs are the modern successor. SQL still calls native code, but integration uses Firebird's modern plugin and object-oriented API, with cleaner handling of data types, NULL values, metadata, character sets and routine lifecycle. For new Firebird 5 extensions, UDR should therefore be regarded as the natural replacement for classic UDFs.
Many algorithms can be implemented entirely as Firebird PSQL stored functions. This greatly simplifies deployment: no extra DLL, no Linux shared library and no platform-specific binary.
PSQL is particularly attractive when easy installation, backup/restore and platform independence matter more than maximum computational throughput. The real question is not whether PSQL can solve the problem, but whether it is fast enough for the expected call volume.
Exact string comparisons are often insufficient for names. Klemt, Klemmt, Klempt and Klemp are technically four different strings, but may all be relevant when searching for the same person.
Phonetic algorithms map names to codes that reflect pronunciation more than exact spelling, making typing errors, historical spellings and variants easier to detect.
Soundex normally creates a short code consisting of an initial letter and digits representing similar consonant groups. It is simple and fast, but was primarily designed for English names.
Our project therefore implemented SOUNDEX and SOUNDEX_DE. The German variant additionally normalizes forms such as Ä/AE, Ö/OE, Ü/UE, ß/SS and common letter combinations.
Cologne Phonetics is often more appropriate for German names. It uses context-sensitive rules and produces a variable-length digit sequence.
Klemt → 4562, Klemmt → 4562, Klempt → 45612, Klemp → 4561. Klemt and Klemmt become phonetically identical, while the other variants remain very close.
COLOGNE_DISTANCE first calculates Cologne Phonetics for both names and then the Levenshtein distance between the codes. A distance of 0 means identical; 1 means one insertion, deletion or replacement is required.
PHONETIC_SIMILARITY converts this into an easier-to-use value from 0 to 100. In our example Klemt/Klemmt returns 100, Klemt/Klempt 80 and Klemt/Klemp 75.
The five functions SOUNDEX, SOUNDEX_DE, COLOGNE_PHONETIC, COLOGNE_DISTANCE and PHONETIC_SIMILARITY were implemented in PSQL, as a Lazarus/FPC UDR, and as a Visual C++ UDR.
Before performance testing, 10,000 test rows were checked. The final versions produced zero mismatches for all five functions. Identical checksums also confirmed that the implementations processed the same results.
PSQL proved surprisingly practical for the simpler phonetic functions. As computational work increases, the native UDR advantage becomes much larger, especially for distance and similarity calculations.
|
Function |
Native UDR (typical) |
PSQL (typical) |
Interpretation |
|
SOUNDEX |
~0.04 s |
~0.8 s |
Native clearly faster |
|
SOUNDEX_DE |
~0.05 s |
~0.9 s |
Native clearly faster |
|
COLOGNE_PHONETIC |
~0.04 s |
~1.6 s |
Native clearly faster |
|
COLOGNE_DISTANCE |
~0.06 s |
~4.5 s |
Native substantially faster |
|
PHONETIC_SIMILARITY |
~0.06 s |
~6.5 s |
Native substantially faster |
The absolute values come from different benchmark forms and should not be interpreted as a pure microbenchmark ratio. The important point is that PSQL is functional and quite capable for simpler tasks, while native UDRs scale much better as procedural computation increases.
The first FPC version used convenient UnicodeString processing, UnicodeUpperCase and general string operations. The C++ implementation worked largely on UTF-8 bytes directly. C++ therefore initially appeared four to five times faster in some tests.
This was not a fair compiler-only comparison: the implementations were doing different amounts of internal work.
The FPC version was rewritten to use the same low-level strategy: UTF-8 remains byte-oriented in the hot path, German special characters are normalized using their UTF-8 sequences, ASCII uppercasing is performed directly, temporary string operations are reduced, and Cologne/Levenshtein use compact buffers.
The SQL interface and results remained unchanged.
|
Function |
Original FPC |
FPC Fast UTF-8 |
Improvement |
|
SOUNDEX |
~136 ms |
~40 ms |
~3.4× |
|
SOUNDEX_DE |
~79 ms |
~47 ms |
~1.7× |
|
COLOGNE_PHONETIC |
~152 ms |
~43 ms |
~3.5× |
|
COLOGNE_DISTANCE |
~269 ms |
~62 ms |
~4.3× |
|
PHONETIC_SIMILARITY |
~271 ms |
~62 ms |
~4.4× |
Most of the performance gain was therefore achieved without changing programming language.
|
Function |
Visual C++ 2022 |
Optimized FPC |
Approx. C++ lead |
|
SOUNDEX |
~34 ms |
~40 ms |
~18% |
|
SOUNDEX_DE |
~38 ms |
~47 ms |
~24% |
|
COLOGNE_PHONETIC |
~38 ms |
~43 ms |
~13% |
|
COLOGNE_DISTANCE |
~51 ms |
~62 ms |
~22% |
|
PHONETIC_SIMILARITY |
~52 ms |
~62 ms |
~19% |
With comparable implementations, the gap fell from an apparent factor of four or five to typically about 10 to 25 percent.
The Object Pascal binding is compact from the developer's perspective. Firebird.pas bundles the important interfaces and type declarations into a Pascal unit, keeping a small Lazarus UDR project easy to understand and familiar to Delphi/Lazarus developers.
The C++ UDR uses Firebird's C++ helper infrastructure, including UdrCppEngine.h, Message.h, Interface.h, ibase.h and additional include files and preprocessor helpers.
These are mainly compile-time dependencies. The finished DLL does not simply require all those headers at runtime. Pascal packages many declarations into one unit, while C++ distributes the API across headers, templates and macros.
PSQL is platform-neutral inside the database. Native UDRs must be built for the target platform, typically a DLL on Windows and a shared library on Linux. The SQL contract can remain the same, but the binary must match the operating system, architecture and Firebird server.
For moderate call volumes and maximum simplicity, PSQL is attractive. For high call volumes or computationally intensive algorithms, a native UDR provides substantial headroom.
Where Delphi/Lazarus/FPC expertise already exists, our measurements provide no reason to switch to C++ solely out of performance concerns. C++ remains an excellent choice where the relevant expertise and build infrastructure already exist.
The project started with a question: how should classic Firebird UDF functionality be modernized for Firebird 5? This led to a comparison of UDR and PSQL, and eventually to a direct test of Free Pascal and Visual C++.
The most important result is not one millisecond figure. Architecture, algorithm and data representation often dominate language choice. Our first Pascal implementation was correct but used convenient general Unicode abstractions. The C++ version worked closer to the bytes actually required and was initially dramatically faster. Once the same principles were applied to Free Pascal, most of the difference disappeared.
For developers with many years of Delphi or Free Pascal experience, this is a notable result: well-written Pascal remains highly competitive native code. Visual C++ was still somewhat faster in our test, but the remaining gap was closer to roughly 10 to 25 percent than to a factor of four or five.
Firebird PSQL was also a positive surprise. Not every function justifies a native library. Simple phonetic functions can offer an attractive balance of performance, maintainability and effortless deployment as stored functions. Native UDRs become particularly valuable when high call volumes and more complex calculations occur together.
The practical conclusion is therefore: choose the right algorithm and data representation first, then choose the deployment strategy, and only after that treat the programming language itself as a performance factor.
The complete source code is intentionally not reproduced in this white paper, keeping the document readable for managers and users as well as developers.
Demo projects for Firebird PSQL, Lazarus/Free Pascal and Visual Studio/C++ can be provided on request. Benchmark values are snapshots of a specific environment: hardware, Firebird version, compiler options, data distribution, cache state and server load can all affect absolute timings. Reproducible test data, identical results and repeated runs matter more than a single best time.
(English language version here)
Drei intensive Schulungstage für die nächste Entwicklergeneration: Die Teilnehmer lernen, wie Pascal-Projekte mit Delphi und Lazarus aufgebaut sind, wie Firebird-Datenbanken funktionieren und wie beides in IBExpert professionell zusammengeführt wird.

Im Mittelpunkt stehen nicht theoretische Sprachdetails, sondern das Wissen, das junge Entwickler benötigen, um in bestehenden Unternehmensprojekten produktiv mitarbeiten zu können - einschließlich des sinnvollen und verantwortungsbewussten Einsatzes von KI-Werkzeugen wie ChatGPT und Codex.
Weitere Information: https://ibexpert.net/cms/training#German
Anmeldung an register@ibexpert.net
Diese 3-tägige Praxisschulung kann auch als Remote- oder Onsite-Firmenschulung, in der wir dann Ihre schon existierende Software und Datenbank als Basis nehmen, gebucht werden.
Nicht als Rückblick auf alte Entwicklungswelten, sondern als praxisnaher Einstieg für Menschen, die künftig produktiv an bestehenden Systemen mitarbeiten sollen. Keine praktische Erfahrung mit Delphi, Lazarus, Firebird oder IBExpert erforderlich.
Geeignet für
|
Empfohlene Voraussetzungen
|