2009-12-02 13 views
6

Estoy tratando de actualizar una aplicación heredada que hace todo su almacenamiento de datos en un sistema pirateado de archivos BDE Paradox. El programa funciona bastante bien, bajo ciertas condiciones angostas, pero tiene serios problemas de rendimiento.Buscando una base de datos local para D2009 +

Me gustaría tratar de mejorar las cosas actualizando a un mejor sistema de base de datos. Lo que necesito es una base de datos local, preferiblemente una donde pueda almacenar todo en un solo archivo en lugar del sistema actual "uno o más archivos por tabla". Debe admitir relaciones de clave externa e indexación de tabla, y debe poder devolver un resultado rápidamente a partir de una consulta de una tabla con cientos de miles de elementos.

Este último es importante. El sistema actual está indexado, pero eso no parece importar mucho. Todas las consultas parecen ejecutarse en el tiempo O (N) donde N es el tamaño total de la tabla, y se vuelve horriblemente lento cuando las tablas comienzan a agrandarse. No estoy seguro de por qué, pero tiene que desaparecer.

Y tiene que funcionar bajo D2009 y posterior. ¿Alguien puede proporcionar algunas recomendaciones?

Respuesta

7

¡Otra votación aquí para Firebird incorporado (y Firebird en general)!

Acabo de tener una increíble experiencia de portando una aplicación Interbase 6.0 para Firebird 1.5 incrustado; después de un momento leyendo los documentos, la conversión real tomó literalmente 20 minutos y ahora mi aplicación se ejecuta felizmente en Vista y Windows 7. Si no necesita soporte multiusuario, entonces seriamente consideraría Firebird incrustado (y si si necesita soporte multiusuario, ¿por qué no mirar Firebird de todos modos?

Es un archivo único para el archivo db y un par de archivos DLL pequeños para el motor, y es fácil de implementar, mantener y realizar copias de seguridad. Hay muchas herramientas para ayudar durante el desarrollo y el soporte técnico en la comunidad Delphi para IB y Firebird es inigualable.

El soporte de SQL es excelente con restricciones, desencadenadores y procedimientos almacenados (también tenemos UDF para ayudar a aumentar el idioma - DLL que se pueden escribir en Delphi y utilizarse como funciones en línea, etc. en su base de datos. flexible).

Su punto final sobre el rendimiento, bueno, Interbase siempre fue bastante ágil de todos modos, y mi experiencia con Firebird incrustado hasta el momento es que 'grita' - realmente, realmente impresionado.

3

Hay buena información disponible en this question - SQLite3 y Firebird Embedded parecen ser buenas opciones.

1

¿Concurrencia?

Utilicé SQLite en un proyecto (no Delphi) y estaba muy contento con él.

De lo contrario, creo que el DBMS integrado de un solo archivo de elección para Delphi parece ser Firebird.

7

He usado este SQLite Wrapper con buen exito bajo D2009. Lo tuve funcionando en cuestión de minutos. Tiene indexación y muy baja sobrecarga. (Este es gratis y no necesita nada más además de SQLite Dll)

También hay un contenedor SQLite comercial de Delphi Inspiration y el sitio dice que también tienen una licencia de uso gratuita y no comercial. . No he usado ese.

También he utilizado Firebird incrustado, pero también necesita tener componentes de conectividad para hablar con él. Tengo IBObjects y eso es lo que uso tanto para el servidor como para las versiones integradas. He probado otros componentes de base de datos Firebird libres, pero no he encontrado ninguna que realmente me gusta o que me sentí seguro en.

[EDIT]
Dado que la mayoría de las personas están sugiriendo Firebird, aquí están algunos de los componentes de conectividad para Firebird que he intentado en el pasado o que yo he oído hablar de:

Mercury Database Objects - libre/Opensource
IBObjects - Comercial (he comprado éste mismo)
FIBPlus - Comercial
Firebirds ODBC Driver - Libre/Opensource
ZeosLib - Libre/Fuente abierta

+0

Se utiliza tanto SQLite y Firebird. Encontrado SQLite la mejor opción – Gerard

+0

+1 Ooh, lista interesante, gracias. He usado IBX con Interbase y Firebird, aunque era D7, no D2009. Si IBX no está disponible para 2009/2010, probablemente usaría FIBPlus (compramos una licencia pero nunca la hemos usado) o buscaría un controlador DBXPress decente como todas mis otras cosas (SQL Server, principalmente) se hace usando DBXPress y en general no es/eso/diferente de IBX para las cosas básicas. – robsoft

+1

Una biblioteca más - AnyDAC (http://www.anydac.net). Tiene controladores nativos Firebird y SQLite. – oodesigner

0

Otra opción sería usar ADO y una base de datos de acceso de Microsoft. La única desventaja es que el usuario debe tener el motor Jet y el MDAC instalados ... lo que hacen la mayoría de las máquinas. La ventaja de esto es que facilita la conversión a MSSQL. Simplemente cambie la cadena de conexión para apuntar a la base de datos de SQL Server y realice algunos cambios de consulta menores.

0

He utilizado NexusDB durante años y es una base de datos pequeña, confiable y flexible. Está escrito en Delphi, viene con el código fuente completo y puede compilarse completamente en su aplicación (no se pueden distribuir archivos DLL) o ejecutarse como un sistema de servidor cliente.

Es difícil saber si cumplirá con sus requisitos de rendimiento, pero no he tenido ningún problema con el rendimiento de las consultas SQL, siempre que estuviera indexando los campos correctos. Es un producto de un archivo por mesa, pero no dejes que eso te impida echarle un vistazo.

Es un producto comercial, pero ofrecen una versión solo de DCU que solo se puede usar en aplicaciones de usuario único/integradas de forma gratuita.

1

Trate de base de datos Advantage, que ofrece Sybase (adquirida de Extended Systems)

http://marketing.ianywhere.com/forms/ADS91-30-Day

Es gratis si usted no necesita cliente/servidor o funcionalidad de Internet.

El inconveniente es que no es 100% VCL, por lo que el VCL incluye enlaces estáticos a las DLL.

Si la aplicación necesita alguna vez escalar, no tendrá que volver a cambiar las bases de datos.

1

Recomendaría usar Postgresql como base de datos, lo usamos en todos los proyectos que trabajamos y lo probamos con más de 4 millones de registros en una tabla y funcionó bastante bien.

0

PostgreSQL es muy buena, pero es una maquinaria pesada que está más cerca de Oracle para que pueda hacer aplicaciones muy pesadas, pero un poco de dolor para mantener

Firebird es fantástica incrustado o no para la conectividad en el año 2009 se pueden usar FIB plus desde devrace.com tienen una versión de prueba que solo muestra una pantalla molesta, así que si no es una aplicación comercial, está bien.

else si es una aplicación comercial puede gastar los $ 300 y comprarla, también utilicé componentes devart para interbase/firebird y también son muy buenos si quiere usar zeos gratis pero obtiene lo que paga por http://sourceforge.net/projects/zeoslib/ SQL Lite no es un solo archivo y si es multi-usuario que aspira

0

estoy trabajando en terminar una conversión de una gran aplicación que ha utilizado BDE/Paradox para una base de datos local y Oracle 8i para un control remoto db.

Estoy usando UniDAC de DevArt. Eso me permite un único conjunto de componentes (completamente libre del antiguo BDE) que puede afectar a MSSQLServer como un DB local y continuar acosando a Oracle como mi control remoto. Tengo la posibilidad de poder cambiar las bases de datos en cualquiera de los extremos ahora con mayor facilidad, simplemente cambiando de proveedor.

Me gusta este enfoque, y los componentes parecen estar bastante bien hechos.

Jay (D2007)

Cuestiones relacionadas