¿Qué base de datos incrustada usar en una aplicación Delphi?

Estoy creando una aplicación de escritorio en Delphi y planeo usar una base de datos integrada. Empecé el proyecto con SQlite3 con la biblioteca DISQLite3. Funciona, pero la documentación parece un poco ligera. Recientemente encontré Firebird (sí, he estado fuera de Windows por un tiempo) y parece tener algunas características y soporte convincentes.

¿Cuáles son algunos pros y contras de cada db incrustado? El tamaño es importante, así como el soporte y los recursos. ¿Qué has usado y por qué?

He estado usando SQLite (a través de DISQLite3) en FeedDemon durante varios meses, y lo recomiendo: ha sido extremadamente rápido y estable. Como dijo Javier, los documentos para la biblioteca pueden ser delgados, pero los documentos para SQLite son muy buenos.

Estoy usando Firebird 2.1 Embedded y estoy bastante contento con él. Me gusta el hecho de que el tamaño de la base de datos es prácticamente ilimitado (probado con bases de datos de 4 GB y funciona) y que el archivo de base de datos es compatible con el servidor Firebird. Puedo usar herramientas estándar para la administración e inspección de bases de datos. La distribución consiste en dejar caer algunos archivos en su carpeta exe.

No se admite el acceso simultáneo desde múltiples progtwigs, pero el acceso simultáneo desde múltiples hilos es (siempre y cuando se asegure que solo una operación de ‘conexión’ está en progreso en un momento dado).

He usado SQlite3 para muchos proyectos (pero de C / C ++ y Objective-C). Es extremadamente pequeño, sin dependencias, la base de datos está en un solo archivo.

Es la opción preferida por los desarrolladores de Mac porque es compatible directamente con CoreData y el iPhone, por lo que existe una gran base de usuarios (sin mencionar a todos los demás usuarios).

Veamos, comparación rápida:

SQLite:

  • tipeo dynamic en la base de datos
  • archivos multiplataforma
  • funciona en Windows, Linux, Mac, etc.
  • dominio publico
  • admite transacciones
  • depende de la seguridad del sistema de archivos, no incluye seguridad propia

Firebird embedded:

  • fuerte tipeo en la base de datos
    • no todos los tipos de datos SQL son compatibles
  • archivos multiplataforma
    • Firebird embedded solo se ejecuta en Windows
    • Los archivos de Firebird embedded están en el mismo formato que la versión completa del servidor
    • Los archivos de Firebird embedded se pueden copiar a un servidor que no sea de Windows para su uso
  • disponible bajo un MPL modificado (“lo que es nuestro es nuestro y debe permanecer libre, lo que es tuyo es tuyo y no tienes que liberarlo”)
  • admite transacciones, disparadores, etc.

MySQL integrado:

  • la compatibilidad con las características de SQL depende del formato de archivo
  • (IIRC) archivos multiplataforma
  • GPL a menos que pague regalías
  • funciona en Windows, Linux, Mac
  • increíblemente popular entre la multitud de fuente abierta

Incluso las bases de datos integradas tienen sus fortalezas y debilidades. Deberá sopesar esas fortalezas y debilidades con respecto a lo que está haciendo para decidir.

Utilicé DBISAM en una serie de proyectos. Está completamente integrado sin necesidad de una DLL externa. A diferencia de los otros que enumeró, es comercial. Sin embargo, hay muchas funciones geniales y muy bien documentadas y compatibles. Tengo un sucesor que aún no he probado.

Firebird embedded es nuestra opción número 1 porque sin cambios de código, una aplicación Delphi de usuario único con base de datos incrustada se puede migrar a una implementación basada en servidor multiusuario sin sacrificar ninguna de las características de gama alta (como procedimientos almacenados, activadores, vistas, etc.). Y es una base de datos libre VERDADERA y no GPL su código en el proceso.

Recomiendo encarecidamente utilizar AnyDAC cuando se trabaja con bases de datos y Delphi, entonces puede elegir enfocar FB o SQLite sin problemas.

Mi preferencia sería para FB para aplicaciones integradas. Tom

Utilizo el Servidor de base de datos Advantage de Sybase, pero también soy el Administrador de I + D, por lo que esta publicación es parcial. 🙂

Tenemos componentes nativos Delphi TTable y TQuery para WIN32 VCL y VCL.NET. El acceso directo a la tabla además del soporte SQL hace que Advantage sea único entre muchas de las otras ofertas de Delphi. Advantage admite tablas grandes (solo limitado por el número de registros, 2 mil millones) y tiene un motor local gratuito, lo que es bueno para PC de desarrollo y para sitios de clientes pequeños que no requieren funcionalidad de cliente / servidor. Cambie al cliente / servidor con una sola propiedad de conexión, sin otros cambios.

Tenemos un montón de clientes, por lo que acceder a los datos fuera de Delphi también es muy fácil (proveedor de datos .NET, ODBC, OLE DB, PHP, Perl, JDBC, etc.).

Sitio web del producto principal: http://www.advantagedatabase.com Sitio web del desarrollador: http://devzone.advantagedatabase.com

Realmente depende de lo que necesites. Para aplicaciones de usuario único, Firebird Embedded o SQLite son probablemente las mejores opciones (y el precio es correcto). En el otro extremo, si necesita soporte para una gran cantidad de usuarios múltiples, probablemente debería usar Firebird habitual en lugar de la versión Embedded (el servidor es simple de instalar, por lo que no tendrá muchos problemas aquí).

Y si necesita algo intermedio, para una aplicación multiusuario moderada, una de las bases de datos planas sería mejor. Descubrí que la base de datos absoluta de ComponentAce es mejor para mis necesidades que DBISAM, NexusDB o VistaDB.

Deja una huella relativamente pequeña (sin DLL), es un db de un solo archivo (imprescindible para mí), admite Unicode, compresión BLOB, criptación y límites técnicos que parecen impresionantes para una base de datos plana. Además, el apoyo fue bueno en algunas ocasiones cuando lo necesitaba.

En contra, he notado que no admite transacciones anidadas, pero aparte de eso, no tuve problemas.

En cuanto al tamaño, nada supera a SQLite.

cuando se refiere a la falta de documentación, supongo que es un documento para DISQLite3. Los documentos SQLite están bastante completos

Eche un vistazo a NexusDB. Han utilizado con mucho éxito en el pasado.

El problema con Firebird (incrustado) es que la base de datos no puede residir en una unidad de red. Además, es difícil tener una base de datos en una unidad de solo lectura (CD / DVD).

Para algunos hacks alrededor de estas limitaciones, vea la Delphi Wiki: http://delphi.wikia.com/wiki/Firebird_tipps

NexusDB ofrece la gama completa desde integrado, hasta cliente / servidor / remoto completo. También cumple con SQL2003, creo. Lo estoy usando en algunos proyectos, y estoy muy satisfecho hasta el momento, y el hecho de que pueda funcionar en un rango tan amplio de “escalas” es una gran ventaja (no tener que aprender otra base de datos para aplicaciones a escala, etc.)

Mire esta comparación de base de datos integrada: http://sql-db.cz.cc/ , puede ser útil. La mayoría de los productos antes mencionados se presentan allí: Advantage, DBISAM, Firebird, MS SQL Server y mucho más: Accuracer, Apollo, ElevateDB, NexusDB, TurboDB.

Soy parcial a Absolute DB de Component Ace. Aunque es un producto comercial ($), es sólido, fácil de usar, de tamaño pequeño y está bien documentado. Si está buscando una gran aplicación multiusuario, este no es el camino a seguir, pero si sus necesidades de multiusuario son livianas (o inexistentes) esta es una opción sólida.

Estoy usando SQL Server Express y los componentes ADO. Funciona genial. Puede ejecutar la instalación de SQL Server Express con la línea de comandos para ocultar las complejidades de los usuarios. También puede distribuir una base de datos que cargue por nombre de archivo. Hay millones de usuarios de SQL Server, por lo que las soluciones a cualquier problema se encuentran fácilmente en los intertubos 🙂

Hice una búsqueda web para encontrar un paquete de base de datos rápido para mi aplicación Delphi. Quería que estuviera completamente contenida en el ejecutable sin necesidad de DLL o librerías externas. Originalmente encontré Accuracer por AidAim. Habían publicado lo rápido que era su base de datos e incluso dieron comparaciones con otros paquetes similares para “probar” su punto.

Quería creer en sus afirmaciones, pero pensé que buscaría en la web un poco más para encontrar los tiempos de otros paquetes. Me sorprendió mucho encontrar una publicación en los foros de discusión de Delphi donde una persona me preguntó qué base de datos usar, y hubo 14 sugerencias diferentes. Uno de los que respondieron había hecho sus propias comparaciones de tiempo y había descubierto que Accuracer era bastante lento en comparación con varios otros, que Accuracer (convenientemente) había dejado fuera de su propia página de comparación.

La publicación, más mi investigación web de seguimiento adicional por mí, me llevó a inclinarme hacia DISQLite3 , un producto basado en el progtwig Open Source SQLite , pero con mejoras para trabajar en Delphi muy rápidamente, con una sobrecarga muy pequeña y con llamadas basadas en comandos: que me gusta Está en desarrollo y pronto tendrá una versión oficial de Delphi 2009, aunque aparentemente la versión actual funcionará bajo D2009.

Addenum: la versión 2.0.0 de DISQLite3, lanzada el 17 de noviembre, es compatible con D2009.

Sé que el acceso a la MS es una basura comparativamente mala (y espero ser derribado en llamas aquí), pero si solo se necesitan pequeños datos, puede tener ventajas si la oficina ms se usa de todos modos. Para mí fue una manera de almacenar datos de progtwig con más flexibilidad que los archivos csv, que es un enfoque común para el código científico.

Puede crear un acceso db desde el código Delphi sin necesidad de tener ms Office instalada usando el controlador ado & odbc (puede ser necesario tener un archivo .accdb inicial sin tablas para copiar desde allí, no puedo recordar este detalle. Situación de licencia no segura) haciendo esto.

La extensión .accdb se puede cambiar a otra cosa y el archivo está protegido por contraseña (en un grado limitado) por lo que no es inmediatamente obvio para los usuarios su acceso si así lo desean. Sé que algunos desarrolladores comerciales hacen este método y lo copié yo mismo. Me pareció más fácil de configurar que sqlite, pero tal vez porque ya había usado ado y access en el pasado.

Si incrustado es una necesidad absoluta, mira DBISAM.

kbMemTable es un buen candidato. Se ejecuta en memoria, rápido, con múltiples hilos. Solía ​​ser libre.

Componentes4 Desarrolladores

He usado DBISAM y kbMemTable en diferentes ocasiones.

Lo que me gusta de DBISAM es que tiene excelentes características y suele ser muy confiable. Lo he usado en bases de datos grandes, búsqueda de texto completo, modo de solo lectura, CGI y muchas otras situaciones.

Sin embargo, es bastante grande en comparación con los componentes basados ​​en kbMemTable o SQLite. Y no puede tener un solo archivo por base de datos (o incluso tabla); dependiendo de la situación, esa es una gran desventaja.

kbMemTable es pequeño y es ideal para pequeñas cantidades de datos. Como se ejecuta en la memoria, tiene que ser una pequeña cantidad de datos, por supuesto.

Otra opción que he tomado en un par de mis aplicaciones de escritorio es descargar los datos directamente desde / hacia mi jerarquía de objetos usando TWriter / TReader. Esta es, de lejos, la opción más pequeña, y es absurdamente rápida en comparación con el uso de una base de datos. Los archivos de datos también son pequeños.

Sin embargo, tiene todo tipo de inconvenientes: debe codificar el control de versiones si desea agregar / cambiar campos, a menos que sea en la memoria, es incluso más complicado, no necesita soporte para múltiples usuarios, etc.

Firebird embedded es nuestra elección número 1 también. Y la suite Unified Interbase v2.0 con ella. ¡Una solución excelente y estable!

He usado ScimoreDB. Tiene sus peculiaridades, ya que le dan regalías libres y tiene sus peculiaridades en los tipos de datos y con algunos problemas de instalación. Esto fue en un proyecto C #.

Firebird todo el camino. Lo hace bastante bien y hasta ahora la versión 2.1 es muy sólida.

FireBird ofrece la oportunidad de ampliarse a varios usuarios en algún momento, o si necesita concurrencia (si su aplicación tiene varios subprocesos).

SQLite no tiene rival si solo necesita acceso de un solo usuario, ninguna otra base de datos se acerca a él en ningún aspecto, ya sea el rendimiento, la conveniencia, el soporte de SQL o la estabilidad.

Firebird es realmente impresionante y tiene una huella pequeña, por lo que puede usar integrado y puede escalarse hacia arriba para muchos usuarios y lo hace unicode bien. Yo uso componentes devart con Delphi 2009 y FIB plus para Delphi 6/7 (su versión para 2009 y unicode) no está listo todavía muy mal)

Hmmm, nadie ha recomendado el BDE – Me pregunto por qué es eso 😉

BlackFishSQL es otra posibilidad, aunque todavía no he probado en profundidad.

Tengo una base de datos que tengo que registrar 5 datos de campo por cada 20 segundos durante 10 días .. 3 campos son enteros, 1 campo es doble (tiempo) y 1 campo es cadena [5].

Todavía estoy usando Delphi6 srv2 debido a mis componentes. Las versiones más nuevas de Delphi son terribles en los componentes que tengo que gastar miles de dólares en dinero para reconstruir mi biblioteca de componentes. Por lo tanto, Delphi 6 es aún mejor para aplicaciones commertial reales que nunca la versión de delphis da muchos problemas. En muchos puntos, como las lecturas de USB o de comunicaciones, etc., lanzan versiones más nuevas antes de que las versiones anteriores nunca lleguen al mercado.

He configurado un código con Delphi6 que agrega 43200 registros en una tabla para la prueba porque desplegaré la tabla en la aplicación mientras tenga 43200 registros. Mostraré todos los datos en DBChart.

El resultado de la prueba está debajo de las bases de datos que llenan las tablas mediante el comando de inserción con 43200 registros

Dbisam = 34 seg,
ElevateDb = 11 segundos,
AbsoluteDB = 45 seg,
SQLlite = 32 minutos,
Firebird = 12 min,
MSSQL12 localDB = 28 minutos,
Mesa fácil = 8 minutos,
BDE = bloqueado,

No he probado oracle, blackfish, sysbase, nexsusDb, etc. pero parece que también serán muy lentos. Me he conectado con DBChart y solo elevateDb y absoluteDB ha cargado 43200 registros en DBchart en un tiempo excepcional, como 7 ~ 10 segundos. Otros todos tomados minutos. Por lo tanto, las bases de datos más lentas siempre necesitan trucos de encoding para tener éxito en algunos trabajos reales.

También probé la velocidad de búsqueda mediante el comando locate, que desafortunadamente las bases de datos basadas en servidor siempre son más lentas.

MSSQL y SQLLite3 son extremadamente difíciles de administrar para delphi que me hicieron sentir muy cansado.

Estos son mis resultados de prueba
Al final, decidí usar AbsoluteDB, Dbisam y Elevate. He echado el rest de la PC.

El software Elevate no es compatible con la función recno que requiere códigos adicionales en tiempo de ejecución para administrar. Esto hace que la base de datos sea más lenta. Otro error es que con el software Elevate son campos autoinc. No hay forma de reiniciarlo. Por lo tanto, no he elegido el software Elevat, incluso si es la base de datos más rápida. Dicen muchas buenas funciones, pero cuántas de ellas la usamos de hecho. Simplemente dejaron las funciones más importantes que no se admiten, pero arreglaron muchas funciones innecesarias. y parece que desde hace 8 años no hay ninguna ventaja tampoco.

Si quiere ver con su propio ojo, por favor intente y vea …

Estoy pensando entre dos ahora DB absoluta o DBisam4

cuando se trata de bases de datos integradas, la primera pregunta es: ¿es multiusuario? En realidad, ¿quién necesita una base de datos que no permita conexiones múltiples (lectura y escritura)? He intentado (intensamente) todas las bases de datos mencionadas y encontré solo una que realmente funciona como debería. Y eso es Accuracer. La única lástima con exactrecer es que es una banda de tres hombres y la falta crónica de soporte adecuado. También es principalmente estático en el desarrollo ya que no hemos visto características reales en años. No es sorprendente ya que solo una persona realmente lo desarrolla. Parece que están viviendo en la antigua fama. Los elogios de los usuarios reflejan eso (por lo general, comentarios de hace 10 años). Para una experiencia de usuario única, recomendaría Absolute Database. En cuanto a los principales jugadores, recomendaría SQL Server de Microsoft. Oracle se ha convertido en un bloatware y poco a poco va muriendo.

ps lo que es bueno en accuracer es que sus bases de datos incrustadas funcionan igual que el servidor completo. Bloquea solo el registro actual si está en uso mientras que el rest funciona normalmente. Buena base de datos. Lástima que está estancado.