SQLite: base de datos minimalista que resuelve muchos casos de uso, liviana y portable
Muchas veces queremos implementar una pequeña aplicación y empezamos a pensar la arquitectura, y esquivamos la base de datos hasta el último. Tambièn sucede que cuando nos ponemos a analizar como y donde almacenar datos, huímos al debate eterno de relacional o no relacional, y quedamos en un bucle.
Hoy con plataformas de base de dato en la nube, que se suponen simplifican al máximo este debate, lo seguimos estirando injustificadamente.
¿Por qué si podemos resolverlo fácil, rápido, de forma portable, sólida y performante?
Bases de datos SQL relacionales
Las más populares bases de datos, más extendidas y usadas en millones de proyectos de todo tipo y tamaño, son las SQL, de arquitectura relacional. Es decir, las que podríamos equiparar a una planilla con un motor que relaciona sus filas y columnas, entre diferentes tablas, etc. Dicho de otra manera: un Excel con «superpoderes».
Entre las bases de datos relacionales más populares tenemos: MySQL, PostgreSQL, MariaDB, Microsoft SQL Server y Oracle Database, SQLite, entre otros.
Ejemplificación de bases de datos escalables, relacionales, ordenadas y estandarizadas.
Bases de datos no relacionales o «no SQL»
La principal diferencia entre las bases de datos relacionales y no relacionales (bases de datos NoSQL) es la forma en que se almacenan y organizan los datos.
Las bases de datos no relacionales no almacenan datos de manera tabular y basada en reglas, en «planillas» de relaciones mutuas. En su lugar, almacenan datos como archivos individuales y no conectados, y se pueden usar para tipos de datos complejos y no estructurados, especialmente son buenas para documentos o archivos de multimedia.
A diferencia de las bases de datos relacionales, las bases de datos NoSQL siguen un modelo de datos flexible, generalmente están formateadas en JSON, por lo que son ideales para almacenar datos que cambian con frecuencia o para aplicaciones que manejan tipos de datos diversos.
Algunos documentos y especialistas indican que son un tanto más rápidas en cierta escala, pero a la vez más complejo su mantenimiento, ordenamiento, normalización y sostenibilidad a muy largo plazo, por lo que muchas soluciones modernas combinan ambos formatos o en ciertas arquitecturas se usan modos mixtos, sea combinando tecnologías diferentes (ej, MongoDB para lo no relacional y MySQL para lo relacional) y/o motores de base de datos que admiten ambos tipos de almacenamiento (PostgreSQL).
Minimalismo y portabilidad en bases de datos como solución a millones de casos de uso y miles de millones de aplicaciones: SQLite
Pensemos que conectar una base de datos parece sencillo y cualquier lenguaje de programación de cualquier época puede hacerlo, por módulos o librerías embebidas o propias o por plugins extra. Entonces podríamos decir que no importa el lenguaje, plataforma y dispositivo, deberíamos de poder conectarnos a una base de datos…
Bueno, no es tan sencillo. Instalar un motor de base de datos, relacional o no, lleva muchos megabytes, soporte, extensibilidad, estabilidad, etc. Además hay que velar por la seguridad e integridad de esos datos. También hay casos donde no necesitamos almacenar gran cantidad de datos, entonces para unos pocos Mb de información no justifica instalar MySQL o cualquiera sea que pesa cien veces más.
Muchas veces se necesita persistir temporalmente datos, luego sincronizarlos a otro servidor y/o hacer una landing page que solo guarde nombre, teléfono y correo electrónico. ¿Por qué armar una fortaleza si con una caseta de vigilancia podríamos funcionar? Bien, a eso viene SQLite.
La tecnología se fue atomizando, pero a la vez conservando e incluso mejorando la performance, estabilidad, soporte y extensibilidad. Ejemplo alegórico de SQLite.
Algunas notas relevantes de las bases de dato SQLite
- El programa tiene un tamaño relativamente pequeño ~275Kb.
- Licencia «dominio público».
- Más de 20 años de desarrollo y evolución, es el motor de bases de datos más usado en todo el mundo.
- En su versión 3, SQLite permite bases de datos de hasta 2 Tb de tamaño, y también permite la inclusión de campos tipo BLOB*.
- Son portables, livianas, ágiles y conectan con todos los lenguajes y sistemas, tiene un soporte ampliamente extendido.
- Multi-hilo de lectura, único hilo de escritura (se bloquea al iniciar una transacción de escritura, lo advierte y es posible reintentar).
- Soporte embebido incorporado en C/C++, Python, Perl, VisualBasic, Delphi, PHP, Java, .NET, Lazarus, FreePascal, Pascal, MacOSX, AppleScript, BlitzMAX, Gambas, Bennu, Atolt, Go. En NodeJs y otros lenguajes se deben instalar complementos.
* Generalmente, estos datos son imágenes, archivos de sonido y otros objetos multimedia, base64, etc; a veces se almacenan como códigos de binarios BLOB.
En qué sistemas y aplicaciones se usa SQLite
Por la portabilidad, se ha extendido y profundizado mucho el uso en dispositivos móviles, IOT, etc; por ejemplo, es soportado en Android, BlackBerry, Windows Phone, Google Chrome, iOS, Firefox OS, Maemo, MeeGo, Symbian OS, webOS.
Es posible ejecutarlo en Linux, millones de servidores web o computadoras de escritorio; también en Windows, Mac OS, etc. Lo usan muchos dispositivos de Internet de las Cosas, como refrigeradores, lavadores de ropa, cámaras de vigilancia, vehículos, controladores de ingreso de personal, etc.
Algunas aplicaciones populares que lo usan: Mozilla Firefox, Chrome, OpenOffice, Apple Maul, Opera, Skype, millones de apps en Android, BlackBerry.