Frage

Ich bin eine Desktop-Anwendung in Delphi erstellen und als eine eingebettete Datenbank zu verwenden. Ich habe das Projekt mit Sqlite3 mit der DISQLite3 Bibliothek gestartet. Es funktioniert, aber Dokumentation scheint ein wenig Licht. Vor kurzem fand ich Firebird (ja, ich habe für eine Weile von Windows war) und es scheint, einige überzeugende Funktionen zu haben und Support.

Was sind einige Vor-und Nachteile jedes eingebetteten db? Größe ist wichtig, sowie die Unterstützung und Ressourcen. Was haben Sie verwendet und warum?

War es hilfreich?

Lösung

Ich habe SQLite benutze (via DISQLite3) in Feeddemon für mehrere Monate, und ich kann es nur empfehlen - es ist extrem schnell und stabil gewesen. Wie Javier sagte, kann die Dokumentation der entsprechenden Bibliothek dünn, aber die Dokumentation für SQLite selbst ist sehr gut.

Andere Tipps

Ich bin mit Firebird 2.1 Embedded und ich bin ganz mit it.I wie die Tatsache glücklich, dass die Datenbankgröße ist praktisch unbegrenzt (getestet mit> 4 GB Datenbanken und es funktioniert), und dass die Datenbankdatei ist kompatibel mit der Firebird Server, so kann ich Standard-Tools für Datenbankmanagement und Inspektion verwenden. Distribution besteht aus dropping wenige Dateien in Ihrem exe-Ordner.

Die gleichzeitige Zugriff von mehreren Programmen wird nicht unterstützt, aber gleichzeitig Zugriff von mehreren Threads ist (solange Sie sicherstellen, dass nur ein ‚Verbinden‘ Vorgang läuft zu einem bestimmten Zeitpunkt).

Ich habe Sqlite3 für viele Projekte (aber von C / C ++ und Objective-C) verwendet. Es ist extrem klein - keine Abhängigkeiten auch immer -. Datenbank in einer einzigen Datei ist

Es ist der db der Wahl für Mac-Entwickler, da sie direkt von Coredata und auf dem iPhone unterstützt wird - so gibt es eine große Nutzerbasis (nicht alle anderen Benutzer zu schweigen)

.

Lassen Sie uns sehen, schnellen Vergleich:

SQLite:

  • dynamische Eingabe in der Datenbank
  • Cross-Plattform-Dateien
  • läuft auf Windows, Linux, Mac, etc.
  • public domain
  • Transaktionen unterstützt
  • setzt auf Sicherheit Dateisystem, beinhaltet keine eigene Sicherheit

Firebird Embedded:

  • starke Typisierung in der Datenbank
    • nicht alle SQL-Datentypen werden unterstützt
  • Cross-Plattform-Dateien
    • Firebird Embedded läuft nur unter Windows
    • Dateien von Firebird sind im gleichen Format wie die volle Server-Version eingebettet
    • Dateien von Firebird Embedded kann für die Verwendung
    • zu einem Nicht-Windows-Server kopiert werden
  • unter einer modifizierten MPL ( „was unser ist unser ist und frei bleiben müssen, was dein ist, ist dein, und Sie müssen es nicht loslassen“)
  • unterstützt Transaktionen, Trigger usw.

MySQL Embedded:

  • Unterstützung für SQL-Funktionen sind abhängig vom Dateiformat
  • (IIRC) Cross-Plattform-Dateien
  • GPL, es sei denn Sie zahlen Lizenzgebühren
  • läuft auf Windows, Linux, Mac
  • unglaublich beliebt bei der Open-Source-Menge

Auch Embedded-Datenbanken haben ihre Stärken und Schwächen. Sie werden diese Stärken und Schwächen gegen wiegen müssen, was Sie entscheiden, tun.

Ich habe verwendet DBISAM auf einer Reihe von Projekten. Es ist komplett, ohne auch nur eine Notwendigkeit für eine externe DLL eingebettet. Im Gegensatz zu den anderen aufgeführten Sie es kommerziell ist. Eine Menge toller Features obwohl und sehr gut dokumentiert und unterstützt. Der Nachfolger haben es, dass ich noch nicht, obwohl versucht haben.

Embedded Firebird ist unsere Nummer 1, weil ohne Code-Änderungen kann ein einzelner Benutzer Delphi app mit eingebetteter Datenbank zu einer Multi-User-Server basierten Bereitstellung migriert werden, ohne dass das High-End-Features (wie gespeicherte Prozeduren zu opfern, Trigger , Ansichten, etc.). Und es ist eine TRUE freie Datenbank und GPL nicht Ihren Code in dem Prozess einzubeziehen.

Dringend empfohlen, AnyDAC zu verwenden, wenn die Arbeit mit Datenbanken und Delphi -. Dann können Sie wählen seamlessingly FB oder SQLite Ziel

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

Ich verwende Sybase Advantage Database Server, aber ich bin auch die F & E-Manager, so dass dieser Beitrag ist voreingenommen. :)

Wir haben nativen Delphi TTable und TQuery-Komponenten für beide WIN32 VCL und VCL.NET. Direkter Tabellenzugriff zusätzlich zu SQL-Unterstützung macht Vorteil einzigartig unter den vielen anderen Delphi-Angebote. Vorteil unterstützt große Tabellen (nur durch die Anzahl der Datensätze beschränkt, 2 Milliarden Euro) und verfügt über einen kostenlosen lokalen Engine, die für die Entwicklung und PC für kleine Kundenstandorte sind schön, die keine Client / Server-Funktionalität benötigen. Wechseln Sie auf Client / Server mit einer einzigen Verbindungseigenschaft, keine weiteren Änderungen.

Wir haben eine Tonne von Kunden, so die Daten außerhalb von Delphi Zugriff ist auch sehr einfach (.NET Data Provider, ODBC, OLE DB, PHP, Perl, JDBC, etc.).

Produkt-Web-Site unter: http://www.advantagedatabase.com Entwicklers Web Site: http://devzone.advantagedatabase.com

Es hängt wirklich was Sie brauchen. Für Single-User-Anwendungen, Embedded Firebird oder SQLite ist wahrscheinlich beste Wahl (und Preis stimmt). Am anderen Ende, wenn Sie Unterstützung für große Anzahl von mehreren Benutzern benötigen, sollten Sie wahrscheinlich regelmäßig Firebird statt Embedded-Version verwenden (Server einfach zu installieren ist, damit Sie nicht viele Probleme hier haben).

Und wenn Sie etwas dazwischen benötigen, für eine moderate Anwendung für mehrere Benutzer, eine der flachen Datenbanken wäre besser. Ich fand, dass ComponentAce Absolute Database bessere Wahl für meine Bedürfnisse als DBISAM, NexusDB oder VistaDB.

Es bleibt relativ kleine Stellfläche (keine DLLs), es ist ein Single-File-db (für mich ein Muss), unterstützt Unicode, BLOB-Komprimierung, Crypten und technische Grenzen für eine flache Datenbank scheinen beeindruckend. Darüber hinaus war die Unterstützung in wenigen Gelegenheiten gut, wenn ich es brauche.

Für Nachteile, habe ich bemerkt, es keine verschachtelten Transaktionen unterstützt, aber anders als das, ich hatte keine Probleme.

Wie für die Größe, geht nichts über SQLite.

Wenn Sie sich über Mangel an Dokumentation, ich denke, es ist doc für DISQLite3. Die SQLite docs ganz vollständig sind

Werfen Sie einen Blick auf NexusDB. Sehr erfolgreich in der Vergangenheit verwendet.

Das Problem mit (embedded) Firebird ist, dass die Datenbank nicht auf einem Netzlaufwerk befinden kann. Außerdem ist es schwierig, eine Datenbank auf einem Nur-Lese-Laufwerk zu haben (CD / DVD).

Für einige Hacks um diese Einschränkungen finden Sie in der Delphi Wiki: http://delphi.wikia.com/wiki/Firebird_tipps

NexusDB bietet das gesamte Spektrum von Embedded, auf volle Client / Server / remote. Auch SQL2003 konform, glaube ich. Ich verwende es auf ein paar Projekte, und ich bin sehr erfreut, so weit, und die Tatsache, dass es in einer solchen Vielzahl von „Waage“ arbeiten kann, ist ein großes Plus (kein weiteres DB für Scale-Up-Anwendungen erlernen zu müssen, etc).

Schauen Sie sich den eingebetteten Datenbankvergleich: http://sql-db.cz.cc/ kann es hilfreich sein. Die meisten oben genannten Produkte werden dort vorgestellt: Vorteil, DBISAM, Firebird, MS SQL Server, und vieles mehr. Accuracer, Apollo, ElevateDB, NexusDB, TurboDB

Ich bin teilweise auf Component Ace Absolute DB. Obwohl ein kommerzielles Produkt ($), ist es solide, einfach zu bedienen, geringer Platzbedarf und gut dokumentiert. Wenn Sie eine große Multi-User-Anwendung suchen, ist dies nicht der Weg zu gehen, aber wenn Sie Ihre Multi-User-Bedürfnisse Licht sind (oder nicht vorhanden) ist dies eine solide Option.

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

habe ich eine websearch ein schnelles Datenbankpaket für meine Delphi-Anwendung zu finden. Ich wollte es vollständig in der ausführbaren Datei ohne externem DLLs oder Bibliotheken erforderlich enthalten sein. Ich fand ursprünglich Accuracer von AidAim. Sie hatten geschrieben , wie schnell ihre Datenbank war und sogar gab Vergleiche mit anderen ähnlichen Paketen zu „beweisen“ ihren Punkt.

Ich wollte ihre Ansprüche glauben, aber ich dachte, dass ich die Bahn ein bisschen mehr suchen würde Timings von anderen Paketen zu finden. Ich war sehr überrascht, ein Beitrag zu den Delphi-Diskussionsforen , wo eine Person gefragt, welche Datenbank zu verwenden, und gab es 14 verschiedene Vorschläge. Einer der Responder hatte seine eigene Zeitvergleiche durchgeführt und hatte Accuracer gefunden ziemlich langsam zu sein im Vergleich zu einigen anderen, die Accuracer (bequem) links aus ihrem eigenen Vergleichsseite hatte.

Der Posten, plus zusätzliche Follow-Web-Forschung von mir, mich dazu gebracht a href neigen zu <= "http://www.yunqa.de/delphi/doku.php/products/sqlite3/index" rel = "nofollow noreferrer "> DISQLite3 , ein Produkt auf Basis von das Open Source SQLite Programm , aber mit Verbesserungen sehr schnell, mit sehr geringen Overhead in Delphi arbeiten, und mit befehlsbasierte Anrufe - die Ich mag. Es ist aktiv in der Entwicklung und wird in Kürze eine offizielle Delphi 2009 Version hat, obwohl sie offenbar die aktuelle Version unter D2009 funktioniert.

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

weiß, dass ich MS Zugriff ein vergleichsweise Mist db (und erwarten hier in Flammen abgeschossen werden), aber wenn nur kleine Daten benötigt wird, kann es Vorteile haben, wenn MS Office sowieso verwendet wird. Für mich war es eine Möglichkeit, Programmdaten mit mehr Flexibilität als csv-Dateien zu speichern, die ein gemeinsames Konzept für die wissenschaftlichen Code ist.

Sie können einen Zugang db von delphi Code erstellen, ohne installierte MS Office mit Verwendung ado & ODBC-Treiber (möglicherweise necesary eine anfängliche .accdb Datei aus dann zu kopieren, ohne Tabellen haben bevölkern, kann ich nicht dieses Detail erinnern. Nicht sicher Lizenzsituation dies zu tun.

Die .accdb Erweiterung kann zur noch etwas geändert werden und die Datei mit einem Passwort geschützt (in begrenztem Umfang) so dass sie nicht sofort offensichtlich den Benutzer den Zugang, wenn das gewünscht wird. Ich kenne ein paar kommerziellen Entwickler diese Methode tun und es selbst kopiert. Fand es als SQLite Setup einfacher, aber vielleicht, weil ich habe schon ado & Zugang in der Vergangenheit verwendet.

Wenn eingebettet ist ein absolutes Muss, Blick auf DBISAM.

kbMemTable ist ein guter Kandidat. Läuft im Speicher, schnelle, multi-threadding. Gebrauchte frei zu sein.

Components4Developers

Ich habe DBISAM und kbMemTable bei verschiedenen Gelegenheiten verwendet wird.

Was ich über DBISAM ist, dass es große Eigenschaften hat, und ist in der Regel sehr zuverlässig. Ich habe es in großen Datenbanken, Volltextsuche, Nur-Lese-Modus, CGIs und viele andere Situationen.

Es ist ziemlich groß im Vergleich zu kbMemTable oder SQLite basierten Komponenten, though. Und man kann nicht eine einzelne Datei pro Datenbank (oder sogar Tabelle.) - abhängig von der Situation, dass ein großer Nachteil ist,

kbMemTable ist winzig und es ist toll für kleine Datenmengen. Da es im Speicher ausgeführt wird, hat es eine kleine Menge von Daten sein, natürlich.

Eine andere Option, die ich auf ein paar meiner Desktop-Anwendungen genommen haben wird, um die Daten direkt von / zu meiner Objekthierarchie Dumping mit TWriter / TReader. Dies ist bei weitem, dass kleinste Option und ist unsinnig schnell im Vergleich zu einer Datenbank mit. Die Datendateien sind winzig, auch.

Er hat alle Arten von Nachteilen, obwohl - Sie haben die Versionierung in codieren, wenn Sie möchten vielleicht nie / Änderung Felder hinzufügen, es sei denn, es im Speicher ist, ist es noch komplizierter, kein Multi-User-Unterstützung überhaupt usw.

Embedded Firebird ist unsere Wahl # 1 als auch. Und die Suite Unified Interbase v2.0 mit ihm. Eine große und stabile Lösung!

Ich habe ScimoreDB verwendet. Es hat seine Macken, wie sie geben ihm pass und es hat seine Tücken in Datentypen und mit einigen Installationsproblemen. Dies war auf einem C # -Projekt.

Firebird den ganzen Weg. Ist ziemlich gut alles und so weit Version 2.1 ist sehr solide.

Firebird bietet die Möglichkeit, eine Skalierung auf bis zu Benutzern mehrirgendwann auf der ganzen Linie, oder wenn Sie Gleichzeitigkeit müssen (wenn Ihre Anwendung mit mehreren Threads geht).

SQLite ist ziemlich konkurrenzlos, wenn Sie Single-User-Zugriff benötigen, keine andere Datenbank, um es zu jedem Aspekt nahe kommt, sei es die Leistung, Komfort, SQL-Unterstützung oder Stabilität.

Firebird ist wirklich fantastisch und hat einen geringen Platzbedarf, so können Sie eingebettete verwenden und es kann für viele Benutzer skaliert werden nach oben und tut Unicode faily gut Ich benutze devart Komponenten mit delphi 2009 und FIB Plus für delphi 6/7 (ihre Version für 2009 und Unicode ist noch nicht bereit, zu schlecht)

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

BlackFishSQL ist eine weitere Möglichkeit, obwohl ich noch nicht eingehend getestet haben.

Ich habe eine Datenbank, die ich 5 Felddaten für alle 20 Sekunden für 10 Tage aufgezeichnet habe .. 3 Feld integer ist, 1-Feld ist doppelt (Zeit) und 1-Feld ist string [5].

Ich verwende noch Delphi6 srv2 wegen meiner Komponenten. Neuere delphi Versionen sind schrecklich an Komponenten, die ich habe Tausende von Dollar an Geld ausgeben, um meine Komponentenbibliothek wieder aufzubauen. Dafür delphi 6 ist immer noch am besten für echte Nutzung für kommerzielle Anwendungen, die nie Version von Delphis viele Probleme geben. An vielen Stellen, wie zB USB oder comport Lesungen usw ... geben sie neuere vor früheren Versionen nie auf dem Markt sitzen.

Ich habe eine Setup-Code mit Delphi6 was für Test 43.200 Datensätze an einem Tisch anhängt, weil ich die Tabelle in der Anwendung bereitgestellt werden soll, während es 43.200 Datensätze hat. Ich werde alle Daten auf DBChart gezeigt.

Tester unter Datenbanken die Tabellen durch Insert-Befehl mit 43.200 Datensatz gefüllt

  

dbısam = 34 sec,
  ElevateDb = 11 sec,
  AbsoluteDB = 45 sec,
  SQLlite = 32 Minute,
  Firebird = 12 min,
  MSSQL12 LocalDB = 28 Minute,
  Einfacher Tisch = 8 Minute,
  BDE = Blockierte,

I havent getestet Orakel, Blackfish, SYSBASE, nexsusDb etc .. aber es scheint, sie werden auch sehr langsam. Ich habe mit DBChart verbunden und nur elevateDb und absoluteDB haben 43.200 Datensätze auf DBchart in exceptable Zeit wie 7 ~ 10 Sekunden geladen. Andere alle genommen Minuten. So langsamer Datenbanken immer benötigt Codierung Tricks in einigen echten Jobs erfolgreich zu sein ..

Ich habe ihre Suchgeschwindigkeit als auch getestet, indem Befehl suchen, die leider die Server-basierten Datenbanken sind immer langsamer.

MSSQL und SQLLite3 sind äußerst schwierig, in der Verwaltung delphi, dass sie mich sehr müde.

Das ist meine Testergebnisse
Am Ende entschied ich mich AbsoluteDB, dbısam und Elevate zu verwenden. Ich habe den Rest vom PC geworfen.

Elevate Software muß nicht recno Funktion unterstützen, die zusätzlichen Codes zur Laufzeit erfordert zu verwalten. Dies macht die Datenbank langsamer Andere Fehler mit Elevate Software ist AutoInc Felder ist. Es gibt keine Möglichkeit, es zurückzusetzen. Deshalb habe ich nicht die Elevat Software selbst gewählt es die schnellste Datenbank ist. Sie sagen, viele gute Funktionen, aber wie viele von ihnen verwenden wir es in der Tat. Sie ließen nur die wichtigsten Funktionen nicht unterstützt, aber feste viele viele unnötige Funktionen. und es scheint, seit 8 Jahren gibt es keinen irgendeinen Vorteil entweder.

Wenn Sie mit Ihrem eigenen Auge pls sehen, nur versuchen und sehen ..

ich zwischen zwei jetzt absoluter DB oder DBisam4 denke

, wenn es um Embedded-Datenbanken die erste Frage kommt, ist: ist es Multi-User? Eigentlich braucht, die eine Datenbank, die nicht mehr Verbindungen (lesen & schreiben), um es erlaubt? Ich habe versucht (intensly) alle genannten Datenbanken und nur eine, die tatsächlich funktioniert, wie es sollte gefunden. Und das ist Accuracer. Nur schade mit accuracer ist, dass sie eine Drei-Mann-Band und chronischer Mangel an richtigen Unterstützung. Es ist auch hauptsächlich statisch in der Entwicklung, da wir keine wirklichen Funktionen in years.Not überraschend, da nur eine Person tatsächlich entwickelt gesehen haben. Es scheint, sie auf alten Ruhm leben. Benutzer loben, dass die (in der Regel 10 Jahre alt Kommentare) reflektieren. Für eine einzelne Benutzererfahrung würde ich Absolute Database empfehlen. Wie für die großen Spieler würde ich SQL Server von Microsoft empfohlen. Oracle hat ein Bloatware geworden und stirbt langsam aus.

ps was in accuracer schön ist, dass ihre Embedded-Datenbank-Funktionen wie Blas- Server. Er sperrt nur aktuelle Datensatz, wenn seine im Einsatz während der Rest normal funktioniert. Nizza Datenbank. Schade nur es stagniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top