Desarrollador(es) | D. Richard Hipp |
---|---|
Lanzamiento inicial | 17 de agosto de 2000 ( 17 de agosto de 2000 ) |
Versión estable | 3.47.0 [1] (21 de octubre de 2024 [±] ( 21 de octubre de 2024 ) | )
Repositorio |
|
Escrito en | do |
Sistema operativo | Multiplataforma |
Tamaño | 699 KiB |
Tipo | RDBMS ( integrado ) |
Licencia | Dominio público [2] |
Sitio web | sqlite.org |
Extensión de nombre de archivo | .sqlite, .sqlite3, .db, .db3, .s3db, .sl3 |
---|---|
Tipo de medio de Internet | application/vnd.sqlite3 [3] |
Número mágico | 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 ( ASCII terminado en cero "formato SQLite 3") |
Lanzamiento inicial | 18 de junio de 2004 |
¿ Formato abierto ? | Sí ( Dominio público ) |
Sitio web | www.sqlite.org/fileformat2.html |
SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s iː k w ə ˌ l aɪ t / [6] ) es un motor de base de datos escrito en el lenguaje de programación C. No es una aplicación independiente; más bien, es una biblioteca que los desarrolladores de software incorporan en sus aplicaciones . Como tal, pertenece a la familia de bases de datos integradas . Es el motor de base de datos más ampliamente implementado, ya que lo utilizan varios de los principales navegadores web , sistemas operativos , teléfonos móviles y otros sistemas integrados . [7]
Muchos lenguajes de programación tienen enlaces a la biblioteca SQLite. Generalmente sigue la sintaxis de PostgreSQL , pero no aplica la verificación de tipos de forma predeterminada. [8] [9] Esto significa que se puede, por ejemplo, insertar una cadena en una columna definida como un entero.
D. Richard Hipp diseñó SQLite en la primavera de 2000 mientras trabajaba para General Dynamics bajo contrato con la Marina de los Estados Unidos . [10] Hipp estaba diseñando software utilizado para un sistema de control de daños a bordo de destructores de misiles guiados ; el sistema de control de daños originalmente utilizaba HP-UX con un back-end de base de datos IBM Informix . SQLite comenzó como una extensión de Tcl . [11]
En agosto de 2000, se lanzó la versión 1.0 de SQLite, con almacenamiento basado en gdbm (GNU Database Manager). En septiembre de 2001, SQLite 2.0 reemplazó a gdbm con una implementación de árbol B personalizada, agregando capacidad de transacción . En junio de 2004, SQLite 3.0 agregó internacionalización , tipificación de manifiesto y otras mejoras importantes, parcialmente financiadas por America Online . En 2011, Hipp anunció sus planes de agregar una interfaz NoSQL a SQLite, además de anunciar UnQL, un superconjunto funcional de SQL diseñado para bases de datos orientadas a documentos . [12] En 2018, SQLite adoptó un Código de conducta basado en la Regla de San Benito que causó cierta controversia y luego fue renombrado como Código de ética. [13]
SQLite es uno de los cuatro formatos recomendados para el almacenamiento a largo plazo de conjuntos de datos aprobados para su uso por la Biblioteca del Congreso . [14] [15] [16]
SQLite fue diseñado para permitir que el programa funcione sin instalar un sistema de administración de bases de datos o requerir un administrador de bases de datos . A diferencia de los sistemas de administración de bases de datos cliente-servidor , el motor SQLite no tiene procesos independientes con los que se comunica el programa de aplicación. En cambio, un enlazador integra la biblioteca SQLite ( de forma estática o dinámica ) en un programa de aplicación que utiliza la funcionalidad de SQLite a través de llamadas de función simples , lo que reduce la latencia en las operaciones de base de datos; para consultas simples con poca concurrencia, el rendimiento de SQLite se beneficia al evitar la sobrecarga de la comunicación entre procesos .
Debido al diseño sin servidor, las aplicaciones SQLite requieren menos configuración que las bases de datos cliente-servidor. SQLite se denomina zero-conf [17] porque no requiere administración de servicios (como scripts de inicio) o control de acceso basado en GRANT y contraseñas. El control de acceso se maneja por medio de permisos del sistema de archivos otorgados al archivo de base de datos en sí. Las bases de datos en sistemas cliente-servidor usan permisos del sistema de archivos que dan acceso a los archivos de base de datos solo al proceso daemon , que maneja sus bloqueos internamente, lo que permite escrituras simultáneas desde varios procesos.
SQLite almacena toda la base de datos (definiciones, tablas , índices y los datos en sí) como un único archivo multiplataforma en una máquina host, lo que permite que varios procesos o subprocesos accedan a la misma base de datos simultáneamente. Implementa este diseño simple bloqueando el archivo de base de datos durante la escritura. El acceso de escritura puede fallar con un código de error o puede volver a intentarse hasta que expire un tiempo de espera configurable. Las operaciones de lectura de SQLite pueden ser multitarea , aunque debido al diseño sin servidor, las escrituras solo se pueden realizar de forma secuencial. Esta restricción de acceso simultáneo no se aplica a las tablas temporales y se relaja en la versión 3.7 ya que el registro de escritura anticipada (WAL) permite lecturas y escrituras simultáneas. [18] Dado que SQLite tiene que depender de bloqueos del sistema de archivos, no es la opción preferida para implementaciones de escritura intensiva. [19]
SQLite utiliza PostgreSQL como plataforma de referencia. "Qué haría PostgreSQL" se utiliza para dar sentido al estándar SQL. [20] [21] Una desviación importante es que, con la excepción de las claves primarias , SQLite no aplica la comprobación de tipos ; el tipo de un valor es dinámico y no está estrictamente restringido por el esquema (aunque el esquema activará una conversión al almacenarlo, si dicha conversión es potencialmente reversible). SQLite se esfuerza por seguir la regla de Postel . [22]
SQLite implementa la mayor parte del estándar SQL-92 para SQL, pero carece de algunas características. Por ejemplo, solo proporciona activadores parcialmente y no puede escribir en vistas (sin embargo, proporciona activadores INSTEAD OF que brindan esta funcionalidad). Su compatibilidad con sentencias ALTER TABLE es limitada. [23]
SQLite utiliza un sistema de tipos inusual para un DBMS compatible con SQL: en lugar de asignar un tipo a una columna como en la mayoría de los sistemas de bases de datos SQL, los tipos se asignan a valores individuales; en términos de lenguaje, está tipado dinámicamente . Además, está tipado débilmente de algunas de las mismas formas que Perl : uno puede insertar una cadena en una columna de enteros (aunque SQLite intentará convertir la cadena en un entero primero, si el tipo preferido de la columna es entero). Esto agrega flexibilidad a las columnas, especialmente cuando están vinculadas a un lenguaje de script de tipado dinámico. Sin embargo, la técnica no es portable a otros productos SQL. Una crítica común es que el sistema de tipos de SQLite carece del mecanismo de integridad de datos proporcionado por columnas de tipado estático, aunque puede emularse con restricciones como . [10] Las tablas estrictas se agregaron en la versión 3.37.1. [22]CHECK(typeof(x)='integer')
Las tablas normalmente incluyen una columna de índice rowid oculta , que proporciona un acceso más rápido. [24] Si una base de datos incluye una columna de clave principal entera, SQLite normalmente la optimizará tratándola como un alias para rowid , lo que hará que el contenido se almacene como un entero con signo de 64 bits estrictamente tipado y cambiará su comportamiento para que sea algo así como una columna de incremento automático. Las versiones futuras [¿ cuándo? ] de SQLite pueden incluir un comando para introspeccionar si una columna tiene un comportamiento como el de rowid para diferenciar estas columnas de las claves principales enteras no autoincrementales y débilmente tipadas. [25] [ verificación fallida ]
La versión 3.6.19, publicada el 14 de octubre de 2009, agregó soporte para restricciones de clave externa. [26] [27]
No se admiten procedimientos almacenados ; esta es una elección explícita de los desarrolladores para favorecer la simplicidad, ya que el caso de uso típico de SQLite es estar integrado dentro de una aplicación host que puede definir sus propios procedimientos en torno a la base de datos. [28]
Se puede habilitar el soporte completo para conversiones de mayúsculas y minúsculas Unicode a través de una extensión opcional. [29]
La versión 3.7.4 de SQLite vio por primera vez la adición del módulo FTS4 ( búsqueda de texto completo ), que presenta mejoras sobre el antiguo módulo FTS3. [30] FTS4 permite a los usuarios realizar búsquedas de texto completo en documentos de manera similar a cómo los motores de búsqueda buscan páginas web. [31] La versión 3.8.2 agregó soporte para crear tablas sin rowid , [32] lo que puede proporcionar mejoras de espacio y rendimiento. [33] La compatibilidad con expresiones de tabla comunes se agregó a SQLite en la versión 3.8.3. [34] 3.8.11 agregó un módulo de búsqueda más nuevo llamado FTS5, los cambios más radicales (en comparación con FTS4) requieren una actualización de versión.
En 2015, con la extensión json1 [35] y nuevas interfaces de subtipos, la versión 3.9 de SQLite introdujo la gestión de contenido JSON .
A partir de la versión 3.33.0, el tamaño máximo de base de datos admitido es 281 TB . [36]
El código de SQLite está alojado en Fossil , un sistema de control de versiones distribuido que utiliza SQLite como caché local para su formato de base de datos no relacional y el SQL de SQLite como lenguaje de implementación. [37] [38]
SQLite es de dominio público , pero no de "contribución abierta", y el sitio web afirma que "el proyecto no acepta parches de personas que no hayan presentado una declaración jurada dedicando su contribución al dominio público". [39] En lugar de un código de conducta , los fundadores han adoptado un código de ética basado en la Regla de San Benito . [40]
En la distribución de SQLite se incluye un programa de línea de comandos independiente llamado sqlite3 [ 41 ] . Se puede utilizar para crear una base de datos, definir tablas, insertar y modificar filas, ejecutar consultas y administrar un archivo de base de datos SQLite. También sirve como ejemplo para escribir aplicaciones que utilicen la biblioteca SQLite.
SQLite utiliza pruebas de regresión automatizadas antes de cada lanzamiento. Se ejecutan más de 2 millones de pruebas [42] como parte de la verificación de un lanzamiento. A partir del lanzamiento de SQLite 3.6.17 del 10 de agosto de 2009, los lanzamientos de SQLite tienen una cobertura de prueba de ramificación del 100 %, uno de los componentes de la cobertura de código . Las pruebas y los arneses de prueba son parcialmente de dominio público y parcialmente de propiedad privada . [42]
SQLite está incluido por defecto en: [11]
¿Cómo se pronuncia el nombre del producto? Digo SQL-ite, como un mineral.
[...] ess-kju-ellite [...]
[...] sequelite [...]
WAL proporciona más concurrencia, ya que los lectores no bloquean a los escritores y un escritor no bloquea a los lectores. La lectura y la escritura pueden realizarse simultáneamente.
La búsqueda de un registro con un rowid específico, o de todos los registros con rowids dentro de un rango especificado, es aproximadamente el doble de rápida que una búsqueda similar realizada especificando cualquier otra CLAVE PRINCIPAL o valor indexado.
Agregue el comando "PRAGMA table_ipk(TABLE)" para fines de evaluación.
te ves obligado a utilizar una marca de base de datos que no admite restricciones de clave externa (por ejemplo, el motor de almacenamiento MyISAM de MySQL o SQLite anterior a la versión 3.6.19).