Estrategias para la utilización de bases de datos SQL

Adobe AIR 1.0 y posterior

Hay diferentes maneras en que una aplicación puede acceder y utilizar una base de datos SQL local. El diseño de la aplicación puede variar en cuanto a la organización del código de la aplicación, la secuencia y la sincronización de cómo se llevan a cabo las operaciones etc. Las técnicas que elije pueden tener un impacto en la facilidad para desarrollar la aplicación. Pueden afectar la facilidad de modificar la aplicación en futuras actualizaciones. Asimismo pueden afectar el rendimiento de la aplicación desde el punto de vista del usuario.

Distribución de una base de datos llenada previamente

Cuando utiliza una base de datos SQL local de AIR en la aplicación, la aplicación espera una base de datos con cierta estructura de tablas, columnas etc. Asimismo, algunas aplicaciones esperan que ciertos datos se introduzcan con anterioridad en el archivo de la base de datos. Una manera de asegurarse que la base de datos cuenta con la correcta estructura es crear la base de datos dentro del código de aplicación. Cuando se carga la aplicación, la misma verifica la existencia del archivo de base de datos en una determinada ubicación. Si el archivo no existe, la aplicación ejecuta un conjunto de comandos para crear el archivo de base de datos, crear la estructura de la base de datos y llenar las tablas con los datos iniciales.

El código que crea la base de datos y las respectivas tablas generalmente es complejo. Con frecuencia, solo se utiliza una vez en la instalación de la aplicación, pero no obstante contribuye al tamaño y a la complejidad de la aplicación. Como alternativa a crear la base de datos, la estructura y los datos mediante programación, se puede distribuir con la aplicación una base de datos previamente llenada. Para distribuir una base de datos predefinida, incluya el archivo de la base de datos en el paquete de AIR de la aplicación.

Como todos los archivos que se incluyen en un paquete de AIR, se instala un archivo de base de datos empaquetado en el directorio de la aplicación (el directorio representado por la propiedad File.applicationDirectory ). Sin embargo, los archivos en ese directorio son de solo lectura. Use el archivo empaquetado como una base de datos de “plantilla”. La primera vez que el usuario ejecuta la aplicación, copie el archivo de la base de datos original en el Apuntar al directorio de almacenamiento de la aplicación (u otra ubicación) y use esa base de datos dentro de la aplicación.

Prácticas recomendadas para utilizar bases de datos SQL locales

En la siguiente lista se muestra un conjunto de técnicas recomendadas que se pueden utilizar para mejorar el rendimiento, la seguridad y la facilidad de mantener las aplicaciones cuando utiliza bases de datos SQL locales.

Crear previamente conexiones a la base de datos

Aun si la aplicación no ejecuta declaraciones cuando se carga, cree una instancia al objeto SQLConnection y llame al método open() o openAsync() con antelación (como por ejemplo después del inicio de la aplicación) para evitar demoras cuando se ejecutan las declaraciones. Consulte Conexión a una base de datos

Volver a utilizar las conexiones a la base de datos

Si accede a una determinada base de datos durante el tiempo de ejecución de la aplicación, mantenga una referencia a la instancia SQLConnection y vuelva a utilizarla en la aplicación, en lugar de cerrar y volver a abrir la conexión. Consulte Conexión a una base de datos

Utilizar el modo de ejecución asíncrono

Cuando se escribe código de acceso a datos, puede ser tentador ejecutar las operaciones sincrónicamente en vez de forma asíncrona, ya que el uso de operaciones sincrónicas con frecuencia requieren un código más breve y menos complejo. Sin embargo, como se describe en Uso de operaciones sincrónicas y asíncronas de base de datos , las operaciones sincrónicas pueden impactar en el rendimiento que es obvio para los usuarios y perjudicial en el uso de la aplicación. La cantidad de tiempo que tarda una sola operación varía según la operación y en particular la cantidad de datos que involucra. Por ejemplo, una declaración SQL INSERT que solo añade una fila a la base de datos tarda menos que una declaración SELECT que recupera miles de filas de datos. Sin embargo, cuando utiliza una ejecución sincrónica para realizar varias operaciones, en general las operaciones de agrupan. Si bien el tiempo que demora cada operación individual es muy corto, la aplicación se bloquea hasta que terminen todas las operaciones sincrónicas. Como resultado, el tiempo acumulado de varias operaciones agrupadas puede ser suficiente para bloquear la aplicación.

Utilice operaciones asíncronas como un método estándar, especialmente con operaciones que involucran grandes cantidades de filas. Existe una técnica para dividir el procesamientos de grandes conjuntos de resultados de la declaración SELECT que se describe en Recuperación de resultados SELECT en partes . Sin embargo, esta técnica solo se puede utilizar en el modo de ejecución asíncrono. Solo utilice operaciones sincrónicas cuando no puede lograr cierta funcionalidad usando la programación asíncrona, cuando haya considerado las desventajas en el rendimiento que afrontarán los usuarios de la aplicación y cuando haya probado la aplicación para que sepa como se ve afectado el rendimiento de la aplicación. El uso de la ejecución asíncrona puede implicar una codificación más compleja. Sin embargo, recuerde que solo tiene que escribir el código una sola vez pero los usuarios de la aplicación tienen que utilizarlo repetidas veces, de forma veloz o lenta.

En muchos casos, al utilizar una instancia SQLStatement por separado para que cada declaración SQL se ejecute, se pueden poner en cola varias operaciones SQL a la vez, que hace que el código asíncrono sea como el código sincrónico en cuanto a cómo está escrito el código. Para más información, consulte Aspectos básicos del modelo de ejecución asíncrono .

Utilizar declaraciones SQL por separado y no cambiar la propiedad text de la declaración SQLStatement

Para cualquier declaración SQL que se ejecuta más de una vez en una aplicación, cree una instancia SQLStatement por separado para cada declaración SQL. Use esa instancia SQLStatement cada vez que se ejecuta el comando SQL. Por ejemplo, supongamos que está creando una aplicación que incluye cuatro operaciones SQL diferentes que se llevan a cabo múltiples veces. En ese caso, cree cuatro instancias SQLStatement por separado y llame al método execute() de cada instancia para ejecutarla. Evite la alternativa de utilizar una sola instancia SQLStatement para todas las declaraciones SQL, redefiniendo la propiedad text cada vez antes de ejecutar la declaración.

Utilizar parámetros de declaración

Utilice parámetros SQLStatement, nunca concatene las entradas del usuario en un texto de declaración. La utilización de parámetros hace que la aplicación sea más segura ya que evita la posibilidad de ataques de inyección SQL. Hace posible usar objetos en consultas (en lugar de solo valores literales SQL). Asimismo hace que las declaraciones se ejecuten más eficientemente ya que se pueden volver a utilizar sin la necesidad de recompilar cada vez que se ejecutan. Consulte Uso de parámetros en sentencias para más información.