SQLite

¿Qué es SQLite?

 

SQLite es un proyecto de dominio público creado por D. Richard Hipp que implementa una pequeña librería de aproximadamente 500Kb programada en lenguaje C, que funciona como un sistema de gestión de base de datos relacionales. A diferencia de los motores de base de datos convencionales con la arquitectura cliente-servidor, SQLite es independiente, ya que no se comunica con un motor de base de datos, sino que las librerías de SQLite pasan a integrar la aplicación. La misma utiliza las funcionalidades de SQLite a través de llamadas simples a sub rutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un solo fichero estándar, en la máquina local.

En su versión 3, SQLite permite base de datos de hasta 2terabytes de tamaño y la inclusión de campos tipo blob.

 

 

Breve Historia de SQLite

 

Cuando D. Richard Hipp trabajaba desarrollando software para la fuerza naval de los Estados Unidos, comenzó a desarrollar SQLite, según él cuenta con sus propias palabras: “SQLite surgió de una necesidad personal, para mi propio uso. En enero de 2000 yo estaba trabajando con un equipo de la General Dynamics en la Fuerza naval de los Estados Unidos, en un proyecto de software, el cual se conectaba a una base de datos Informix, el motor funcionaba muy bien, pero habíamos tenido problemas para hacer una reconfiguración cuando el sistema se reiniciaba. Luego cambiamos a PostgreSQL, pero administrar la base de datos era un problema. Si bien aún estaba luchando para hacer frente a estas cuestiones, surgió la idea de escribir un simple motor de base de datos SQL que permitiera leer los archivos del disco duro, y luego ser llamados en diferentes solicitudes. Cinco meses más tarde, yo estaba sin un contrato por algunos unos meses y por lo que comencé a escribir SQLite, con el pensamiento de que sería útil en algún problema similar, más adelante”.

 

Razones para elegir SQLite

 

Abajo están presentadas varias ventajas de SQLite que pueden ser de ayuda:

• Tamaño: SQLite  tiene  una  pequeña  memoria y una única biblioteca es necesaria para acceder a bases de datos, lo que lo hace ideal para aplicaciones de bases de datos incorporadas.

• Rendimiento de base de datos: SQLite realiza operaciones de manera eficiente y es más rápido que MySQL y PostgreSQL.

• Portabilidad: SQLite se ejecuta en muchas plataformas y sus bases de datos pueden ser fácilmente portadas sin ninguna configuración o administración.

• Estabilidad: SQLite es compatible con ACID, reunión de los cuatro criterios de Atomicidad, Consistencia, Aislamiento y Durabilidad.

• SQL: SQLite implementa un gran subconjunto de la ANSI – 92 SQL estándar, incluyendo sub consultas, generación de usuarios, vistas y triggers.

• Interfaces: SQLite cuenta con diferentes interfaces del API, las cuales permiten trabajar con C++, PHP, Perl, Python, Tcl, groovy, etc.

• Costo: SQLite es de dominio público, y por tanto, es libre de utilizar para cualquier  propósito sin costo y se puede redistribuir libremente.

 

Características de SQLite

SQLite goza de un par de características que lo hacen único, alguna de ellas se detallan a continuación.

 

Cero Configuración

De la forma en que fue concebido y diseñado SQLite, NO necesita ser

Instalado. No prender, reiniciar o apagar un servidor, e incluso configurarlo. Esta cualidad permite que no haya un administrador de base de datos para crear las tablas, vistas, asignar permisos. O bien la adopción de medidas de recuperación de servidor  por cada caída del sistema.

 

Portabilidad

SQLite puede ser ejecutado en diferentes sistemas operativos, como ser Windows, Linux, BSD, Mac OS X, Solaris, HPUX,AIX o estar embebido en muchos otros como QNX, VxWorks, Symbian, Palm OS, Windows CE. Se pude notar que muchos de ellos trabajan a16, 32 y 64 Bits. La portabilidad no está dada en sí por el software, sino por la base de datos condensada en un solo archivo, que puede estar situado en cualquier directorio, trayendo como ventaja que la base de datos puede ser fácilmente copiada a algún dispositivo USB o ser enviada vía correo electrónico. En cambio, los motores de base de datos tienden por lo general a almacenar la colección de archivos, al que sólo el motor de la base de datos puede llegar a tener acceso. Esto hace que los datos sean más seguros y más difíciles de acceder. Algunos proporcionan la opción de escribir directamente en el disco y pasar por el sistema de ficheros todos juntos. Esto aporta un mayor rendimiento, pero a costa de una considerable complejidad de instalación y mantenimiento.

Registros de longitud variable

Generalmente los motores asignan una cantidad fija de espacio en disco para cada fila en la mayoría de los campos de una determinada tabla. Por ejemplo, tomemos un campo de tipo VARCHAR (100), esto significa que el motor le asignará 100 bytes de espacio fijo en disco, independientemente de la cantidad de información que se almacene en ese campo. En cambio, SQLite realizará todo lo contrario, utilizando para ello la cantidad de espacio en disco necesario para almacenar la información real del campo. Tomando el ejemplo anterior, si quisiera almacenar un solo carácter en un campo definido como VARCHAR (100), entonces un único byte de espacio de disco se consume. Realmente una característica especial para ahorrar espacio en memoria. El uso de registros de longitud variable por SQLite, tiene una serie de ventajas, entre ellas el resultado de un pequeño archivo de base de datos y optimización de la velocidad de la misma, puesto que hay menos información desperdiciada que leer y recorrer.

 

Pedagógico

Algunas veces cuando se está en un ámbito educativo, se  tiende  a  enseñar  SQL para administrar  las bases de datos. Muchas veces transportar una base a casa no es tarea fácil, por eso SQLite está siendo adoptado de una forma pedagógica. Por ejemplo, los estudiantes pueden enviar vía email las bases de datos a los docentes para su presentación y los docentes realizarán las observaciones necesarias. Para los estudiantes más avanzados que están interesados en el estudio de cómo trabaja un RDBMS, el código SQLite puede servir como una buena base. Esto no quiere decir que es un modelo exacto de la forma en que los motores de bases de datos se apliquen, sino una forma en la que un estudiante que entiende cómo funciona SQLite puede comprender los principios operativos de otros sistemas.

 

La arquitectura SQLite

Cada motor de base de datos compila cada sentencia SQL en algún tipo de estructura de datos interna que luego se utilizará para llevar a cabo la labor de la declaración. En SQLite, compilar la forma de las declaraciones es un breve programa en un lenguaje de máquina como representación. Los usuarios podemos ver la máquina virtual antes poniendo EXPLAIN como palabra clave para una consulta. El uso de la VM dentro de SQLite ha sido un gran beneficio para el desarrollo de la biblioteca, ya que proporciona un cruce entre la interfaz de usuario que analiza las sentencias SQL y la parte en la cual la máquina virtual ejecuta el código para calcular el resultado, así también utilizar la capacidad de rastreo de la ejecución de la VMen cada sentencia e imprimir las mismas.

 

Licencia de Dominio Público

SQLite se encuentra bajo esta licencia, por ende ninguna reivindicación se hace de los derechos de autor en cualquier parte del núcleo del código fuente. Existen otros motores de bases de  datos basados en SQL liberados de licencias que permiten al código ser amplia y libremente utilizados. Pero estos motores se siguen rigiendo por la ley de derechos de autor. SQLite es diferente ya que en el derecho de autor la ley simplemente no se aplica, todos pueden contribuir, modificar, estudiar y compartir libremente SQLite.

 

Limitaciones

Una vez escuché decir que no existía un software al cual no se le encontraran limitaciones. SQLite no está exento de esto, algunas de las limitaciones son las siguientes:

• Limitaciones en Where: esta limitación está dada por el soporte para clausuras anidadas.

• Falta de Clave Foránea: se hace caso omiso de las claves foráneas; esto quiere decir, cuando se realice la creación de la tabla desde el modo consola, está permitiendo el uso de la clausura, aunque no realizara el chequeo de la misma.

• Falta de documentación en español: al momento de escribir este artículo es muy escasa la documentación disponible en español sobre SQLite.

 

 

Introducción al uso de SQLite

SQLite, al igual que muchos de los motores de bases de datos, posee su administración predefinida a través del uso de la consola o terminal, aquellas personas que pudieron administrar antes otros motores como por ejemplo es el caso de MySQL, sabrán que no es el único administrador que se conoce sino más bien existen una amplia gama para la elección, por ejemplo php MyAdmin. Con SQLite sucede lo mismo: es posible administrarlo desde varios sistemas,como es el caso de php SQLite Admin, Visual SQLite, real Sqlserver.

 

 

SQLite y los lenguajes de programación

En los siguientes párrafos mostraremos a través de algunos ejemplos cómo implementar SQLite para algunos de los lenguajes existentes y algunas cualidades de los mismos.

Sqlite y Java

Java implementa la conexión a la fuente de datos a través de las librerías JDBC. Desde hace algún tiempo se encuentran disponibles las SQLite JDBC, en Zentus (http://www.zentus.com/  sqlitejdbc/). De allí podremos descargar los JDBC de SQLite para plataformas Linux, Mac OS, y Windows. Para poder trabajar con SQLite y Java debemos realizar una simple conexión. La realizaremos por medio de una clase la cual llamaremos coneccion.

 

El nombre de conector que se utilizará nos indica Class.forName(“org.sqlite.JDBC”);, en nuestro caso:

org.sqlite.jdbc. Aquí se indica el driver con que trabajaremos

jdbc:sqlite y el nombre de la base de datos.

 

base.sql:varConeccion = DriverManager.getConnection(“jdbc:sqlite:” +nombreDB);

 

El flujo para realizar las sentencias abre el siguiente comando:

varSentencia = this.varConeccion.createStatement();

Hasta este punto sólo hemos realizado la conexión de la base de datos a través de la clase coneccion. A continuación conoceremos el método más importante de la clase

Statement  que es executeUpDate el cual permite enviar las consultas al motor. Su estructura es la siguiente:

 

sentancia.executeUpdate(Sentencia SQL)

 

Si se desea crear una tabla se debería de llamar a ese método con la consulta de la siguiente manera:

 

sentancia.executeUpdate(“CREATETABLE personal (id smallintprimary key, nombrevarchar(25))”);

 

Ahora si se quiere recuperar datos de la tabla recién creada es necesario escribir un método que recupere objetos y objetos de la clase personal.

 

SQLite y PHP

 

En  la  versión  4 de  PHP,  SQLite  se  podía  utilizar  como base de datos instalando un módulo PE-CL. A partir  de  la  versión  5 de  PHP,  SQLite  está incluido en  PHP, por  lo  que  está  disponible sin necesidad de realizar ninguna instalación adicional, realmente una ventaja a la hora de programar y se puede observar la gran aceptación de este pseudo motor. Los nombres de las funciones de  PHP que permiten utilizar y manipular  SQLite  en PHP empiezan por  “sqlite_” y son similares a los que permiten acceder a otras bases de datos utilizables desde PHP (MySQL,  Postgre SQL, etc). El manual de PHP incluye un capítulo dedicado a SQLite, es por ello que nos va a permitir  programar más rápidamente y acostumbrarnos a la sintaxis de una forma casi inmediata.

 

Creación/Acceso a la base de datos

En SQLite, una base de datos es normalmente un fichero, aunque también pueden abrirse bases de datos en memoria. Este concepto ya lo vimos al principio. Por esta razón necesitamos un mecanismo para poder abrir la base de datos, la función es

sqlite_open(). El argumento de sqlite_open()es la ruta del archivo en el servidor (o:memory:en el caso de crear la base de datos en memoria). En caso de que la base de datos no exista, la función se encarga de crear una base de datos nueva. La función de vuelve un manejador (handle), que se utiliza en el resto de funciones que acceden a la base de datos. En el siguiente ejemplo, la variable $rutadb almacena la ruta o path de donde se encuentra la base de datos y la variable $db el manejador de la base de datos:

 

<?php$rutadb = “prueba.db”;$db = sqlite_open($rutadb) ordie(“No es posible abir labase de datos “);?>

 

Consultas a la base de datos

Una vez abierta la base de datos, se pueden realizar consultas del lenguaje SQL utilizando varias funciones. Cada función devuelve el resultado de la consulta de forma distinta:

•sqlite_array_query

(handle, consulta, tipo): devuelve la consulta en forma de matriz.

•sqlite_exec

(consulta): devuelve simplemente verdadero o falso, pero no los datos.

•sqlite_query

(handle, consulta): devuelve un manejador del resultado.

•sqlite_single_query

(handle, consulta, primera_línea): devuelve únicamente una columna o la primera fila del resultado.

•sqlite_unbuffered_query

(handle, consulta): devuelve la consulta sin prefecht.

La función sqlite_array_query()devuelve la respuesta de la consulta en forma de matriz. No es conveniente utilizar esta función si el resultado de la consulta contiene muchos registros, ya que puede ocupar mucha memoria en el servidor.

 

Conclusión

Día a día se avanza a pasos agigantados en el desarrollo, pero siempre existe ese desafío que hace al desarrollador definir la herramienta que ha de utilizar para realizar el manejo de los datos dentro de su implementación. En este artículo hemos visto unas opciones de SQLite que tiene la potencia de un motor, condensado en una librería o Pseudo Motor. Se pueden observar algunas claras ventajas, como lo es la presencia de las extensiones, para casi todos los lenguajes que existen. En base a lo investigado, la mayoría de las experiencias dicen que SQLite frente a los colosos del software libre MySQL y PostgreS-QL, se ha notado que SQLite es muy rápido en respuesta cuando se realizan las consultas y el manejo de los datos. Esto se debe a que no existe un proceso intermedio para la comunicación con el motor. Cosa que sí realizan los ya mencionados motores. Algunos puntos fuertes fueron la carencia de configuraciones y el tener una base de datos en un solo archivo. No obstante, hay que aclarar que SQLite tiene algunos puntos flacos como ser que no es apropiado para realizar aplicaciones cliente/servidor o para implementaciones de gran escala, como puede ser un padrón electoral. Puesto que SQLite se saturaría con las peticiones de los usuarios. Por tal motivo se recomienda el uso para aplicaciones de mediana complejidad. Otro punto a favor que está teniendo, y por ello muchos han optado por migrar a SQLite, está dado en que empresas como Google, han anunciado públicamente la utilización de SQLite en su producto AdSense. Otros claros ejemplos son Philips que utiliza SQLite en el software de alguno sus electrodomésticos y la empresa Symbian que lo ha definido como estándar de base de datos para su sistema operativo.

 

Fuentes:

http://www.sqlite.org/

http://es.wikipedia.org/wiki/SQLite

http://php.net/manual/es/book.sqlite.php

http://es.scribd.com/doc/52882068/SQLite

 

SQLite3 Management Studio

https://mega.co.nz/#!Nxh1EZaB!cHNcyGo0_UwjKqFw-ILqSS38-6d_kTzpC67K35zpyRw

Acerca de

Hola, vengo a flotar

Publicado en Tutoriales Avanzados BD
One comment on “SQLite
  1. Echa un vistazo a una herramienta gratuita – Valentina Studio. Producto asombroso! OMI es el mejor gestor de SQLite para todas las plataformas. http://www.valentina-db.com/en/valentina-studio-overview

Deja un comentario... o reprobas!

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: