2009-12-02 4 views
6

Ich versuche, eine Legacy-App zu aktualisieren, die alle ihre Daten in einem gehackten System von BDE Paradox-Dateien speichert. Das Programm funktioniert ziemlich gut unter bestimmten engen Bedingungen, aber es hat ernsthafte Leistungsprobleme.Auf der Suche nach einer lokalen Datenbank für D2009 +

Ich möchte versuchen, Dinge zu verbessern, indem Sie auf ein besseres Datenbanksystem aktualisieren. Was ich brauche, ist eine lokale Datenbank, vorzugsweise eine, wo ich die ganze Sache in einer Datei statt des aktuellen "eine oder mehrere Dateien pro Tabelle" -System speichern kann. Es muss Fremdschlüsselbeziehungen und Tabellenindexierung unterstützen, und es muss in der Lage sein, ein Ergebnis schnell aus einer Abfrage einer Tabelle mit Hunderttausenden von Elementen zurückzugeben.

Dieser letzte ist wichtig. Das aktuelle System ist indiziert, aber das scheint keine Rolle zu spielen. Alle Abfragen scheinen in O (N) -Zeit zu laufen, wobei N die Gesamtgröße der Tabelle ist, und es wird schrecklich langsam, wenn die Tabellen beginnen, groß zu werden. Ich bin mir nicht wirklich sicher warum, aber das muss verschwinden.

Und es muss unter D2009 und später arbeiten. Kann mir jemand Empfehlungen geben?

Antwort

7

Eine weitere Abstimmung hier für embedded Firebird (und Firebird im Allgemeinen)!

Ich hatte gerade eine genial Erfahrung Portierung einer Interbase 6.0 App zu Embedded Firebird 1.5; Nach einer kurzen Zeit, in der ich die Dokumente gelesen habe, dauerte die tatsächliche Konvertierung buchstäblich 20 Minuten und jetzt läuft meine App unter Vista und Windows 7. Wenn Sie keine Multi-User-Unterstützung benötigen, dann würde ich ernsthaft Embedded Firebird betrachten (und wenn Sie Brauchen Sie Multi-User-Support, dann schauen Sie sich doch regelmäßig Firebird an.

Es ist eine einzelne Datei für die db und ein paar kleine DLLs für die Engine, und es ist einfach bereitzustellen, zu warten und zu sichern. Es gibt eine Reihe von Tools, die während der Entwicklung helfen können und der technische Support in der Delphi-Community für IB und Firebird ist einzigartig.

Die SQL-Unterstützung ist hervorragend mit Constraints, Triggern und gespeicherten Prozeduren (wir haben auch UDFs, um die Sprache zu erweitern - DLLs, die in Delphi geschrieben und als Inline-Funktionen usw. in Ihrer Datenbank verwendet werden können. Sehr schnell, sehr flexibel).

Ihr letzter Punkt über die Leistung - gut Interbase war sowieso immer ziemlich bissig, und meine Erfahrung mit embedded Firebird ist bisher, dass es "schreit" - wirklich, wirklich beeindruckt.

3

Es gibt einige gute Informationen in this question - SQLite3 und Firebird Embedded scheinen gute Optionen zu sein.

1

Nebenläufigkeit?

Ich habe SQLite in einem (nicht-Delphi) Projekt verwendet und war sehr zufrieden damit.

Ansonsten denke ich, das eingebettete Single-File DBMS der Wahl für Delphi scheint Firebird zu sein.

7

Ich habe diese SQLite Wrapper mit gutem Erfolg unter D2009 verwendet. Ich hatte es in wenigen Minuten fertiggestellt. Es hat Indizierung und sehr geringen Overhead. (Dieser ist kostenlos und Sie brauchen nichts anderes außer der SQLite Dll)

Es gibt auch eine kommerzielle SQLite-Wrapper von Delphi Inspiration und die Seite sagt, dass sie eine kostenlose Lizenz für nicht-kommerzielle und Bildungszwecke haben . Ich habe das nicht benutzt.

Ich habe auch den eingebetteten Firebird verwendet, aber Sie müssen dann auch Verbindungskomponenten haben, um damit zu sprechen. Ich habe IBObjects und das ist, was ich für die Server- und eingebettete Versionen verwende. Ich habe andere freie Firebird-Datenbank-Komponenten versucht, aber haben nicht wirklich gefunden, die Ich mag oder dass ich fühlte mich in zuversichtlich.

[EDIT]
Da die Mehrheit der Menschen Firebird sind darauf hindeutet, hier sind einige Konnektivitätskomponenten für Firebird, die ich in der Vergangenheit versucht haben, oder dass ich gehört:

Mercury Database Objects - Free/Opensource
IBObjects - Commercial (ich diese selbst gekauft habe)
FIBPlus - Handels
Firebirds ODBC Driver - Frei/Opensource ZeosLib - Frei/Opensource

+0

Verwendet beide SQLite und Firebird. Gefunden SQLite die bessere Option – Gerard

+0

+1 Ooh, interessante Liste, danke. Ich habe IBX mit Interbase und Firebird verwendet, obwohl das D7 nicht D2009 war. Wenn IBX nicht für 2009/2010 verfügbar ist, würde ich wahrscheinlich FIBPlus verwenden (wir haben eine Lizenz gekauft, aber wir haben sie nie benutzt) oder ich würde nach einem anständigen DBXPress-Treiber suchen wie alle meine anderen Sachen (SQL Server, Meistens) ist mit DBXPress und im Großen und Ganzen ist es nicht/das/anders als IBX für die grundlegenden Sachen. – robsoft

+1

Eine weitere Bibliothek - AnyDAC (http://www.anydac.net). Es hat Firebird und SQLite native Treiber. – oodesigner

0

Eine andere Option wäre, ADO und eine Microsoft Access-Datenbank zu verwenden. Der einzige Nachteil ist, dass der Benutzer die Jet-Engine und MDAC installiert haben muss ... was die meisten Maschinen tun. Der Vorteil besteht darin, dass das Upsizing auf MSSQL einfach ist. Ändern Sie einfach die Verbindungszeichenfolge, um auf die SQL Server-Datenbank zu verweisen, und nehmen Sie einige kleinere Abfrageänderungen vor.

0

Ich habe NexusDB seit Jahren verwendet und es ist eine kleine, zuverlässige, flexible Datenbank. Es ist in Delphi geschrieben, kommt mit vollständiger Quelle und kann vollständig in Ihre Anwendung kompiliert werden (keine DLLs zum Verteilen) oder als Client-Server-System ausgeführt werden.

Es ist schwer zu wissen, ob es Ihren Leistungsanforderungen entspricht, aber ich hatte kein Problem mit meiner SQL-Abfrage-Leistung, vorausgesetzt, ich indizierte die richtigen Felder. Es ist ein Produkt mit einer Datei pro Tisch, aber lassen Sie sich nicht davon abhalten, einen Blick darauf zu werfen.

Es ist ein kommerzielles Produkt, aber sie bieten nur eine DCU-Version, die nur in Single-User/Embedded-Anwendungen kostenlos verwendet werden kann.

1

Versuchen Database Vorteil, angeboten von Sybase (von Extended Systems gekauft)

http://marketing.ianywhere.com/forms/ADS91-30-Day

Es ist kostenlos, wenn Sie nicht Client/Server oder Internet-Funktionalität benötigen.

Der Nachteil ist, es ist nicht 100% VCL, so dass die VCL statische Links zu DLLs enthalten.

Wenn die App jemals skaliert werden muss, müssen Sie die Datenbanken nicht noch einmal ändern.

1

Ich würde Postgresql als Datenbank empfehlen, wir verwenden es in allen Projekten, die wir arbeiten und testeten es mit über 4 Millionen Datensätzen in einer Tabelle und funktionierte ziemlich gut.

0

Postgresql ist sehr gut, aber es ist eine schwere Maschinen es näher an Orakel ist, so dass Sie sehr schwere apps tun können, aber ein wenig Schmerzen zu halten

Firebird fantastische eingebettet ist oder nicht für die Konnektivität im Jahr 2009 Sie kann FIB plus von devrace.com verwenden sie haben eine Testversion, die nur ein NAG-Bildschirm zeigen, wenn es keine kommerzielle App ist, ist es ok.

sonst, wenn es eine kommerzielle App ist, die 300 $ ausgeben und kaufen kann, habe ich auch Devart-Komponenten für interbase/firebird verwendet und sie sind auch sehr gut wenn Sie wollen, verwendet zeos aber Sie bekommen, was Sie bezahlen http://sourceforge.net/projects/zeoslib/ SQL lite ist nicht eine einzelne Datei und wenn es Multi-User ist es saugt

0

ich arbeite eine Umwandlung von einer großen Anwendung bei Finishing, die BDE/Paradox für eine lokale Datenbank und Oracle 8i für eine Remote verwendet hat db.

Ich verwende UniDAC von DevArt. Das erlaubt mir einen einzigen Komponentensatz (völlig frei von der alten BDE), der MSSQLServer als lokale Datenbank treffen und weiterhin Oracle als meine Fernbedienung treffen kann. Ich habe die Aussicht, die Datenbanken an beiden Enden viel einfacher umstellen zu können, nur durch den Anbieterwechsel.

Ich mag diesen Ansatz, und die Komponenten scheinen recht gut gemacht zu sein.

Jay (D2007)

Verwandte Themen