SQLite

SQLite
Información sobre la plantilla
Sqlite370 banner.gif
Sistema de gestión de bases de de datos
CreadorD. Richard Hipp
Lanzamiento inicial29 de mayo, 2009
Última versión estable3.7.6.1 (14 de abril, 2011)
GéneroBiblioteca de C++
Sistemas Operativos compatiblesMultiplataforma
IdiomaInglés
LicenciaDominio Público
Sitio web
http://www.sqlite.org

SQLite es una biblioteca escrita en lenguaje C que implementa un sistema de gestión de bases de datos transaccionales SQL auto-contenido, sin servidor y sin configuración. El código de SQLite es de dominio público y libre para cualquier uso, ya sea comercial o privado. Actualmente es utilizado en gran cantidad de aplicaciones incluyendo algunas desarrolladas como proyectos de alto nivel.

Historia

Cuando D. Richard Hipp trabajaba desarrollando Software para la fuerza naval de los Estados Unidos, comenzó a desarrollar SQLite, según él por una necesidad personal para su uso personal. En Enero de 2000 D. Richard Hipp estaba trabajando con su 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ían tenido problemas para hacer una reconfiguración cuando el sistema se reiniciaba. Luego cambiaron a PostgreSQL, pero administrar la base de datos era un poco más complejo. Fue en ese momento cuando 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 comenzó a escribir las primeras versiones de lo que se conoce hoy como SQLite, con el pensamiento de que sería útil en algún problema similar. A diferencia de los sistemas de gestión de base de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas 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 sólo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de datos al principio de cada transacción.

En su versión 3, SQLite permite bases de datos de hasta 2 Terabytes de tamaño, y también permite la inclusión de campos tipo BLOB. El autor de SQLite ofrece formación, contratos de soporte técnico y características adicionales como compresión y cifrado.

Características

SQLite es un sistema completo de bases de datos que soporta múltiples tablas, índices, triggers y vistas. No necesita un proceso separado funcionando como servidor ya que lee y escribe directamente sobre archivos que se encuentran en el disco duro. El formato de la base de datos es multiplataforma e indistintamente se puede utilizar el mismo archivo en sistemas de 32 y 64 bits.

La base de datos se almacena en un único fichero a diferencia de otros DBMS que hacen uso de varios archivos. SQLite emplea registros de tamaño variable de forma tal que se utiliza el espacio en disco que es realmente necesario en cada momento.

El código fuente está pensado para que sea entendido y accesible por programadores promedio. Todas las funciones y estructuras están bien documentadas.

Existe un programa independiente de nombre sqlite que puede ser utilizado para consultar y gestionar los ficheros de base de datos SQLite. También sirve como ejemplo para la escritura de aplicaciones utilizando la biblioteca SQLite.

Implementación de SQL

La biblioteca implementa la mayor parte del estándar SQL-92, incluyendo transacciones de base de datos atómicas, consistencia de base de datos, aislamiento, y durabilidad (ACID), triggers y la mayor parte de las consultas complejas.

Características omitidas de SQL

  • Restricciones FOREIGN KEY,
  • Soporte completo para triggers (disparadores)
  • Soporte completo para ALTER TABLE, solamente implementa las instrucciones RENAME TABLE y ADD COLUMN.
  • RIGHT y FULL OUTER JOIN, sólo está implementada la instrucción LEFT OUTER JOIN.
  • Escribir en VIEWs, ya que las vistas en SQLite son de sólo lectura.
  • GRANT y REVOKE, pues no tienen sentido en un sistema de bases de datos embebido.

Tipos de datos

SQLite usa un sistema de tipos inusual. En lugar de asignar un tipo a una columna como en la mayor parte de los sistemas de bases de datos SQL, los tipos se asignan a los valores individuales.

Cada uno de los datos almacenados en una base de datos SQLite implemtenta alguno de los siguientes tipos:

  • NULL, un valor nulo.
  • INTEGER, un entero con signo que se almacena en 1, 2, 3, 4, 5, 6 o 8 bytes de acuerdo a la magnitud del valor.
  • REAL, un número de coma flotante (real), almacenado en 8 bytes.
  • TEXT, una cadena de texto almacenada con las codificaciones UTF-8, UTF-16BE o UTF-16-LE.
  • BLOB, datos en formato binario, se almacenan exactamente como se introdujeron.

Autoincremento

Una duda tradicional es el modo de implementar el autoincremento, principalmente para las llaves primarias. La forma más sencilla es declarar el tipo de dato como INTEGER PRIMARY KEY.

Concurrencia

Varios procesos o hilos pueden acceder a la misma base de datos sin problemas. Varios accesos de lectura pueden ser servidos en paralelo. Un acceso de escritura sólo puede ser servido si no se está sirviendo ningún otro acceso concurrentemente.

Ventajas

  • 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: 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: implementa un gran subconjunto de la ANSI – 92 SQL estándar, incluyendo sub-consultas, generación de usuarios, vistas y triggers.
  • Interfaces: cuenta con diferentes interfaces del API, las cuales permiten trabajar con C++, PHP, Perl, Python, Ruby, Tcl, Groovy, Qt ofrece el plugin qsqlite, 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.

Usos aconsejados de SQLite

  • Formato de archivo de aplicaciones.
  • Aplicaciones desktop.
  • Bases de datos para dispositivos.
  • Bases de datos de sitios web de pequeño y mediano tamaño.
  • Enseñanza.

Usos no aconsejados de SQLite

  • Aplicaciones Cliente-servidor.
  • Sitios web con gran cantidad de transacciones.
  • Bases de datos muy grandes (SQLite soporta hasta 2 terabytes).
  • Alta concurrencia.

Aplicaciones que utilizan SQLite

Ejemplos de uso de SQLite

TCL

#!/usr/bin/tclsh
if {$argc!=2} {
    puts stderr "Usage: %s DATABASE SQL-STATEMENT"
    exit 1
}
load /usr/lib/tclsqlite3.so Sqlite3
sqlite3 db [lindex $argv 0]
db eval [lindex $argv 1] x {
    foreach v $x(*) {
        puts "$v = $x($v)"
    }
    puts ""
}
db close

C

#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
	int i;
	for(i=0; i<argc; i++){
		printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
	}
	printf("\n");
	return 0;
}

int main(int argc, char **argv){
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;

	if( argc!=3 ){
		fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
		exit(1);
	}
	rc = sqlite3_open(argv[1], &db);
	if( rc ){
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		exit(1);
	}
	rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
	if( rc!=SQLITE_OK ){
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	sqlite3_close(db);
	return 0;
}

Aplicaciones para el trabajo con bases de datos SQLite

Enlaces externos

Fuente