webentwicklung-frage-antwort-db.com.de

Welche eingebettete Datenbank soll in einer Delphi-Anwendung verwendet werden?

Ich erstelle eine Desktop-App in Delphi und plane die Verwendung einer eingebetteten Datenbank. Ich habe das Projekt mit SQlite3 mit der DISQLite3-Bibliothek gestartet. Es funktioniert, aber die Dokumentation scheint ein bisschen leicht. Ich habe kürzlich Firebird gefunden (ja, ich habe eine Weile kein Windows mehr) und es scheint einige überzeugende Funktionen und Unterstützung zu haben.

Was sind einige Vor- und Nachteile jeder eingebetteten Datenbank? Größe ist ebenso wichtig wie Support und Ressourcen. Was hast du benutzt und warum?

37
Darrel

Ich benutze SQLite (über DISQLite3) seit mehreren Monaten in FeedDemon und empfehle es sehr - es war extrem schnell und stabil. Wie Javier sagte, sind die Dokumente für die Bibliothek möglicherweise dünn, aber die Dokumente für SQLite selbst sind sehr gut.

15
Nick Bradbury

Ich verwende Firebird 2.1 Embedded und bin damit ziemlich zufrieden. Ich mag die Tatsache, dass die Datenbankgröße praktisch unbegrenzt ist (getestet mit> 4 GB-Datenbanken und funktioniert) und dass die Datenbankdatei mit dem Firebird-Server kompatibel ist Ich kann Standardwerkzeuge für die Datenbankverwaltung und -prüfung verwenden. Bei der Verteilung werden nur wenige Dateien in Ihrem Exe-Ordner abgelegt.

Der gleichzeitige Zugriff von mehreren Programmen wird nicht unterstützt, aber der gleichzeitige Zugriff von mehreren Threads (sofern Sie sicherstellen, dass zu jedem Zeitpunkt nur eine Verbindungsoperation ausgeführt wird).

38
gabr

Ich habe SQlite3 für viele Projekte verwendet (jedoch von C/C++ und Objective-C). Es ist extrem klein - es gibt keinerlei Abhängigkeiten - die Datenbank befindet sich in einer einzigen Datei.

Dies ist die erste Wahl für Mac-Entwickler, da sie direkt von CoreData und auf dem iPhone unterstützt wird. Daher gibt es eine große Benutzerbasis (ganz zu schweigen von allen anderen Benutzern).

19
Lou Franco

Mal sehen, schneller Vergleich:

SQLite:

  • dynamische Eingabe in die Datenbank
  • plattformübergreifende Dateien
  • läuft unter Windows, Linux, Mac usw.
  • public Domain
  • unterstützt Transaktionen
  • stützt sich auf die Dateisystemsicherheit, enthält keine eigene Sicherheit

Firebird eingebettet:

  • starke Eingabe in der Datenbank
    • es werden nicht alle SQL-Datentypen unterstützt
  • plattformübergreifende Dateien
    • Firebird Embedded kann nur unter Windows ausgeführt werden
    • Dateien von Firebird Embedded haben dasselbe Format wie die vollständige Serverversion
    • Dateien von Firebird Embedded können zur Verwendung auf einen Nicht-Windows-Server kopiert werden
  • verfügbar unter einer modifizierten MPL ("Was uns gehört, gehört uns und muss frei bleiben, was Ihnen gehört, gehört Ihnen und Sie müssen es nicht veröffentlichen")
  • unterstützt Transaktionen, Trigger etc.

MySQL eingebettet:

  • die Unterstützung für SQL-Funktionen hängt vom Dateiformat ab
  • (IIRC) plattformübergreifende Dateien
  • GPL, es sei denn, Sie zahlen Lizenzgebühren
  • läuft unter Windows, Linux, Mac
  • unglaublich beliebt bei der Open-Source-Masse

Auch eingebettete Datenbanken haben ihre Stärken und Schwächen. Sie müssen diese Stärken und Schwächen gegen das abwägen, was Sie tun, um zu entscheiden.

14
Max Lybbert

Ich habe DBISAM für eine Reihe von Projekten verwendet. Es ist vollständig eingebettet, ohne dass eine externe DLL benötigt wird. Im Gegensatz zu den anderen, die Sie aufgelistet haben, ist es kommerziell. Viele tolle Funktionen und sehr gut dokumentiert und unterstützt. Die haben einen Nachfolger , den ich aber noch nicht ausprobiert habe.

13
Jim McKeeth

Firebird Embedded ist unsere erste Wahl, da ohne Codeänderungen eine Einzelbenutzer-Delphi-App mit eingebetteter Datenbank zu einer Multi-User-Server-basierten Bereitstellung migriert werden kann, ohne die High-End-Funktionen (wie gespeicherte Prozeduren, Trigger, Ansichten usw.) zu beeinträchtigen. usw.). Und es ist eine WAHR freie Datenbank und nicht GPL Ihren Code dabei.

9
Myles Wakeham

Wir empfehlen dringend, AnyDAC zu verwenden, wenn Sie mit Datenbanken und Delphi arbeiten - dann können Sie FB oder SQLite nahtlos als Ziel auswählen.

Meine Präferenz wäre für FB für eingebettete Apps. Tom

7
tomo7

Ich verwende den Advantage Database Server von Sybase, aber ich bin auch der R & D-Manager. Daher ist dieser Beitrag voreingenommen. :)

Wir haben native Delphi TTable- und TQuery-Komponenten für WIN32 VCL und VCL.NET. Der direkte Tabellenzugriff zusätzlich zur SQL-Unterstützung macht Advantage unter vielen anderen Delphi-Angeboten einzigartig. Advantage unterstützt große Tabellen (nur durch die Anzahl der Datensätze begrenzt, 2 Milliarden) und verfügt über eine kostenlose lokale Engine, die für Entwicklungs-PCs und für kleine Kundenstandorte, die keine Client/Server-Funktionalität benötigen, Nizza ist. Wechseln Sie zu Client/Server mit einer einzigen Verbindungseigenschaft, keine weiteren Änderungen.

Wir haben eine Menge Clients, so dass der Zugriff auf Daten außerhalb von Delphi ebenfalls sehr einfach ist (.NET-Datenprovider, ODBC, OLE DB, PHP, Perl, JDBC usw.).

Hauptprodukt-Website: http://www.advantagedatabase.com Website des Entwicklers: http://devzone.advantagedatabase.com

6
Jeremy Mullin

Es hängt wirklich davon ab, was Sie brauchen. Für Einzelbenutzeranwendungen sind Firebird Embedded oder SQLite wahrscheinlich die beste Wahl (und der Preis stimmt). Auf der anderen Seite sollten Sie, wenn Sie Unterstützung für eine große Anzahl von mehreren Benutzern benötigen, wahrscheinlich Firebird statt der Embedded-Version verwenden (der Server ist einfach zu installieren, sodass Sie hier keine Probleme haben werden).

Und wenn Sie zwischendurch etwas brauchen, ist eine flache Datenbank für eine moderate Mehrbenutzeranwendung besser. Ich fand, dass ComponentAces absolute Datenbank eine bessere Wahl für meine Bedürfnisse ist als DBISAM, NexusDB oder VistaDB.

Es hinterlässt einen relativ geringen Footprint (keine DLLs), es ist eine Single-File-Datenbank (ein Muss für mich), unterstützt Unicode, BLOB-Komprimierung, Verschlüsselung und technische Grenzen, die für eine flache Datenbank beeindruckend erscheinen. Außerdem war der Support in einigen Fällen gut, wenn ich ihn brauchte.

Für die Nachteile, ich habe festgestellt, dass es keine geschachtelten Transaktionen unterstützt, aber ansonsten hatte ich keine Probleme.

6
vrad

In Bezug auf die Größe ist nichts besser als SQLite.

wenn Sie über mangelnde Dokumentation sprechen, ist es wahrscheinlich für DISQLite3. Die SQLite-Dokumente sind ziemlich vollständig

4
Javier

Schauen Sie sich NexusDB an. In der Vergangenheit sehr erfolgreich eingesetzt.

3
Craig

Sehen Sie sich diesen Vergleich mit eingebetteten Datenbanken an: http://sql-db.cz.cc/ , es kann hilfreich sein. Die meisten der oben genannten Produkte werden dort präsentiert: Advantage, DBISAM, Firebird, MS SQL Server und vieles mehr: Accuracer, Apollo, ElevateDB, NexusDB, TurboDB.

3

NexusDB bietet das gesamte Spektrum von Embedded über Full Client/Server/Remote. Auch SQL2003-konform, glaube ich. Ich benutze es für ein paar Projekte und bin bisher sehr zufrieden, und die Tatsache, dass es in so vielen "Skalen" funktionieren kann, ist ein großes Plus (ohne eine andere Datenbank für skalierte Apps lernen zu müssen, usw).

3
Jamo

Das Problem mit (eingebettetem) Firebird ist, dass sich die Datenbank nicht auf einem Netzlaufwerk befinden kann. Es ist auch schwierig, eine Datenbank auf einem schreibgeschützten Laufwerk (CD/DVD) zu haben.

Für einige Hacks zu diesen Einschränkungen siehe das Delphi-Wiki: http://delphi.wikia.com/wiki/Firebird_tipps

3
Thomas Mueller

Ich verwende SQL Server Express und die Komponenten ADO. Funktioniert super. Sie können die SQL Server Express-Installation mit der Befehlszeile ausführen, um die Komplexität vor den Benutzern zu verbergen. Sie können eine Datenbank, die Sie laden, auch nach Dateinamen verteilen. Es gibt Millionen von SQL Server-Benutzern, so dass Lösungen für Probleme leicht in den Intertubes zu finden sind :-)

2
Tom

Ich bin ein Teil der absoluten Datenbank von Component Ace. Obwohl es sich um ein kommerzielles Produkt ($) handelt, ist es solide, einfach zu bedienen, hat einen geringen Platzbedarf und ist gut dokumentiert. Wenn Sie nach einer großen Mehrbenutzeranwendung suchen, ist dies nicht der richtige Weg, aber wenn Ihre Mehrbenutzeranforderungen leicht (oder nicht vorhanden) sind, ist dies eine solide Option.

2
lgallion

Ich weiß, dass MS Access eine vergleichsweise bescheidene Datenbank ist (und erwartet, hier in Flammen niedergeschossen zu werden). Wenn jedoch nur kleine Daten benötigt werden, kann dies Vorteile haben, wenn MS Office trotzdem verwendet wird. Für mich war es eine Möglichkeit, Programmdaten flexibler als CSV-Dateien zu speichern, was ein gängiger Ansatz für wissenschaftlichen Code ist.

Sie können eine Access-Datenbank aus Delphi-Code erstellen, ohne MS Office mit dem Ado & Odbc-Treiber installiert zu haben (möglicherweise ist eine initiale .accdb-Datei ohne zu kopierende Tabellen erforderlich. Ich kann mich nicht an dieses Detail erinnern Dies tun. 

Die Erweiterung .accdb kann in etwas anderes geändert werden und das Dateikennwort (bis zu einem gewissen Grad) durch ein Kennwort geschützt werden, so dass es für Benutzer nicht sofort ersichtlich ist, ob dies gewünscht wird. Ich weiß, dass einige kommerzielle Entwickler diese Methode ausführen und sie selbst kopieren. Ich fand es einfacher als sqlite einzurichten, aber vielleicht, weil ich früher schon Lärm und Zugriff verwendet hatte.

2
Hamish_Fernsby

Ich habe eine Webseite gesucht, um ein schnelles Datenbankpaket für meine Delphi-Anwendung zu finden. Ich wollte, dass es vollständig in der ausführbaren Datei enthalten ist, ohne dass externe DLLs oder Bibliotheken erforderlich sind. Ich habe Accuracer ursprünglich von AidAim gefunden. Sie hatten wie schnell ihre Datenbank war - und sogar Vergleiche gemacht mit anderen ähnlichen Paketen, um ihren Standpunkt zu "beweisen".

Ich wollte ihren Behauptungen glauben, aber ich dachte, ich würde das Internet ein bisschen mehr durchsuchen, um Zeitpläne für andere Pakete zu finden. Ich war sehr überrascht, als ich einen Beitrag in den Delphi-Diskussionsforen fand wo eine Person gefragt hat, welche Datenbank verwendet werden soll, und es gab 14 verschiedene Vorschläge. Einer der Responder hatte seine eigenen Timing-Vergleiche angestellt und hatte festgestellt, dass Accuracer im Vergleich zu einigen anderen relativ langsam war, die Accuracer (bequemerweise) von ihrer eigenen Vergleichsseite weggelassen hatte. 

Der Post sowie zusätzliche Web-Recherchen im Internet führten mich dazu, mich auf DISQLite3 zu lehnen, ein Produkt, das auf dem Open Source SQLite-Programm basiert , aber mit Verbesserungen, die in Delphi sehr schnell funktionieren und einen sehr geringen Overhead haben und mit befehlsbasierten Aufrufen - was mir gefällt. Es befindet sich derzeit in der Entwicklung und wird bald eine offizielle Delphi 2009-Version haben, obwohl die aktuelle Version anscheinend unter D2009 funktionieren wird.

Addenum: DISQLite3 Version 2.0.0, veröffentlicht am 17. November, unterstützt D2009.

2
lkessler

kbMmemTable ist ein guter Kandidat. Läuft im Speicher, schnelles Multi-Threadding. War früher frei.

Komponenten 4Entwickler

1
Gerard

Firebird Embedded ist auch unsere erste Wahl. Und die Suite Unified Interbase v2.0 damit. Eine großartige und stabile Lösung!

1

Ich habe DBISAM und kbMemTable bei verschiedenen Gelegenheiten verwendet.

An DBISAM gefällt mir, dass es großartige Funktionen bietet und normalerweise sehr zuverlässig ist. Ich habe es in großen Datenbanken, Volltextsuche, Nur-Lese-Modus, CGIs und vielen anderen Situationen verwendet. 

Im Vergleich zu auf KbMemTable oder SQLite basierenden Komponenten ist es jedoch ziemlich groß. Und Sie können nicht eine einzige Datei pro Datenbank (oder sogar Tabelle) haben - je nach Situation ist dies ein großer Nachteil.

kbMemTable ist winzig und eignet sich für kleine Datenmengen. Da es im Speicher läuft, muss es sich natürlich um eine kleine Datenmenge handeln.

Eine andere Option, die ich für einige meiner Desktop-Apps übernommen habe, ist das direkte Ablegen der Daten aus/in meine Objekthierarchie mit TWriter/TReader. Dies ist bei weitem die kleinste Option und ist im Vergleich zur Verwendung einer Datenbank absurd schnell. Die Dateien sind auch winzig.

Es hat jedoch alle Arten von Nachteilen - Sie müssen die Versionierung mit Code programmieren, wenn Sie Felder hinzufügen oder ändern möchten. Wenn es sich nicht um In-Memory handelt, ist dies noch komplizierter, es gibt keine Unterstützung für mehrere Benutzer usw.

1
stg

Wenn Embedded ein absolutes Muss ist, schauen Sie sich DBISAM an.

1
user30586

wenn es um eingebettete Datenbanken geht, lautet die erste Frage: Ist es Mehrbenutzer? Wer benötigt eigentlich eine Datenbank, die keine mehrfachen Verbindungen (Lesen und Schreiben) zulässt? Ich habe alle genannten Datenbanken (intensiv) ausprobiert und nur eine gefunden, die tatsächlich so funktioniert, wie sie sollte. Und das ist Accuracer. Das einzige Mitleid mit Accuracer ist, dass es sich um eine Drei-Mann-Band handelt und chronischer Mangel an angemessener Unterstützung. Es ist auch hauptsächlich in der Entwicklung statisch, da wir seit Jahren keine echten Merkmale mehr gesehen haben. Kein Wunder, da nur eine Person es tatsächlich entwickelt. Es scheint, dass sie vom alten Ruhm leben. Das Lob der Nutzer spiegelt das wider (normalerweise 10 Jahre alte Kommentare). Für eine einzige Benutzererfahrung würde ich Absolute Database empfehlen. Als Hauptakteure würde ich SQL Server von Microsoft empfehlen. Oracle ist zu einer Bloatware geworden und stirbt langsam aus. 

ps Was in Nice genau ist, ist, dass ihre eingebettete Datenbank wie ein ausgewachsener Server funktioniert. Es sperrt nur den aktuellen Datensatz, wenn er verwendet wird, während der Rest normal funktioniert. Nizza Datenbank. Nur schade, dass es stagniert.

0
user763539

Ich habe ScimoreDB verwendet. Es hat seine Macken, da es gebührenfrei ist, und es hat seine Macken in Datentypen und bei einigen Installationsproblemen. Dies war ein C # -Projekt. 

0
j d

FireBird bietet die Möglichkeit, zu einem späteren Zeitpunkt auf mehrere Benutzer zu skalieren oder wenn Sie Parallelität benötigen (wenn Ihre Anwendung Multithreading durchläuft).

SQLite ist unübertroffen, wenn Sie nur einen Einzelbenutzerzugriff benötigen. Keine andere Datenbank kommt in irgendeiner Hinsicht nahe, sei es in Bezug auf Leistung, Benutzerfreundlichkeit, SQL-Unterstützung oder Stabilität. 

0
Eric Grange

Ich habe eine Datenbank, in der ich 10 Tage lang alle 20 Sekunden 5 Felddaten aufzeichnen muss. 3 Felder sind ganze Zahlen, 1 Feld ist doppelt (Zeit) und 1 Feld ist Zeichenfolge [5]. 

Ich verwende immer noch Delphi6 srv2 wegen meiner Komponenten. Neuere Delphi-Versionen sind schrecklich bei Komponenten, die ich für den Wiederaufbau meiner Komponentenbibliothek mit Tausenden von Dollar ausgeben muss. Daher ist delphi 6 immer noch die beste Lösung für echte Commertial-Anwendungen, bei denen die Version von delphis nie viele Probleme bereitet. An vielen Stellen, wie USB oder Comport-Messungen usw., werden neuere Versionen veröffentlicht, bevor vorherige Versionen nie auf den Markt kamen. 

Ich habe einen Code mit Delphi6 eingerichtet, der 43200 Datensätze zu Testzwecken an eine Tabelle anfügt, da ich die Tabelle in der Anwendung bereitstellen werde, während sie 43200 Datensätze enthält. Ich werde alle Daten auf DBChart zeigen. 

Testergebnis ist unterhalb von Datenbanken, die die Tabellen mit dem Befehl Einfügen mit 43200 Datensätzen gefüllt haben

Dbisam = 34 s,
ElevateDb = 11 Sek.
AbsoluteDB = 45 sek
SQLlite = 32 Minuten,
Feuervogel = 12 min,
MSSQL12 localDB = 28 Minuten,
Einfache Tabelle = 8 Minuten
BDE = Gesperrt,

Ich habe Oracle, Blackfish, Sysbase, nexsusDb usw. nicht getestet. Aber es scheint, dass sie auch sehr langsam sind. Ich habe mit DBChart verbunden und nur ElevateDb und AbsoluteDB haben 43200 Datensätze in außergewöhnlicher Zeit (z. B. 7 ~ 10 Sekunden) auf DBchart geladen. Andere haben alle Minuten gebraucht. Langsamere Datenbanken benötigen daher immer Codierungs-Tricks, um bei einigen echten Jobs erfolgreich zu sein. 

Ich habe ihre Suchgeschwindigkeit auch mit dem locate-Befehl getestet, bei dem die serverbasierten Datenbanken leider immer langsamer sind. 

MSSQL und SQLLite3 sind extrem schwierig zu verwalten, weil sie mich sehr müde gemacht haben. 

Das sind meine Testergebnisse
Am Ende entschied ich mich für AbsoluteDB, Dbisam und Elevate. Ich habe den Rest vom PC geworfen.

Die Software von Elevate unterstützt die recno-Funktion nicht, für deren Verwaltung zur Laufzeit zusätzliche Codes erforderlich sind. Dadurch wird die Datenbank langsamer. Anderer Fehler liegt bei der Elevate-Software in automatischen Felder. Es gibt keine Möglichkeit, es zurückzusetzen. Daher habe ich mich nicht für die Elevat-Software entschieden, obwohl sie die schnellste Datenbank ist. Sie sagen viele gute Funktionen, aber wie viele davon verwenden wir tatsächlich. Sie haben nur die wichtigsten Funktionen nicht unterstützt, aber viele unnötige Funktionen behoben. und es scheint, dass es seit 8 Jahren keinen Vorteil gibt. 

Wenn Sie mit Ihrem eigenen Auge sehen wollen, probieren Sie es einfach .. 

Ich denke zwischen zwei jetzt absolute DB oder DBisam4 

0
Eddie

Firebird den ganzen Weg. Funktioniert ziemlich gut alles und bisher ist Version 2.1 sehr solide.

0
Mitch

Hmmm, niemand hat die BDE empfohlen - ich frage mich warum das so ist ;-)

BlackFishSQL ist eine andere Möglichkeit, obwohl ich noch nicht ausführlich getestet habe.

0
Alister

Firebird ist wirklich großartig und hat einen kleinen Footprint, so dass Sie Embedded Verwenden können und es für viele Benutzer Nach oben skaliert werden kann und Unicode-Fehler macht . Ich verwende Devart-Komponenten mit Delphi 2009 und FIB plus für delphi 6/7 (ihre Version für 2009 und Unicode ist noch nicht so weit fertig)

0
philippe Watel