2010-01-20 17 views
5

Me gustaría preguntar a los chicos con experiencia en Firebird y IBPP (especialmente este último). Encontré muchas publicaciones positivas sobre Firebird pero estoy teniendo un problema para decidir sobre IBPP. La interfaz en sí es limpia y simple, pero parece que el proyecto no tiene mucha actividad (quizás porque es muy estable).Experiencia con la interfaz de IBPP para la base de datos de Firebird

  • ¿Recomendaría IBPP para el entorno de producción?
  • ¿Es seguro para subprocesos?
  • ¿Alguna falla conocida?

Gracias.

Respuesta

3

Además de los puntos mencionados Milán:

  • Actualmente no existe una manera de utilizar más de una biblioteca de cliente cuando se conecta a diferentes bases de datos, o incluso para especificar la biblioteca cliente se utilizará. Hay una cierta secuencia codificada de ubicaciones de biblioteca de cliente que son probadas, y la primera que se encuentra se usará para todas las conexiones. Una versión de IBPP que cambia esto se ha insinuado durante mucho tiempo, pero aún no ha llegado. SVN trunk contiene algún código para tratar con esto, pero yo diría que es calidad alfa como máximo.
    Y todo esto es válido solo para Windows, ya que en todas las demás plataformas, la biblioteca del cliente Firebird no se carga en tiempo de ejecución de todos modos.

  • La biblioteca no es segura para subprocesos. Eso no importa en su mayor parte, ya que debes dejar que cada hilo tenga su propia conexión, transacción y otros objetos variados de todos modos. Pero IBPP usa su propia implementación de puntero inteligente, que no es ni a prueba de excepciones ni a prueba de subprocesos.Aún así, siempre que inicie la biblioteca desde el hilo principal (antes de que se cree otro hilo) y cree y destruya objetos IBPP en el mismo hilo (¡absolutamente ningún intercambio de objetos con otros hilos!) Utilizando IBPP en múltiples hilos debería funcionar multa.

  • Si puede vivir con los puntos anteriores (puede que no le importen, en absoluto), sin duda está listo para su uso en producción. Siempre puedes cambiar las cosas con las que te encuentras, como también lo hicimos con FlameRobin.

+1

Para el primer punto de mghie: Tiene toda la razón, pero entrar en el código y cambiar la ruta de la biblioteca del cliente es realmente bastante fácil (archivo: "_ibpp.cpp", sección: GDS :: Llamada()). Dado que la biblioteca del cliente para la base de datos incrustada "fbembed.dll" también habilita las conexiones a una base de datos remota (fbclient.dll parece ser un subconjunto de fbembed.dll) quizás nunca necesite cambiar la biblioteca del cliente. –

+1

@Ergodicity: Es cierto, pero sigue siendo una sola biblioteca de cliente para todas las conexiones. Mi respuesta fue con respecto al uso de bibliotecas cliente múltiples al mismo tiempo, que es una característica común de las herramientas del cliente Firebird como FlameRobin (que todavía no lo tiene). Eso no fue posible entonces (hace más de 5 años), y AFAIK la situación no es realmente diferente hoy en día. Esto en sí mismo puede ser interesante en el contexto de la pregunta, si "el proyecto no tiene mucha actividad" ... – mghie

+0

@mghie diría que es mejor utilizar el [tenedor ibpp utilizado en Flamerobin] (https : //github.com/mariuz/flamerobin/tree/master/src/ibpp) (en su estado actual)? – Wolf

1

No puedo decir por experiencia porque nunca he usado IBPP.
Pero aparentemente es usado por el proyecto flamerobin así que confío en que sea lo suficientemente estable.

+0

pero no la versión sin cambios desde SourceForge https://sourceforge.net/projects/ibpp/files/ - FR también "movido" de SF a GitHub https://github.com/mariuz/flamerobin/tree/master/src/ibpp – Wolf

3

IBPP es muy estable y lo recomendaría para la producción. Es decir, si va a usarlo para aplicaciones regulares.

Si desea construir una herramienta de administración o algo similar, prepárese para entrar y ensuciarse las manos ya que algunas de las características más nuevas (es decir, cosas de Firebird 2.5) que no son SQL sino API no son compatibles. Por ejemplo, falta una capa que exponga la nueva API de seguimiento.

De todos modos, adelante y lo uso. Tengo un montón de aplicaciones de IBPP en producción desde hace años, y, como Douglas escribió, FlameRobin está utilizando IBPP y funciona sin problemas (al menos en lo que respecta a la capa de DB).

Lo único que debe tener cuidado con los campos NUMERIC, que se almacenan internamente como una escala entera en Firebird. IBPP expone aquellos a través de C/C++ "doble", pero también a través de un entero de 16/32/64 bits. Así que tenga mucho cuidado al recuperar dichos valores, ya que no recibirá ninguna advertencia. Por ejemplo, si tiene un campo DECIMAL (18,2) con un valor de 254.00 y accidentalmente lo lee en un entero, obtendrá 25400, no 254. Asegúrese de leerlos como doble o escalarlos más adelante. Esto es útil porque puede convertir 25400 a cadena de manera segura y luego agregar un punto decimal, para que no pierda precisión con el doble (todo depende del tipo de su aplicación y qué dígitos cuentan, por supuesto).

Cuestiones relacionadas