Etiqueta

14 julio 2014

SQL en modo multitarea y multi-hilo (Parte 1 de 8)

Omnis Studio 6 permite el lanzamiento de sentencias SELECT como subprocesos independientes y desligados del hilo principal, hasta que el servidor ha procesado los resultados. Para habilitar esta funcionalidad, los DAM’s posibilitan ahora la creación de “SQL Workers”, denominación otorgada a las instancias creadas con éste propósito mediante el uso de variables objeto (SQL) y disponibles con los nuevos DAM’s para Oracle, ODBC, JDBC, MySQL, PostgreSQL, DB2, Sybase, y SQLite.

Los objetos “SQL Worker” pueden ser (por ejemplo) asignados a los diferentes campos de tipo lista usados en un formulario y que (nótese) serán cargados en modo asíncrono, lo que podría ser usado para conseguir acelerar en gran manera la carga de datos en un formulario, ya que además se hace uso de la característica añadida del multi-hilo (procesamiento en paralelo de sentencia SQL) junto con la capacidad multitarea aportada por los “SQL Workers”.

¿Cómo funciona?

Los objetos “SQL Worker” contienen los siguientes métodos principales:
  • $init()
  • Inicia o restablece un objeto “worker” dejándolo listo para realizar su tarea

  • $start()
  • Ejecuta una tarea o “worker” como un subproceso (ejecución en segundo plano, tenga en cuenta que el programa continuará su ejecución no se producirá ningún tipo de bloqueo o detención)

  • $cancel()
  • Cancela una tarea o “worker”, que está siendo ejecutada como subproceso (en segundo plano)

Esto es sólo una descripción general, por supuesto contamos con una serie de propiedades que nos permiten (por ejemplo) descartar una tarea en ejecución para hacer uso de otra en su lugar, cancelar tareas que se hayan podido convertir en “huérfanas” o simplemente informaros del estado en que se encuentre una determinada tarea o “worker”.

Los objetos “worker” son creados como sub-clases (tipo “SQL Worker”) de una clase objeto Omnis. Después deberemos iniciar el objeto con una sentencia SQL y sus variables vinculadas (bind) que precise. Los datos necesarios para el inicio de una sesión con la base de datos o el nombre del grupo de sesiones (si estamos usando una pila de sesiones) también podrán ser suministrados durante el proceso de iniciación.

Para la instanciación de un subproceso “SQL Worker” se usa el método $start(). Al concluirse su ejecución, se invocará automáticamente al método $completed() o al $cancelled(), al que se pasará el conjunto de resultados o bien la información del error producido.

No hay comentarios: