Pregunta

Estoy creando una aplicación de escritorio en Delphi y planeo usar una base de datos integrada. Comencé el proyecto usando 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 de los pros y los contras de cada db incrustado? El tamaño es importante, así como el apoyo y los recursos. ¿Qué has usado y por qué?

¿Fue útil?

Solución

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

Otros consejos

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 la base de datos es compatible con Firebird Server para poder utilizar herramientas estándar para la gestión e inspección de bases de datos. La distribución consiste en soltar algunos archivos en su carpeta exe.

No se admite el acceso simultáneo desde múltiples programas, pero sí el acceso simultáneo desde múltiples subprocesos (siempre y cuando se asegure de 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 base de datos elegida por los desarrolladores de Mac porque es directamente compatible con CoreData y en el iPhone, por lo que hay una gran base de usuarios (sin mencionar a todos los demás usuarios).

Veamos, comparación rápida:

SQLite:

  • escritura dinámica en la base de datos
  • archivos multiplataforma
  • se ejecuta en Windows, Linux, Mac, etc.
  • dominio público
  • admite transacciones
  • se basa en la seguridad del sistema de archivos, no incluye seguridad propia

Firebird incrustado:

  • escribir fuerte en la base de datos
    • no todos los tipos de datos SQL son compatibles
  • archivos multiplataforma
    • Firebird integrado solo se ejecuta en Windows
    • Los archivos de Firebird integrados tienen el mismo formato que la versión completa del servidor
    • Los archivos de Firebird integrados se pueden copiar a un servidor que no sea Windows para su uso
  • disponible bajo una MPL modificada ("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 incrustado:

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

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

He usado DBISAM en varios proyectos. Está completamente incrustado sin necesidad de una DLL externa. A diferencia de los otros que enumeró, es comercial. Sin embargo, muchas características excelentes y muy bien documentadas y compatibles. Tienen un sucesor que todavía no he probado.

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

Recomiendo encarecidamente usar AnyDAC cuando trabaje con bases de datos y Delphi; luego puede elegir apuntar a FB o SQLite sin problemas.

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

Uso el servidor de base de datos Advantage de Sybase, pero también soy el administrador de I + D; por lo tanto, 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 de SQL, hace que Advantage sea única entre muchas de las otras ofertas de Delphi. Advantage admite tablas grandes (solo limitadas por el número de registros, 2 mil millones) y tiene un motor local gratuito, que es bueno para PC de desarrollo y para sitios de clientes pequeños que no requieren funcionalidad cliente / servidor. Cambie a cliente / servidor con una única 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 un solo usuario, Firebird Embedded o SQLite son probablemente las mejores opciones (y el precio es correcto). Por otro lado, si necesita soporte para una gran cantidad de usuarios múltiples, probablemente debería usar Firebird regular en lugar de la versión Embedded (el servidor es fácil de instalar, por lo que no tendrá muchos problemas aquí).

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

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

Por 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

Echa un vistazo a NexusDB. Lo he usado 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 trucos en torno a estas limitaciones, consulte la Wiki de Delphi: http://delphi.wikia.com/wiki/Firebird_tipps

NexusDB ofrece el rango completo desde embebido, hasta cliente / servidor / remoto completo. También compatible con SQL2003, creo. Lo estoy usando en algunos proyectos, y estoy muy satisfecho hasta ahora, y el hecho de que puede funcionar en una gama tan amplia de '' escalas '' es una gran ventaja (no tener que aprender otra base de datos para aplicaciones ampliadas, etc.).

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

Soy parcial al Componente Ace's Absolute DB. Aunque es un producto comercial ($), es sólido, fácil de usar, ocupa poco espacio y está bien documentado. Si está buscando una gran aplicación multiusuario, este no es el camino a seguir, pero si sus necesidades multiusuario son leves (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 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 del servidor SQL, 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 contenido en el ejecutable sin necesidad de bibliotecas o archivos DLL externos. Originalmente encontré Accuracer por AidAim. Habían publicado qué tan rápida era su base de datos e incluso dieron comparaciones con otros paquetes similares a & # 8220; probar & # 8221; su punto.

Quería creer 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 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 encontrado que Accuracer era bastante lento en comparación con varios otros, que Accuracer había (convenientemente) dejado fuera de su propia página de comparación.

La publicación, más una investigación web de seguimiento adicional realizada por mí, me llevó a inclinarme hacia DISQLite3 , un producto basado en el programa Open Source SQLite , pero con mejoras para trabajo en Delphi muy rápido, con gastos generales muy pequeños y con llamadas basadas en comandos, lo que me gusta. Está activamente en desarrollo y pronto tendrá una versión oficial de Delphi 2009, aunque aparentemente la versión actual funcionará con D2009.

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

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

Puede crear una base de datos de acceso desde el código delphi sin tener instalado ms office con ado & amp; controlador odbc (puede ser necesario tener un archivo .accdb inicial sin tablas para copiar y luego rellenar, no puedo recordar este detalle. No estoy seguro de que la situación de licencia lo haga.

La extensión .accdb se puede cambiar a otra & amp; el archivo está protegido con 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 & amp; Lo copié yo mismo. Lo encontré más fácil de configurar que sqlite, pero tal vez porque ya había usado ado & amp; acceso en el pasado.

Si incrustar es una necesidad absoluta, mire DBISAM.

kbMemTable es un buen candidato. Se ejecuta en memoria, rápido, multihilo. Solía ??ser gratis.

Components4Developers

He usado DBISAM y kbMemTable en diferentes ocasiones.

Lo que me gusta de DBISAM es que tiene excelentes características y, por lo general, es muy confiable. Lo he usado en grandes bases de datos, 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 algunas de mis aplicaciones de escritorio es descargar los datos directamente desde / hacia mi jerarquía de objetos usando TWriter / TReader. Esta es, con mucho, 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 esté en la memoria, es aún más complicado, no hay soporte para múltiples usuarios, etc.

Firebird incrustado es nuestra opció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 de C #.

Firebird hasta el final. Hace bastante bien todo y hasta ahora la versión 2.1 es muy sólida.

FireBird ofrece la oportunidad de escalar a múltiples usuarios en algún momento, o si necesita concurrencia (si su aplicación se vuelve multiproceso).

SQLite no tiene rival si solo necesita acceso de usuario único, ninguna otra base de datos se le acerca en ningún aspecto, ya sea rendimiento, conveniencia, soporte SQL o estabilidad.

Firebird es realmente impresionante y tiene una huella pequeña, por lo que puede usar incrustado y se puede ampliar para muchos usuarios y hace unicode muy bien Utilizo componentes devart con delphi 2009 y FIB plus para delphi 6/7 (su versión para 2009 y Unicode todavía no está lista)

Hmmm, nadie ha recomendado el BDE - Me pregunto por qué es eso ;-)

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

Tengo una base de datos que debo 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 nuevas versiones de Delphi son terribles en los componentes en los que tengo que gastar miles de dólares para reconstruir mi biblioteca de componentes. Por lo tanto, Delphi 6 sigue siendo el mejor para aplicaciones comerciales reales que nunca la versión de Delphis da muchos problemas. En muchos puntos, como USB o lecturas de comportamiento, etc., lanzan las más nuevas antes de que las versiones anteriores nunca salgan al mercado.

He configurado un código con Delphi6 que agrega 43200 registros en una tabla para 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 llenas las tablas mediante comando de inserción con 43200 registros

  

Dbisam = 34 segundos,
  ElevateDb = 11 segundos,
  AbsoluteDB = 45 sec,
  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 han cargado 43200 registros en DBchart en un tiempo excepcional, como 7 ~ 10 segundos. Otros todos los minutos tomados. Por lo tanto, las bases de datos más lentas siempre necesitan trucos de codificación para tener éxito en algunos trabajos reales.

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

MSSQL y SQLLite3 son extremadamente difíciles de manejar en Delphi que me hicieron sentir muy cansado.

Estos son los resultados de mi prueba
Al final decidí usar AbsoluteDB, Dbisam y Elevate. He tirado el resto de la PC.

El software Elevate no admite la función de 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 de inclusión automática. No hay forma de restablecerlo. Por lo tanto, no he elegido el software Elevat, aunque es la base de datos más rápida. Dicen muchas buenas funciones pero, de hecho, cuántas de ellas las usamos. Simplemente dejaron las funciones más importantes no admitidas pero arreglaron muchas funciones innecesarias. y parece que desde hace 8 años tampoco hay ninguna ventaja.

Si quiere ver con sus propios ojos, por favor intente ver ...

Estoy pensando entre dos DB o DBisam4 absolutos

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 múltiples conexiones (lectura y escritura)? Intenté (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 el precisor 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 viven de la vieja fama. Los elogios de los usuarios reflejan eso (generalmente comentarios de 10 años). Para una experiencia de usuario único, recomendaría Absolute Database. En cuanto a los principales jugadores, recomendaría SQL Server de Microsoft. Oracle se ha convertido en un bloatware y está desapareciendo lentamente.

ps Lo que es bueno en precisor es que su base de datos integrada funciona igual que un servidor completo. Solo bloquea el registro actual si está en uso mientras que el resto funciona normalmente. Buena base de datos. Lástima que esté estancado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top