Serie ficheros virtuales

 

 

 

 

C Ficheros virtuales

 

 

 

 

Introducción

 

 

En este blog se va a exponer un método que permite crear bases de datos virtuales, entendidas como grupos de ficheros virtuales relacionados.

 

Los ficheros virtuales sustento de las bases de datos que se van a introducir serán conjuntos de registros correspondientes a estructuras de datos, que usualmente constarán de subestructuras de claves y subestructuras de datos y en los que a un mismo conjunto de datos se podrá acceder con distintas vistas lógicas, del mismo modo en que se haría con los ficheros físicos usuales.

 

El método se concretará en la construcción de una aplicación núcleo escrita en lenguaje C ANSI y en la presentación de ejemplos escritos en Visual C y en Visual Basic.

 

En otros blogs hermanos se presentarán implementaciones en lenguajes distintos de forma nativa, como en VBA para excell o en JavaScript. En su momento, se explorarán soluciones mixtas, como usar el desarrollo presente desde excell bajo el modelo COM.

                                                   

                                                                                   _________

 

Una aplicación de ficheros virtuales es de gran interés porque dota al desarrollador de una herramienta de propósito general con la que afrontar un repertorio de problemas de muy diversa tipología:

 

 

- Resuelve el problema del caché.

 

El caché surge como respuesta a la habitual situación de encontrarnos con rutinas complejas que se invocan repetidamente a lo largo de un mismo proceso para las mismas condiciones.

Es muy oportuno a efectos de rendimiento disponer de un mecanismo de caché de resultados parciales de manera que los mismos queden disponibles para su recuperación instantánea posterior sin necesidad de volver a calcularlos.

Precisamente este punto es el acicate inicial para el desarrollo de la aplicación de ficheros virtuales que se presenta.

Una vez que se dispone de un mecanismo de caché, este puede evolucionar de manera natural hacia la indexación, primer paso del camino que se expondrá en la primera parte y que lleva a desarrollar funciones que culminan en un juego completo de herramientas de gestión de bases de datos virtuales.

 

                                                                                   _________

 

- Resuelve el problema de los ficheros de trabajo.

 

Los ficheros virtuales no son objetos reales, no precisan permisos ni generan bloqueos físicos, lo que se traduce en un tiempo de proceso muy inferior a su contrapartida en disco.

Asimismo, como en toda aplicación virtual, las mejoras en el equipamiento repercuten directamente en su rendimiento, cosa que puede no suceder en la misma medida en aplicaciones basadas en acceso a disco físico, cuyas mejoras en tiempo de respuesta suelen quedar muy por debajo de los avances en velocidad de acceso a la memoria volátil y de la propia cpu.

Su diseño se actualiza por simple edición y la disponibilidad de los cambios es inmediata, sin la necesidad de compilación, duplicación y permisos que pueden requerir los ficheros físicos.

Estas virtudes los hacen insustituibles como ficheros de trabajo para desarrollos de soporte de resultados intermedios, dotando al desarrollador de C (y por ende al de RPG) de una herramienta de serialización avanzada sin necesidad de acudir al uso de los contenedores de C++.

Su alternativa clásica virtual, el uso de series, corre siempre el riesgo del desbordamiento, carece de la versatilidad del acceso indexado e involucra en consecuencia un código que enseguida se llena de iteraciones auxiliares y se vuelve muy difícil de seguir.

 

                                                                                   _________

 

- Permite emular hojas de cálculo

 

Es habitual que los procedimientos nazcan desde hojas de cálculo propuestas por los usuarios. Es muy fácil diseñar estructuras bidimensionales y convertirlas en ficheros virtuales con los que implementar los algoritmos de proceso correspondientes a las hojas de cálculo origen.


                                                                                  
_________

 

- Permite simplificar procedimientos.

 

La verdad es que una vez que se dispone de ésta herramienta se vuelve imprescindible, porque simplifica el código al solventar implícitamente los problemas de ordenación permitiendo resolver no sólo los problemas originalmente planteados sino también sus ampliaciones de forma natural, simplemente añadiendo más campos o más vías de acceso o más ficheros virtuales, permitiendo llevar a la práctica la regla que afirma que cualquier desarrollo mejorará su mantenimiento
si se descarga la programación intercambiando código por diseño de estructuras.


                                                                                  
_________

 

- Centraliza las asignaciones de memoria

 

Al ser un producto diseñado para sustituir con ventaja a las series y a las estructuras seriadas dinámicas, sujetos usuales de las operaciones de asignación de memoria, deviene en una herramienta implícita de centralización de dichas asignaciones, minimizando los riesgos de utilización de memoria espúrea por asignación descentralizada espontánea y potencialmente descontrolada.

 

                                                                                   _________

 

- Permite compactar procedimientos

 

Al proporcionar la base para el desarrollo de herramientas de cálculo cerradas que no precisan de ficheros de trabajo físicamente observables.

 

                                                                                   _________

 

- Permite el paso ilimitado de parámetros entre procesos complejos

 

Como regla práctica, cuando los parámetros de paso entre procesos ya no pueden contarse con los dedos de una mano conviene sustituirlos por una estructura, y cuando en una estructura de parámetros aparecen grupos cíclicos conviene convertirla a un fichero virtual para permitir escalar el procedimiento de forma asequible.

Esta regla se observa en la propia evolución de las API’s de sistema, en donde la información de grupos cíclicos de parámetros se pasa como listas dinámicas de parámetros. Los ficheros virtuales hacen lo mismo pero con mayor versatilidad al disponer de mecanismos de acceso ordenado de fácil manejo, que ahorran las delicadas rutinas de apuntamiento e indirección que suele conllevar el manejo de las listas de parámetros inmersas en una estructura, sobre todo si son de doble entrada.

Adicionalmente, el paso de información utilizando ficheros virtuales no está constreñida a seguir el orden de la pila de llamadas, la información puede generarse en un procedimiento y utilizarla en otro del mismo trabajo sin necesidad de que ambos sean contiguos.

 

                                                                                   _________

 

 

- Su flexibilidad permite un uso avanzado que trasciende la simple emulación de bases de datos físicas.

 

En la sofisticada línea abierta en el punto anterior, los ficheros virtuales permiten resolver problemas de difícil tratamiento en los ficheros usuales, porque  además de datos o estructuras también podemos archivar punteros a estructuras o series, permitiendo abordar problemas del tipo que se presenta cuando a un conjunto de parámetros corresponde una serie de sucesos que debemos valorar según funciones complejas y plantearnos archivar entonces tanto la propia valoración de los eventos como todo el conjunto de los mismos, simplemente reservando su dirección en un fichero virtual. Así, cuando la misma solicitud se precise para otro cliente, se pueden recuperar valoraciones y eventos de forma instantánea.

El producto puede conjugarse también con funciones hash; entonces se puede resumir un fichero de entradas paramétricas en un resultado hash y emplearlo como clave de archivo en donde grabar valores a nivel de todo el conjunto asociado, que pueden recuperarse posteriormente de forma inmediata sin reprocesar todo el conjunto de entradas de parámetros junto con sus respuestas parciales.

Aunque este tipo de soluciones tiene una validez temporal circunscrita al ámbito de un trabajo, su alternativa en ficheros físicos es ineficiente al no tener sentido en ellos el manejo de direcciones o claves hash temporales y verse uno obligado a tener que grabar físicamente los subconjuntos de definición paramétrica y resultados parciales registro a registro.

 

 

                                                                                   _________

 

- Permite abordar el análisis post-mortem

 

Extendiendo las ideas anteriores, resulta que la capacidad de generar una base de datos virtual es una gran ventaja a la hora del análisis post-mortem, pues basta diseñar la adecuada estructura de datos que incluya los campos de trabajo que se estimen necesarios para poder elaborar informes post-proceso al nivel de detalle que se precise, simplemente grabando virtualmente la información de estado en el momento necesario y con la riqueza estructural que se desee sin interferir en el resto de la lógica de los procedimientos, dejando su explotación para el final del proceso de cálculo principal, acudiendo entonces a las bases de datos virtuales grabadas.

 

                                                                                   _________

 

 

- Hay ventajas adicionales cuando se trabaja en un iSeries (AS/400).

 

El nivel de persistencia puede graduarse de forma más fina utilizando programas de servicio, el equivalente de las DLL’s del PC, y desarrollar funciones estadísticas adicionales que incluyan el estampillado horario, la pila de programas, etc., al generar y usar los ficheros virtuales, abriendo la capacidad de desarrollar paneles de consulta y modificación dinámica de los ficheros virtuales.

También puede utilizarse para una implementación prototipo rápida que sea luego sustituida por una utilización parcial o total de ficheros físicos reales con facilidad.

Personalmente, la aplicación la utilizo principalmente desde ILE RPG, de hecho la primera versión de su núcleo estaba implementada en RPG, pero cuestiones de rendimiento y la utilidad de poder compatibilizar con desarrollos en PC me llevaron a su implementación en C ANSI, elegido porque aunque C++ dispone de iteradores con los que se pueden implementar ficheros virtuales de una forma más directa, puede no estar disponible en una instalación, mientras que el C ANSI es casi seguro que sí, pues es básico en desarrollos de sistema y comunicaciones.

 

                                                                                   _________

 

A nivel de PC, el desarrollo en programas de servicio C ANSI del iSeries se transcribe literalmente en DLL’s simplemente incluyendo los prototipos import/export; análogamente, un desarrollo en DLL de PC se convierte en programa de servicio iSeries fácilmente utilizando el lenguaje enlazador para indicar las funciones que se exportan.

 

Esta facilidad de utilización multiplataforma es una gran ventaja para el desarrollo y explotación de una utilidad de propósito general como la que se presenta, pues antes de aplicarla no ya en el  entorno de explotación sino incluso en el propio entorno de desarrollo de una instalación, puede haber sido probada en el PC, minimizando el riesgo de errores.

 

Además esta característica se transmite a los desarrollos que la utilizan y deviene crucial en el sentido de que abre una puerta al desarrollo de implementaciones experimentales y desarrollos prototipo de índole personal, normalmente transcripción directa de modelos de hoja de cálculo, que luego pueden transportarse con facilidad a una plataforma industrial, pero con el marchamo de la garantía de haber podido probar el funcionamiento de su núcleo algorítmico previamente en origen.

 

Pensando precisamente en su uso desde RPG, los interfaces resultantes son sencillos y nemotécnicos, fáciles de usar tanto desde C como desde RPG al utilizar vocablos como WRITE, READ, UPDATE, etc., que reflejan el uso concreto de la función que se utiliza y a los que ya se está acostumbrado a emplear al realizar las operaciones equivalentes sobre ficheros físicos.

 

                                                                                   _________

 

La presentación se realiza construyendo el producto desde las premisas teóricas que se aplican a sus capas más internas hasta la construcción de sus interfaces finales que dan lugar al edificio completo, versátil, productivo y dinámico que se presenta.

 

Por ello el libro se estructura en dos zonas, la primera ”De C ANSI a Visual C++”, distingue una primera parte que se centra en la construcción del producto terminando con la presentación de los servicios construidos en C ANSI, RPG y C++ clásicos y una segunda parte que se centra en ejemplos de aplicación desarrollados en Visual C++.

 

En la segunda zona “De C ANSI a la familia Visual NET”, también se distinguen dos partes:

En su primera parte se aborda una extensión COM para poder usar el producto en otros lenguajes de la familia Microsoft además del C, volviendo a presentar así ejemplos con interfaz final desarrollado en Visual Basic.

En su segunda parte se orienta a desarrollar un interfaz NET que permite usar el producto en esta plataforma sin necesidad del intermediario COM, volviendo a presentar de nuevo los ejemplos bajo esta perspectiva.

 

Por último, en los apéndices, se dedica un apartado a detallar algunas utilidades, particularmente el algoritmo Müller empleado en la resolución de funciones inversas utilizadas en los ejemplos, y a continuación se dedica el grueso de los mismos a los manuales comentados de usuario.

                                                                                   _________

 

Resumiendo, la aplicación de ficheros virtuales que se presenta resuelve varios problemas prácticos a la vez: el caché de resultados complejos, el uso de bases de datos virtuales de trabajo temporal, la persistencia de datos post-proceso, el rastreo estadístico y el desarrollo multiplataforma.

 

                                                                                   _________