web-dev-qa-db-fra.com

Quelle base de données intégrée utiliser dans une application Delphi?

Je crée une application de bureau dans Delphi et prévois d'utiliser une base de données intégrée. J'ai démarré le projet avec SQlite3 avec la bibliothèque DISQLite3. Cela fonctionne mais la documentation semble un peu légère. J'ai récemment découvert Firebird (oui, je n'ai plus de Windows depuis un moment) et il semble avoir des fonctionnalités et un support convaincants.

Quels sont les avantages et les inconvénients de chaque base de données intégrée? La taille est importante, tout comme le soutien et les ressources. Qu'avez-vous utilisé et pourquoi?

37
Darrel

J'utilise SQLite (via DISQLite3) dans FeedDemon depuis plusieurs mois et je le recommande vivement. Cette solution a été extrêmement rapide et stable. Comme Javier l'a dit, la documentation pour la bibliothèque est peut-être mince, mais la documentation pour SQLite est très bonne.

15
Nick Bradbury

J'utilise Firebird 2.1 Embedded et j'en suis assez content. J'aime le fait que la taille de la base de données soit pratiquement illimitée (testée avec des bases de données supérieures à 4 Go et que cela fonctionne) et que le fichier de base de données est compatible avec le Je peux utiliser des outils standard pour la gestion et l'inspection de bases de données. La distribution consiste à déposer quelques fichiers dans votre dossier exe.

L'accès simultané à partir de plusieurs programmes n'est pas pris en charge, mais l'accès simultané à partir de plusieurs threads (tant que vous vous assurez qu'une seule opération de «connexion» est en cours à un moment donné).

38
gabr

J'ai utilisé SQlite3 pour beaucoup de projets (mais à partir de C/C++ et Objective-C). C'est extrêmement petit - pas de dépendance que ce soit - la base de données est dans un seul fichier.

C'est la base de choix des développeurs Mac car elle est directement prise en charge par CoreData et sur l'iPhone - il existe donc une base d'utilisateurs importante (sans parler de tous les autres utilisateurs).

19
Lou Franco

Voyons voir, comparaison rapide:

SQLite:

  • saisie dynamique dans la base de données
  • fichiers multiplateformes
  • fonctionne sur Windows, Linux, Mac, etc.
  • domaine public
  • prend en charge les transactions
  • repose sur la sécurité du système de fichiers, n'inclut pas la sécurité propre

Firebird intégré:

  • typage fort dans la base de données
    • tous les types de données SQL ne sont pas supportés
  • fichiers multiplateformes
    • Firebird embedded ne fonctionne que sous Windows
    • Les fichiers de Firebird embedded sont au même format que la version complète du serveur.
    • Les fichiers de Firebird embedded peuvent être copiés sur un serveur autre que Windows pour être utilisés
  • disponible sous une MPL modifiée ("ce qui nous appartient est à nous et doit rester gratuit, ce qui vous appartient est à vous et vous n'avez pas à le publier")
  • prend en charge les transactions, les déclencheurs, etc.

MySQL intégré:

  • la prise en charge des fonctionnalités SQL dépend du format de fichier
  • (IIRC) fichiers multiplateformes
  • GPL sauf si vous payez des redevances
  • fonctionne sur Windows, Linux, Mac
  • incroyablement populaire auprès de la foule open source

Même les bases de données intégrées ont leurs forces et leurs faiblesses. Vous aurez besoin de peser ces forces et ces faiblesses par rapport à ce que vous faites pour décider.

14
Max Lybbert

J'ai utilisé DBISAM sur un certain nombre de projets. Il est complètement intégré sans même avoir besoin d'une DLL externe. Contrairement aux autres que vous avez énumérés, c'est commercial. Beaucoup de fonctionnalités exceptionnelles et très bien documentées et prises en charge. Ils ont un successeur que je n'ai pas encore essayé.

13
Jim McKeeth

Firebird embedded est notre choix n ° 1 car sans modification de code, une application Delphi à utilisateur unique avec base de données intégrée peut être migrée vers un déploiement multi-utilisateur sur serveur etc.). Et c’est une base de données libre TRUE et votre code n’est pas sous GPL.

9
Myles Wakeham

Nous vous recommandons vivement d'utiliser AnyDAC lorsque vous travaillez avec Databases et Delphi. Vous pouvez alors choisir de cibler le FB ou SQLite de manière transparente.

Ma préférence serait pour FB pour les applications intégrées. Tom

7
tomo7

J'utilise le serveur de base de données Advantage de Sybase, mais je suis également le responsable de la recherche et du développement. Ce message est donc biaisé. :)

Nous avons des composants natifs Delphi TTable et TQuery pour WIN32 VCL et VCL.NET. L’accès direct aux tables en plus de la prise en charge SQL rend Advantage unique parmi la plupart des autres offres Delphi. Advantage prend en charge les grandes tables (limitées à 2 milliards d'enregistrements) et dispose d'un moteur local gratuit, idéal pour les PC de développement et les sites de clients de petite taille ne nécessitant pas de fonctionnalité client/serveur. Basculez sur client/serveur avec une propriété de connexion unique, sans autre changement.

Nous avons une tonne de clients, donc accéder aux données en dehors de Delphi est également très facile (fournisseur de données .NET, ODBC, OLE DB, PHP, Perl, JDBC, etc.).

Site Web principal du produit: http://www.advantagedatabase.com Site Web du développeur: http://devzone.advantagedatabase.com

6
Jeremy Mullin

Cela dépend vraiment de ce dont vous avez besoin. Firebird Embedded ou SQLite sont probablement les meilleurs choix pour les applications mono-utilisateur (et le prix est correct). D'un autre côté, si vous avez besoin d'une assistance pour un grand nombre d'utilisateurs multiples, vous devriez probablement utiliser la version standard de Firebird au lieu de la version intégrée (le serveur est simple à installer et vous n'aurez donc pas beaucoup de problèmes ici).

Et si vous avez besoin de quelque chose entre les deux, pour une application multi-utilisateur modérée, une des bases de données plates serait préférable. J'ai trouvé que la base de données absolue de ComponentAce un meilleur choix pour mes besoins que DBISAM, NexusDB ou VistaDB.

Cela laisse une empreinte relativement petite (pas de DLL), c'est une base de données à fichier unique (un élément essentiel pour moi), supporte Unicode, la compression BLOB, le cryptage et les limites techniques semblent impressionnants pour une base de données plate. De plus, le soutien était bon à quelques occasions lorsque j'en avais besoin.

Par contre, j'ai remarqué qu'il ne supportait pas les transactions imbriquées, mais à part ça, je n'avais aucun problème.

6
vrad

Quant à la taille, rien ne vaut SQLite.

quand vous parlez de manque de documentation, je suppose que c'est doc pour DISQLite3. Les docs SQLite sont assez complets

4
Javier

Jetez un coup d'œil à NexusDB. J'ai utilisé avec beaucoup de succès dans le passé.

3
Craig

Regardez cette comparaison de base de données intégrée: http://sql-db.cz.cc/ , cela peut être utile. La plupart des produits susmentionnés y sont présentés: Advantage, DBISAM, Firebird, MS SQL Server et bien d’autres encore: Accuracer, Apollo, ElevateDB, NexusDB, TurboDB.

3
Daniel K. Johnson

NexusDB propose une gamme complète allant de la solution intégrée à la configuration client/serveur/à distance. Aussi conforme à SQL2003, je crois. Je l’utilise sur quelques projets et je suis très heureux jusqu’à présent. Le fait qu’il puisse fonctionner dans un aussi large éventail d’échelles est un avantage considérable (ne pas avoir à apprendre une autre base de données pour des applications à grande échelle, etc).

3
Jamo

Le problème avec Firebird (intégré) est que la base de données ne peut pas résider sur un lecteur réseau. En outre, il est difficile d’avoir une base de données sur un lecteur en lecture seule (CD/DVD).

Pour en savoir plus sur ces limitations, consultez le wiki de Delphi: http://delphi.wikia.com/wiki/Firebird_tipps

3
Thomas Mueller

J'utilise SQL Server Express et les composants ADO. Fonctionne très bien. Vous pouvez exécuter l'installation de SQL Server Express avec la ligne de commande pour masquer la complexité des utilisateurs. Vous pouvez également distribuer une base de données que vous chargez par nom de fichier. Il existe des millions d'utilisateurs de serveurs SQL, ce qui permet de trouver facilement des solutions à tous les problèmes dans les intertubes :-)

2
Tom

Je suis partisan de Absolute DB de Component Ace. Bien que commercial ($), il est solide, facile à utiliser, peu encombrant et bien documenté. Si vous recherchez une énorme application multi-utilisateurs, ce n'est pas la voie à suivre, mais si vos besoins multi-utilisateurs sont légers (ou inexistants), c'est une option solide.

2
lgallion

Je sais que MS Access est une base de données relativement médiocre (et s’attend à être abattue par des flammes ici), mais si vous n’avez besoin que de petites données, cela peut présenter des avantages si vous utilisez MS Office de toute façon. Pour moi, c’était une façon de stocker les données de programme avec plus de souplesse que les fichiers csv, ce qui est une approche courante pour le code scientifique.

Vous pouvez créer une base de données d'accès à partir de code Delphi sans que Microsoft Office soit installé à l'aide du pilote Web (il peut être nécessaire de disposer d'un fichier .accdb initial sans tables à copier, puis remplir, je ne me souviens pas de ce détail. Ce faisant. 

L'extension .accdb peut être changée en quelque chose d'autre et le fichier protégé par mot de passe (dans une mesure limitée) afin qu'il ne soit pas immédiatement évident pour les utilisateurs son accès si cela est souhaité. Je sais que quelques développeurs commerciaux utilisent cette méthode et l’ont copiée moi-même. Il est plus facile à installer que sqlite, mais peut-être parce que j’avais déjà utilisé ado & access dans le passé.

2
Hamish_Fernsby

J'ai effectué une recherche Web pour trouver un package de base de données rapide pour mon application Delphi. Je voulais qu'il soit complètement contenu dans l'exécutable, sans aucune DLL ou bibliothèque externe requise. J'ai initialement trouvé Accuracer par AidAim. Ils avaient posté à quelle vitesse leur base de données était et avait même donné des comparaisons avec d'autres logiciels similaires pour "prouver" leur argument.

Je voulais croire leurs affirmations, mais je pensais que je chercherais un peu plus sur le Web pour trouver le minutage d’autres forfaits. J'ai été très surpris de trouver un message publié sur les forums de discussion de Delphi où une personne a demandé quelle base de données utiliser et 14 suggestions différentes. Un des répondants avait fait ses propres comparaisons de temps et avait trouvé Accuracer assez lent comparé à plusieurs autres, qu’Accuracer avait (commodément) laissé de côté de leur propre page de comparaison. 

Ce message, auquel s’ajoute une recherche supplémentaire sur le Web, m’a amené à penser à DISQLite3 , un produit basé sur le programme Open Source SQLite , mais avec des améliorations permettant de travailler très rapidement dans Delphi, avec un très léger surcoût et avec les appels basés sur la commande - ce que j'aime bien. Il est activement en développement et aura bientôt une version officielle de Delphi 2009, bien qu'apparemment, la version actuelle fonctionnera sous D2009.

Addenum: DISQLite3 Version 2.0.0, publié le 17 novembre, prend en charge D2009.

2
lkessler

kbMmemTable est un bon candidat. Fonctionne en mémoire, rapide, multi-threadding. Utilisé pour être libre.

Composants 4Developers

1
Gerard

Firebird embedded est également notre choix n ° 1. Et la suite Unified Interbase v2.0 avec. Une solution géniale et stable!

1
Matthias Hryniszak

J'ai utilisé DBISAM et kbMemTable à différentes occasions.

Ce que j'aime de DBISAM, c'est qu'il a d'excellentes fonctionnalités et qu'il est généralement très fiable. Je l'ai utilisé dans des bases de données volumineuses, la recherche en texte intégral, le mode lecture seule, les CGI et bien d'autres situations. 

Il est cependant assez volumineux par rapport aux composants basés sur kbMemTable ou SQLite. Et vous ne pouvez pas avoir un seul fichier par base de données (ou même une table) - cela dépend de la situation et constitue un inconvénient majeur.

kbMemTable est minuscule et convient parfaitement pour de petites quantités de données. Comme il fonctionne en mémoire, il doit bien sûr s'agir d'une petite quantité de données.

Une autre option que j'ai prise sur quelques-unes de mes applications de bureau consiste à transférer les données directement depuis/vers ma hiérarchie d'objets à l'aide de TWriter/TReader. C’est de loin la plus petite des options et elle est absurdement rapide par rapport à une base de données. Les fichiers de données sont également minuscules.

Il présente cependant toutes sortes d'inconvénients: vous devez coder le contrôle de version si vous souhaitez éventuellement ajouter/modifier des champs, à moins que cela ne soit en mémoire, il est encore plus compliqué, pas de support multi-utilisateurs, etc.

1
stg

Si l’embarqué est un impératif absolu, consultez DBISAM.

1
user30586

en ce qui concerne les bases de données intégrées, la première question est la suivante: est-il multi-utilisateur? En fait, qui a besoin d’une base de données ne permettant pas plusieurs connexions (lecture/écriture)? J'ai essayé (intensément) toutes les bases de données mentionnées et n'en ai trouvé qu'une qui fonctionne réellement comme il se doit. Et c’est Accuracer. La seule pitié que ce soit avec précision est qu’il s’agit d’un groupe de trois hommes et d’un manque chronique de soutien. Il est également principalement statique dans son développement car nous n’avons constaté aucune caractéristique réelle au cours des années. Cela n’est pas surprenant, car une seule personne le développe réellement. Il semble qu'ils vivent sur la gloire ancienne. Les éloges des utilisateurs reflètent cela (généralement des commentaires vieux de 10 ans). Pour une expérience utilisateur unique, je recommanderais Absolute Database. En ce qui concerne les principaux acteurs, je recommanderais SQL Server de Microsoft. Oracle est devenu un bloatware et est en train de disparaître lentement. 

ps Ce qui est bien dans Precacer, c’est que leur base de données intégrée fonctionne comme un serveur complet. Il ne verrouille que l'enregistrement en cours s'il est utilisé pendant que le reste fonctionne normalement. Belle base de données. Dommage seulement qu'il soit stagnant.

0
user763539

J'ai utilisé ScimoreDB. Il a ses bizarreries car ils lui donnent des redevances libres et il a ses bizarreries dans les types de données et avec certains problèmes d'installation. C'était sur un projet C #. 

0
j d

FireBird offre la possibilité de passer de plusieurs utilisateurs à plusieurs utilisateurs ou si vous avez besoin de simultanéité (si votre application passe en multi-thread).

SQLite est tout à fait incomparable si vous n'avez besoin que d'un accès mono-utilisateur. Aucune autre base de données ne s'en approche, que ce soit en termes de performances, de commodité, de support SQL ou de stabilité. 

0
Eric Grange

J'ai une base de données sur laquelle je dois enregistrer 5 données de champ toutes les 20 secondes pendant 10 jours. 3 champs sont un entier, 1 champ est double (heure) et 1 est chaîne [5]. 

J'utilise toujours Delphi6 srv2 à cause de mes composants. Les nouvelles versions de Delphi sont terribles pour les composants qui me font dépenser des milliers de dollars pour reconstruire ma bibliothèque de composants. Par conséquent, Delphi 6 est toujours le meilleur pour les applications commerciales réelles qui jamais version de Delphis donner beaucoup de problèmes. Sur de nombreux points, tels que les lectures USB ou comportement, etc., ils en publient de nouvelles avant que les versions précédentes ne soient jamais disponibles sur le marché. 

J'ai configuré un code avec Delphi6 qui ajoute 43200 enregistrements à une table à des fins de test, car je vais déployer la table dans l'application alors qu'elle contient 43200 enregistrements. Je vais montrer toutes les données sur DBChart. 

Le résultat du test est inférieur aux bases de données remplies les tables par la commande insert avec 43200 enregistrements.

Dbisam = 34 secondes,
ElevateDb = 11 sec,
AbsoluteDB = 45 sec,
SQLlite = 32 minutes,
Firebird = 12 min,
MSSQL12 localDB = 28 minutes,
Table facile = 8 minutes,
BDE = bloqué,

Je n'ai pas testé Oracle, Blackfish, sysbase, nexsusDb, etc., mais il semble qu'ils seront également très lents. Je me suis connecté à DBChart et seuls elevateDb et absoluteDB ont chargé 43200 enregistrements sur DBchart dans des délais exceptionnels, tels que 7 ~ 10 secondes. Autre toutes les minutes prises. Les bases de données plus lentes ont donc toujours besoin d’astuces de codage pour réussir dans de vrais travaux. 

J'ai également testé leur vitesse de recherche en localisant la commande que, malheureusement, les bases de données sur serveur sont toujours plus lentes. 

MSSQL et SQLLite3 sont extrêmement difficiles à gérer car ils m'ont rendu très fatigué. 

Ce sont mes résultats de test
À la fin, j’ai décidé d’utiliser AbsoluteDB, Dbisam et Elevate. J'ai jeté le reste du PC.

Le logiciel Elevate ne prend pas en charge la fonction recno qui nécessite la gestion de codes supplémentaires à l'exécution. Cela ralentit la base de données. Un autre bogue concerne le logiciel Elevate: les champs sont à invocation automatique. Il n'y a aucun moyen de le réinitialiser. Par conséquent, je n'ai pas choisi le logiciel Elevat, même s'il s'agit de la base de données la plus rapide. Ils disent beaucoup de bonnes fonctions, mais combien d'entre elles sont utilisées. Ils ont juste laissé les fonctions les plus importantes non prises en charge, mais ont corrigé de nombreuses fonctions inutiles. et il semble que depuis 8 ans, aucun avantage non plus. 

Si vous voulez voir de vos propres yeux pls juste essayer de voir .. 

Je pense entre deux DB absolus ou DBisam4 

0
Eddie

Firebird tout le chemin. Fait assez bien tout et jusqu'à présent la version 2.1 est très solide.

0
Mitch

Hmmm, personne n'a recommandé le BDE - je me demande pourquoi ;-)

BlackFishSQL est une autre possibilité, bien que je n’aie pas encore testé en profondeur.

0
Alister

Firebird est vraiment génial et a un faible encombrement. Vous pouvez donc utiliser Intégré et il peut être redimensionné pour de nombreux utilisateurs Et fait bien échouer unicode et FIB plus pour Delphi 6/7 (leur version pour 2009 et Unicode n’est pas encore prête, dommage)

0
philippe Watel