SQLite – SpatiaLite: el porqué del cómo…

Con la llegada de SpatiaLite (http://www.gaia-gis.it/gaia-sins/) basado en SQLite, muchos “Sigistas” empezaron a interesarse en SQLite, pero en la práctica, pocos de ellos conocen realmente esta base de datos y sus múltiples usos.

Sin embargo, todo el mundo la usa, tal vez sin darse cuenta, ya que SQLite se ha convertido en el motor de base de datos relacionales mas distribuido en el mundo, gracias a su utilización en una gran cantidad de aplicaciones, algunas desarrolladas como proyectos de alto nivel, como Firefox , Skype,  Google, Apple, Android, Adobe o McAffee y muchos otros (www.sqlite.org/famous.html). Este articulo es la adaptación para el mundo hispánico del artículo publicado originalmente en el Portail SIG: SQLite – SpatiaLite: le pourquoi du comment.

La primera pregunta es:

¿Qué es SQLite?

En primer lugar, un artículo básico para aclarar las cosas:

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

Por lo tanto:

  • SQLite es un programa/biblioteca escrito en lenguaje C que implementa un Sistema de gestión de bases de datos transaccionales SQL auto-contenido, sin servidor y sin configuración;
  • una base SQLite es un simple fichero autónomo, mas o menos ligero (SQLite permite bases de hasta 2 Terabytes de tamaño!), independiente de la plataforma (no como los de Microsoft Access o de FileMaker Pro, que no funcionan sobre todas las plataformas). El tamaño muy reducido del programa/biblioteca lo hace perfecto para ser utilizado en o con otras aplicaciones;
  • se utiliza con el lenguaje SQL (SQL As Understood By SQLite);
  • una base SQLite (es decir, un fichero) puede contener varias tablas y vistas SQL, índices, funciones, triggers, etc.;
  • SQLite permite la inclusión de campos tipo BLOB (Binary Large Objects, objetos binarios grandes como fotos, imágenes, http://effbot.org/zone/sqlite-blob.htm);
  • además, si se desea, es posible trabajar con bases virtuales, en memoria, sin fichero físico (www.sqlite.org/inmemorydb.html);
  • en consecuencia, se puede trasladar sin problemas una base de datos (o fichero) a cualquier dispositivo que tenga SQLite instalado (ordenador, smartphone, tabletas, entre otros);
  • a diferencia de una hoja de cálculo, se pueden manejar las relaciones SQL entre varias tablas o en una sola tabla;
  • el código de SQLite es de dominio público y su licencia permite su uso en cualquier proyecto, libre, gratis (freeware) o comercial (propietario);
  • el portal de SQLite explica muy bien en www.sqlite.org/whentouse.html y www.sqlite.org/limits.html sus límites, cuándo se puede utilizar y cuándo es mejor usar otra base de datos:

« Another way to look at SQLite is this: SQLite is not designed to replace Oracle… »

¿Cómo utilizarlo?

  • En su versión básica, SQLite se utiliza en línea de comandos, poco práctico para el principiante:

– desde simples ( SQLite Database Browser, OpenSource, multi OS):

– a más sofisticados  (SQLite2009 Pro Enterprise Manager, freeware, Windows), pero hay muchos mas:

  • Firefox ofrece una extensión llamada SQLite Manager que permite administrar todas las bases SQLite (Firefox utiliza SQLite para administrar los marcadores, las contraseñas, etc.). Esta extensión está también disponible como una aplicación independiente (http://code.google.com/p/sqlite-manager/):

  • igualmente existen programas (libres o no) para convertir desde y hacia SQLite (Microsoft Access – SQLite por ejemplo);
  • la bases se pueden acceder a través de ODBC y JDBC, lo que permite un montón de cosas (modelado entidad-relación, enlaces a otras bases de datos, etc.).
  • también es posible unir/conectar nativamente n bases SQLite (ficheros) para realizar consultas SQL sobre el conjunto;
  • las bases son accesibles desde prácticamente todos los lenguajes, C, C++, C#, Python, PHP, Ruby, Java, R y todos los que desee (ver www.sqlite.org/cvstrac/wiki). El módulo sqlite3 es, por ejemplo, un módulo estándar de las distribuciones de Python;
  • GRASS GIS, por ejemplo, permite utilizar SQLite en lugar de dbf haciéndolo muchísimo más potente). En la futura versión 7, será el estándar.
  • SQLite permite añadir extensiones al programa (en forma de bibliotecas, www.sqlite.org/cvstrac/wiki.).  SQLite debe, sin embargo, haber sido compilado con la opción de aceptar extensiones. Existen extensiones en muchas áreas.

SQLite en el mundo geoespacial: SpatiaLite

  • SpatiaLite es una de esas extensiones. Desempeña el mismo papel que PostGIS para PostgreSQL, es decir que agrega a SQLite el soporte para datos espaciales según las especificaciones de la OGC. Hay o hubo otros como SQLiteMap en R o el proveedor de FDO SQLite.
  • En su versión programa, SpatiaLite se descarga coma una versión compilada de SQLite con SpatiaLite (en Línea de comandos) o como un GUI (SpatiaLite-Gui).

  • pero siempre se puede convertir una base SQLite normal en una base SQLite/SpatiaLite añadiendole la biblioteca/librería libspatialite:

sqlite> .load ‘libspatialite.so,dll ou dylib’
o
sqlite> SELECT load_extension(libspatialite.so,dll ou dylib)

  • o el programa SpatiaLite-Gis para visualizarlas (como en el caso de PostGIS):

  • algunos piensan que las bases/ficheros SpatiaLite van a substituir a los shapefiles porque reúnen en un solo archivo los ficheros .shp, .dbf, .shx y .proj, y son multiplataforma. Pero para eso, seria necesario que los grandes del mundo geoespacial (ESRI y co.) se interesen en el formato, lo que está lejos de ser el caso
  • El genial creador de SpatiaLite, Alessandro Furieri, sigue desarrollando otras extensiones como RasterLite que permite almacenar a ficheros de tipo raster en SQLite (en campos de tipo Blob) o FreeXL que permite almacenar directamente ficheros Microsoft Excel.

Conclusiones

Espero haber sido claro. Personalmente, desde que descubrí SQLite, deje poco a poco todo lo demás. Ligeros, portables, multi-OS, accesibles con una amplia variedad de aplicaciones, con QGIS o GRASS GIS, con JDBC , con los lenguajes que uso, Python y R, los ficheros/bases de datos SQLite se han convertido en mis instrumentos de trabajo de elección (a pesar de algunas pocas limitaciones molestas).


Para ir más lejos con SQLite

en español (en ingles hay demasiados!)

http://sqlite-latino.blogspot.be/
http://www.ecured.cu/index.php/SQLite
http://itrativo.blogspot.be/2012/03/manual-basico-de-sqlite-introduccion.html

libros

Books About SQLite

Personalmente usé The Definitive Guide to SQLite (2nd edition, 2010), Authors: Mike Owens and Grant Allen, Publisher: Apress

SIG y SQLite (sin SpatiaLite)

SQLite driver in GRASS
SQLite con TileMill
SQLite con ogr2ogr

y muchos más, QGIS, por ejemplo, pude abrir directamente los ficheros/bases SQLite.

Anexo: cómo acelerar Firefox

Cuando se conoce SQLite, es muy fácil acelerar el navegador Firefox desfragmentando periódicamente sus diversas bases de datos.

Por ejemplo, con la base places.sqlite que guarda los marcadores:

tratándola como un archivo SQLite en el Shell:

sqlite3 places.sqlite ‘VACUUM’;

y todos los demás ficheros SQLite de la carpeta, en Bash:

for f in */*.sqlite; do sqlite3 $f ‘VACUUM;’; done

se hace lo mismo que lo que hace SpeedyFox, no disponible para Linux.