AD (728x60)

lunes, 8 de septiembre de 2014

SQLite para aplicaciones de escritorio

Share & Comment

CONTENIDO

Introducción

Recientemente se me ha pedido hacer reingeniería a una aplicación la cual maneja información que en su mayoría no cambiará, pero que la cantidad de datos y procesamiento de la misma es bastante considerable.
No se cuenta con código fuente y a decir verdad hasta desconozco que mecanismo de persistencia utiliza, yo lo haría con un SMBD (Sistema Manejador de Base de Datos) como lo es MySQL, PostgreSQL, Firebird.... aunque no es la mejor opción (o al menos en este contexto) ya que para esto necesito al lanzar la aplicación y aunada a esto el servicio del SMBD, además estos manejadores trabajan bajo el esquema de servidor y muchos clientes que se conectan, para este caso se necesita una base de datos local y un sólo usuario (la aplicación), otra solución es el manejo de archivos (XML,TXT o con un formato personal) pero para grandes volúmenes y proceso de la información, se requiere de una mejor solución, pensando en esto recordé algún intento de trabajar con QT (C++) y SQLite, con lo que surgen algunas preguntas ¿Qué es SQLite?  ¿Qué me permite hacer? ¿Qué diferencia hay entre SQLite y los demás SMBD? y la mejor pregunta ¿Cómo SQLite ayudará a resolver mi problema de una manera adecuada?
Conozcamos este SMBD y después identifiquemos sus bondades con respecto al contexto.

¿Qué es SQLite? 

SQLite es una librería de dominio publico que implementa un motor de base de datos SQL, autónomo, sin servidor, sin configuración y transaccional cumpliendo las propiedades de ACID.

SQLite es un proyecto relativamente pequeño creado por D. Richard Hipp desarrollado en C. El lema en su sitio oficial revela de manera general sus características:
Pequeño. Rápido. Fiable. 
Elija cualquier tres

Características

La mayoría de las propiedades de  SQLite son inusuales y lo hacen distinto de los otros motores de bases de datos.

1. Cero configuración
No necesita ser instalado, no necesita un administrador para crear una nueva instancia de base de datos o asignar permisos a usuarios. No se utilizan archivos de configuración.
2. Sin servidor
A diferencia de los otros SMBD,los programas que quieran acceder no se necesita un servidor que los comunique para enviar solicitudes y recibir datos. Con SQLite el proceso que quiere acceder a la base de datos lee y escribe directamente de los archivos de base de datos.
3. Un sólo archivo para base de datos
Una base de datos sólo ocupa un archivo en cualquier lugar de la jerarquía de directorios.  La desventaja es que los archivos se pueden extraer fácilmente en USB, por correo o por diversos medios, la ventaja es que al evitar procesar los datos -como lo hacen la mayoría de los SMBD- al poder abrirlos con el mismo motor aumenta considerablemente el rendimiento.
4. Estable entre archivos de bases de datos multiplataforma
El formato de archivo de SQLite es multiplataforma. Un archivo de base de datos escrito en una máquina puede ser copiado y utilizado en una máquina diferente, con una arquitectura diferente. Otros gestores necesitan un volcado y restauración de la base de datos al pasar a otra plataforma.
La desventaja es que cualquiera que tome la base de datos la puede instalar fácilmente en su plataforma, para este problema de seguridad y si es requerimiento se debe buscar alternativas para cifrar el contenido, aunque repercuta en el rendimiento, como en todo hay que sacrificar una cosa por otra.
5. Compacto
SQLite con todo lo permitido pesa menos de 500KiB. Si se deshabilitan funciones innecesarias llega a pesar hasta 300KiB.
6. Manifiesto de tipificado
Con esta característica se hace referencia a los tipos de datos definidos dentro de una base de datos, que en este caso, los tipos de datos no son definidos por columnas como en la mayoría de los SMBD, sino que es una propiedad del propio valor, esto gracias la manifiesto de tipificado, de manera que en una misma fila puedes guardar un entero o un string sin que la columna se vea limitada a guardar sólo un tipo de datos.
Se pensaría que el manifiesto de tipificado es un error, en realidad es intencional para brindar ciertas características que los otros motores no brindan.
7. Registros de longitud variable
En SQLite se asigna dinámicamente el espacio necesario para cada fila, por ejemplo:
Si se almacena un carácter en un varchar (100) sólo se ocuparía un byte de espacio en disco. El resultado de esta propiedad hace archivos pequeños, el funcionamiento de la base de datos es más 
rápido, esto también hace posible el manifiesto de tipos de dato en lugar de tipos estáticos.
8. Código fuente legible
El código fuente para SQLite está diseñado para ser legible y accesible para el programador promedio. Esto es realmente importante para aquellos masters que desean crear su propia versión del manejador de datos para adaptarlo a sus necesidades.
9. Sentencias SQL compiladas en código maquina virtual
Esta característica hace referencia al mecanismo por medio del cual se interpretan las sentencias SQL, en la mayoría de los motores de almacenamiento se compila la sentencia SQL a complejas estructuras y objetos relacionados entre sí, en SQLite la forma compilada se reduce a un pequeño programa representado por código máquina.
10. Dominio público
El código fuente de SQLite es de dominio público. Esto significa que podemos modificar o utilizar el motor como mejor nos convenga sin tener problemas de copyright. 
11. Extensiones del lenguaje SQL
SQLite ofrece una serie de mejoras al lenguaje SQL que no se encuentra normalmente en otros motores de bases de datos.  

¿En qué casos usar SQLite?

Regularmente para decidir entre diversas soluciones se hace una comparación entre las tecnologías disponibles, dicho esto es necesario entender que SQLite no se puede comparar con motores de bases de datos como Oracle, PostgreSQL, MySQL o SQL Server ya que tratan de resolver un problema diferente.
SQLite está pensado para resolver el problema de bases de datos locales y dispositivos individuales, enfatizando la economía, eficiencia, fiabilidad, independencia, y simplicidad, mientras que los otros motores crean un repositorio compartido de datos empresariales, centrando su atención en la escalabilidad, la simultaneidad, la centralización y el control.
A grandes rasgos podemos identificar en qué contexto se puede utilizar este manejador de base de datos, si no te queda claro a continuación se enlistan algunos casos adecuados para su uso.

1. Dispositivos y aplicaciones embebidas.
Debido a que se requiere poca o casi nula administración es una buena opción para los dispositivos o servicios que deben trabajar sin supervisión y sin apoyo humano.

2.Sitios web
Es apropiado para páginas web de tráfico medio (que son una gran mayoría) ya que se hace un excelente uso de los recursos.

3.Bases de datos internas o temporales
Para los programas que necesitan tratar una gran cantidad de datos internos y/o temporales.

¿En qué casos no usar SQLite?

En algunas situaciones no es recomendable usar este SMDB, no por ser malo simplemente no es el problema que intenta resolver (otro contexto).

  • Sitios Web de alta demanda
  • Bases de datos grandes
  • Entornos de alta concurrencia
  • Aplicaciones cliente-servidor

Conclusiones

SQLite proporciona un entorno para implementar persistencia de datos, en entornos donde el tamaño, la velocidad y versatilidad son importantes, principalmente en aplicaciones con bases de datos locales y dispositivos individuales, con poca configuración pero herramientas suficientes para un buen procesamiento datos.

Referencias

  • Sitio oficial de SQLite: http://www.sqlite.org/
  • The Definitive Guide to SQLite, Mike Owens
  • Using SQLite, Jay A. Kreibich








Tags: , , , ,

Written by

Información sobre tecnología: -Programación multiplataforma(aplicaciones de escritorio, web y móviles) -Ingeniería de software -Redes -Telemática

2 comentarios:

  1. enhorabuena! muy buen artículo. Estoy desarrollando un proyecto para una aplicación de escritorio y buscaba un sgbd pequeño y sin el problema de la configuración e instalación. Ahora estoy con la duda si con javafx y sqlite podré utilizar jpa. Buen aporte. Saludos.

    ResponderEliminar
  2. Éxito mi hermano, que todo salga bien que bueno que te haya servido saludos

    ResponderEliminar

 
Copyright © Geek Star Blue | Designed by Templateism.com