Herramientas gratuitas de IBSurgeon

2 comentarios

La empresa IbSurgeon provee herramientas y servicios para Firebird, afortunadamente 3 de esas herramientas son gratuitas:

  • IbSurgeon Response Checker. Mide el tiempo que una consulta SQL tarda en devolver los resultados pedidos, eso es muy útil para descubrir cuando las consultas son lentas.
  • IbSurgeon DBInfo. Muestra estadísticas de las estructuras internas, para que los administradores y desarrolladores puedan ver cuantos datos, índices, blobs, y otro tipo de información las bases de datos almacenan.
  • IbSurgeon Log Viewer. Facilita ver y analizar el contenido del archivo FIREBIRD.LOG, en ese archivo hay mucha información útil que puede ser usada para encontrar y resolver problemas que tengan las bases de datos.

Estas herramientas gratuitas pueden ser descargadas desde:

http://ib-aid.com/en/ibsurgeon-free-tools/

Donde además encontrarán la documentación y más información sobre ellas.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Precauciones al usar Firebird Embedded

4 comentarios

Como seguramente ya sabes, puedes usar Firebird con 4 arquitecturas diferentes:

  • Classic
  • SuperClassic
  • SuperServer
  • Embedded

Las tres primeras normalmente tienen al Servidor en una computadora y al Cliente en cada una de las computadoras que necesitan acceder a la/s base/s de dato/s. Una de esas tres primeras arquitecturas debemos usar cuando queremos que varios usuarios estén conectados al mismo tiempo a la misma Base de Datos, este es el caso más frecuente cuando usamos Firebird. Colocamos a las bases de datos en una carpeta no compartida que se encuentra en la misma computadora donde se encuentra el Servidor y éste es quien se encarga de acceder a esas bases de datos cuando los Clientes se lo soliciten. Eso está muy bien y funciona perfectamente.

La arquitectura Embedded en cambio la usaríamos cuando siempre será una sola persona quien se conectará a la Base de Datos, como sería en el caso de una aplicación monousuario.

¿Y qué ocurrirá si ponemos a la Base de Datos en una carpeta compartida y permitimos que accedan a ella desde varias computadoras de la red usando Embedded?

Que ocurrirá una catástrofe y se destrozará y volverá inservible a la Base de Datos.

¿Por qué eso?

 Porque Embedded puede manejar varias conexiones, pero con la condición de que todas esas conexiones correspondan a un mismo proceso. Siendo así, él administrará los cambios a las páginas correctamente, evitando que una conexión sobre-escriba los cambios hechos por otra conexión.

Sin embargo, si desde varias computadoras se está accediendo mediante Embedded a una Base de Datos que se encuentra en una carpeta compartida se terminará con esa Base de Datos destruida.

 Eso es debido a que cada Embedded cree que tiene acceso exclusivo a la Base de Datos y realiza en ella los cambios que necesita, pero otros Embedded pueden estar realizando otros cambios en las mismas páginas.

Ejemplo:

Un proceso Embedded necesita una nueva página para guardar en ella los datos de la tabla PRODUCTOS, esa nueva página tiene el número 5.000

Otro proceso Embedded necesita una nueva página para guardar en ella los índices de la tabla VENTAS, esa nueva página también tiene el número 5.000

No olvides que cada proceso cree que tiene acceso exclusivo a la Base de Datos y por lo tanto desconoce lo que otros procesos le están haciendo a esa Base de Datos. Un Embedded no tiene forma de saber que otro Embedded está accediendo a la misma Base de Datos.

En algún momento el problema se vuelve catastrófico, cuando una página TIP se convierte en una página de cualquier otra cosa y se perdió el acceso a todos los datos.

Desastre total.

Conclusión:

Si más de un usuario accederá a una Base de Datos de Firebird al mismo tiempo, entonces debemos usar una arquitectura Classic, SuperClassic, o SuperServer para ello.

Podemos usar Embedded cuando estamos 100% seguros de que solamente un usuario se conectará y jamás, por ningún motivo, se conectará más de un usuario.

Si ponemos a una Base de Datos en una carpeta compartida de la red y permitimos que accedan a ella usando Embedded es seguro que en algún momento esa Base de Datos se volverá totalmente inservible.

Artículos relacionados:

Entendiendo a las páginas de la Base de Datos

El índice del blog Firebird21

El foro del blog Firebird21

 

 

Máxima cantidad de columnas en una tabla

3 comentarios

Si te preguntan ¿cuántas columnas puede tener una tabla de Firebird? tu respuesta debe ser: “depende de los tipos de datos de las columnas”

¿Por qué eso?

Porque en Firebird no hay una cantidad máxima de columnas, como sí hay en Visual FoxPro, en Access y en otros lenguajes o motores de bases de datos. En los dos anteriormente nombrados el límite es de 255 columnas, pero en Firebird no existe tal cosa.

¿Por qué no?

Porque en Firebird una fila puede tener un máximo de 65.536 bytes y por lo tanto la cantidad máxima de columnas que puede tener una tabla varía entre 1 y 65.536

 Veamos esto más detalladamente:

Algunos tipos de datos ocupan una cierta cantidad predeterminada de bytes. Por ejemplo, SMALLINT ocupa siempre 2 bytes, INTEGER ocupa siempre 4 bytes, BLOB ocupa siempre 4 bytes, etc.

Pero tenemos dos casos especiales, que son CHAR y VARCHAR, la cantidad de bytes que ellos ocupan dependen del CHARACTER SET usado. Si no especificamos un CHARACTER SET o especificamos uno de los llamados “occidentales” entonces 1 carácter ocupará siempre 1 byte. Para nosotros que escribimos en castellano, portugués, francés, inglés, u otros idiomas occidentales eso es lo normal. Pero para quienes escriben en árabe, hebreo, chino, japonés, coreano, vietnamita, etc., eso ya no es cierto. Entonces, si el CHARACTER SET de la columna es por ejemplo ISO8859_1 (el recomendado para guardar texto escrito en castellano) una columna definida como CHAR(20) se cuenta como 20 bytes pero si el CHARACTER SET de la columna es UTF8 entonces una columna definida como CHAR(20) se cuenta como 40 bytes, ya que cada carácter ocupa 2 bytes cuando se usa UTF8.

¿Qué implica todo esto?

Que solamente tendremos problemas si la suma de los bytes ocupados por todas las columnas supera la cantidad de 65.536, si es igual o menos que eso estará todo bien.

Como vimos anteriormente, es muy fácil hacer esa suma.

Ejemplo 1:

Evidentemente, cada caso es distinto, depende de la estructura de la tabla para saber cuantas columnas como máximo puede tener pero supongamos lo siguiente para este ejemplo:

La cantidad de bytes que ocupa cada columna de una tabla es en promedio de 20. Por lo tanto, dividiendo 65.536 por 20 obtenemos como resultado 3.276 y para esa tabla en particular podríamos tener hasta 3.276 columnas.

Como vemos, mucho más que las 255 columnas del Visual FoxPro o del Access

De todas maneras, si necesitas una tabla que tenga tantas columnas lo más probable es que tu diseño esté muy mal y tendrías que ver la forma de mejorarlo.

Ejemplo 2:

En una tabla solamente necesitamos guardar números enteros y como cada columna de tipo INTEGER ocupa 4 bytes entonces podríamos tener un máximo de 65.536 / 4 columnas lo cual nos da como resultado 16.384 columnas.

Ejemplo 3:

En una tabla necesitamos guardar una columna de tipo SMALLINT, tres columnas de tipo INTEGER, y el resto serán columnas de tipo CHAR(60). Entonces tenemos: 65.536 – 2 – 3 * 4 = 65.522, y como 65.522 / 60 es igual a 1.092, podríamos tener hasta 1.096 columnas en esa tabla (1 columna SMALLINT, 3 columnas INTEGER, y 1.092 columnas CHAR(60)).

Conclusión:

En Firebird no hay una cantidad máxima de columnas que puede tener una fila de una tabla, lo que sí hay es una cantidad máxima de bytes que puede tener una fila de una tabla. Ese número es 65.536 bytes y es muchísimo más que suficiente para todas las necesidades que podamos tener. Si llegamos a necesitar más que 65.536 bytes entonces es seguro que nuestra Base de Datos está mal diseñada y deberíamos preocuparnos por mejorar eso.

Artículos relacionados:

Entendiendo a los conjuntos de caracteres

Algo más sobre los conjuntos de caracteres

Funciones útiles con los conjuntos de caracteres

Cantidad de columnas de una tabla

El índice del blog Firebird21

El foro del blog Firebird21

 

 

Guardando y recuperando fotografías y vídeos

1 comentario

Si usas Visual FoxPro con Firebird entonces podría serte útil descargar un archivo .ZIP dentro del cual hay unos .PRG y un formulario en cuyos códigos fuente podrás ver:

  • Como mostrar una fotografía guardada en el disco duro
  • Como guardar esa fotografía en una tabla de Firebird
  • Como recuperar esa fotografía para poder mostrarla
  • Como mostrar un vídeo guardado en el disco duro
  • Como grabar ese vídeo en una tabla de Firebird
  • Como recuperar ese vídeo para poder mostrarlo
  • Como conectarse a una webcam
  • Como mostrar lo que está filmando la webcam
  • Como guardar una captura de lo que está filmando la webcam
  • Como desconectarse de la webcam

FOTOS_VIDEOS_1Captura 1. Si haces clic en la imagen la verás más grande

FOTOS_VIDEOS_1

Captura 2. Si haces clic en la imagen la verás más grande

 FOTOS_VIDEOS_3Captura 3. Si haces clic en la imagen la verás más grande

 FOTOS_VIDEOS_4Captura 4. Si haces clic en la imagen la verás más grande

NOTAS:

  •  No necesitas estar conectado a la Base de Datos para elegir y ver fotografías y vídeos que se encuentran en el disco duro o para usar la webcam
  • Para poder guardar o recuperar las fotografías y los vídeos en una tabla de Firebird evidentemente sí tendrás que estar conectado a la Base de Datos
  • Con la opción de vídeos no solamente podrás elegir vídeos sino también archivos .MP3 y .WAV, para escuchar música y sonidos. Usé un control VMPlayer.OCX7 en este formulario, pero por supuesto que tú puedes usar cualquier otro que te guste
  • Si quieres, puedes hacer clic en el checkbox “Mostrar contraseña” para ver la contraseña que se escribe en el campo de texto “Contraseña”. Es opinión del autor de este blog que esa opción siempre debería existir cuando se pide una contraseña
  • El código fuente es muy profesional pero por supuesto que podría mejorarse, si no programas de esta manera podría serte útil fijarte y revisar muy bien el código fuente, podrías aprender algo. Una mejora evidente es crear una clase que tenga todas esas opciones para que cuando necesites tener gráficos, fotografías, vídeos, o webcam, te resulte muy fácil conseguirlo.
  • El archivo .ZIP puedes descargar desde:

http://www.mediafire.com/download/9xdqn838zbu2jyh/SQL_FOTOGRAFIAS.zip

 Artículos relacionados:

Guardando y mostrando fotografías

El índice del blog Firebird21

El foro del blog Firebird21

 

 

¡¡¡Feliz Año 2015!!!

8 comentarios

El autor de este blog les desea un espléndido año 2015 a todos los lectores. Que la pasen súper bien este año.

Walter.