Sistema de gestión de bases de datos relacionales sin servidor (RDBMS)
SQLite ( , [4] [5] [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.
Historia
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]
Diseño
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]
Características
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]
Desarrollo y distribución
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]
Usos notables
Sistemas operativos
SQLite está incluido por defecto en: [11]
Software intermedio
- El adaptador ADO.NET , desarrollado inicialmente por Robert Simpson, se mantiene conjuntamente con los desarrolladores de SQLite desde abril de 2010. [44]
- El controlador ODBC ha sido desarrollado y mantenido por separado por Christian Werner. [45] El controlador ODBC de Werner es el método de conexión recomendado para acceder a SQLite desde OpenOffice.org . [46]
- Contenedor COM ( ActiveX ) que hace que SQLite sea accesible en Windows para lenguajes con scripts como JScript y VBScript . Esto agrega capacidades de base de datos SQLite a aplicaciones HTML (HTA). [47]
Navegadores web
- Los navegadores Google Chrome , Opera , Safari y el navegador Android permiten almacenar información y recuperarla de una base de datos SQLite dentro del navegador, utilizando la compilación oficial SQLite Wasm ( WebAssembly ), [48] o utilizando la tecnología Web SQL Database , aunque esta última se está volviendo obsoleta (es decir, reemplazada por SQLite Wasm o por IndexedDB ). Internamente, estos navegadores basados en Chromium utilizan bases de datos SQLite para almacenar datos de configuración como el historial de visitas al sitio, cookies, historial de descargas, etc. [49]
- Mozilla Firefox y Mozilla Thunderbird almacenan una variedad de datos de configuración (marcadores, cookies, contactos, etc.) en bases de datos SQLite administradas internamente. Hasta la versión 57 de Firefox ( "Firefox Quantum" ), había un complemento de terceros que usaba la API que admitía esta funcionalidad para proporcionar una interfaz de usuario para administrar bases de datos SQLite arbitrarias. [50]
- Varios complementos de terceros pueden utilizar las API de JavaScript para administrar bases de datos SQLite. [51] [52]
Marcos de aplicaciones web
Otros
Véase también
Referencias
Citas
- ^ "SQLite Release 3.47.0 On 2024-10-21". 21 de octubre de 2024. Consultado el 21 de octubre de 2024 .
- ^ "SQLite Copyright". sqlite.org. Archivado desde el original el 10 de octubre de 2023. Consultado el 17 de mayo de 2010 .
- ^ "Tipo de medio de formato de archivo de base de datos SQLite en IANA". Autoridad de Números Asignados en Internet . IANA . Archivado desde el original el 2022-11-09 . Consultado el 2019-03-08 .
- ^ "Por qué SQLite triunfó como base de datos: Richard Hipp, creador de SQLite". Registro de cambios . Episodio 201. El evento ocurre a las 00:17:25. Archivado desde el original el 2022-07-07 . Consultado el 2019-08-06 .
¿Cómo se pronuncia el nombre del producto? Digo SQL-ite, como un mineral.
- ^ D. Richard Hipp (presentador) (31 de mayo de 2006). Introducción a SQLite (video) . Google Inc. El evento ocurre a las 00:01:14 . Consultado el 23 de marzo de 2010.
[...] ess-kju-ellite [...]
- ^ D. Richard Hipp (presentador) (31 de mayo de 2006). Introducción a SQLite. Google Inc. El evento ocurre a las 00:48:15 . Consultado el 23 de marzo de 2010.
[...] sequelite [...]
- ^ "Estimaciones de bases de datos SQL más utilizadas". SQLite.org . Consultado el 11 de mayo de 2011 .
- ^ Owens, Michael (2006). "Capítulo 4: SQL". En Gilmore, Jason; Thomas, Keir (eds.). La guía definitiva de SQLite. D. Richard Hipp (prólogo), Preston Hagar (revisor técnico). Apress . p. 133. ISBN 978-1-59059-673-9Archivado del original el 24 de noviembre de 2020 . Consultado el 30 de diciembre de 2014 .
- ^ "Tablas STRICT". Archivado desde el original el 7 de agosto de 2022. Consultado el 11 de agosto de 2022 .
- ^ de Owens, Michael (2006). La guía definitiva de SQLite . Apress . doi :10.1007/978-1-4302-0172-4_1. ISBN . 978-1-59059-673-9.
- ^ abc «Usuarios conocidos de SQLite». SQLite. Archivado desde el original el 11 de julio de 2015. Consultado el 5 de agosto de 2015 .
- ^ "Entrevista: Richard Hipp sobre UnQL, un nuevo lenguaje de consulta para bases de datos documentales". InfoQ. 4 de agosto de 2011. Archivado desde el original el 8 de abril de 2014. Consultado el 5 de octubre de 2011 .
- ^ McCarthy, Kieren. "El creador de SQLite fue crucificado después de que un código de conducta advirtiera a los desarrolladores que amaran a Dios y no mataran, cometieran adulterio, robaran ni maldijeran..." www.theregister.com . Archivado desde el original el 2022-11-17 . Consultado el 2022-11-17 .
- ^ "Formato de almacenamiento recomendado por LoC". www.sqlite.org . Archivado desde el original el 23 de abril de 2020 . Consultado el 9 de abril de 2020 .
- ^ "SQLite, versión 3". www.loc.gov . 28 de marzo de 2017. Archivado desde el original el 11 de mayo de 2020 . Consultado el 9 de abril de 2020 .
- ^ "Declaración de formatos recomendados: conjuntos de datos/bases de datos". Biblioteca del Congreso. Archivado desde el original el 22 de agosto de 2018. Consultado el 9 de abril de 2020 .
- ^ "SQLite es una base de datos que no requiere configuración". SQLite.org. Archivado desde el original el 2 de mayo de 2024. Consultado el 3 de agosto de 2015 .
- ^ "Write Ahead Logging in SQLite 3.7". SQLite.org. Archivado desde el original el 2 de mayo de 2024. Consultado el 3 de septiembre de 2011.
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.
- ^ "Usos apropiados de SQLite". SQLite.org. Archivado desde el original el 2024-05-02 . Consultado el 2015-09-03 .
- ^ "PGCon 2014: Clustering y VODKA". Lwn.net . Archivado desde el original el 2015-06-29 . Consultado el 2017-01-06 .
- ^ "PGCon2014: SQLite: Protégé of PostgreSQL". Pgcon.org . 20 de septiembre de 2015. Archivado desde el original el 2014-12-30 . Consultado el 2017-01-06 .
- ^ ab "SQLite: StrictMode". Sqlite.org . Archivado desde el original el 4 de marzo de 2016. Consultado el 3 de septiembre de 2015 .
- ^ "Historial de versiones de SQLite". Archivado desde el original el 16 de marzo de 2021. Consultado el 22 de marzo de 2021 .
- ^ "SQL tal como lo entiende SQLite". SQLite . Archivado desde el original el 21 de mayo de 2018 . Consultado el 21 de mayo de 2018 .
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.
- ^ "SQLite: Check-in [2494132a]". www.sqlite.org . 2017-11-28. Archivado desde el original el 2018-05-21 . Consultado el 2018-05-21 .
Agregue el comando "PRAGMA table_ipk(TABLE)" para fines de evaluación.
- ^ Karwin, Bill (mayo de 2010). Carter, Jacquelyn (ed.). Antipatrones de SQL: cómo evitar los problemas de la programación de bases de datos . The Pragmatic Bookshelf. pág. 70. ISBN 978-1-934356-55-5A veces ,
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).
- ^ "SQLite Release 3.6.19 On 2009-10-14". sqlite.org . Archivado desde el original el 2020-10-29 . Consultado el 2020-10-15 .
- ^ Fuente: comentarios de los desarrolladores en el foro de SQLite Archivado el 1 de abril de 2023 en Wayback Machine
- ^ "La coincidencia de caracteres Unicode sin distinción entre mayúsculas y minúsculas no funciona". Preguntas frecuentes sobre SQLite . Archivado desde el original el 5 de septiembre de 2015. Consultado el 3 de septiembre de 2015 .
- ^ "SQLite Release 3.7.4 On 2010-12-08". SQLite.org. 8 de diciembre de 2010. Archivado desde el original el 16 de septiembre de 2015. Consultado el 3 de septiembre de 2015 .
- ^ "Extensiones SQLite FTS3 y FTS4". SQLite.org. Archivado desde el original el 5 de septiembre de 2015. Consultado el 3 de septiembre de 2015 .
- ^ "SQLite Release 3.8.2 On 2013-12-06". SQLite.org. 6 de diciembre de 2013. Archivado desde el original el 24 de septiembre de 2015. Consultado el 3 de septiembre de 2015 .
- ^ "Optimización SIN ROWID". SQLite.org. Archivado desde el original el 5 de septiembre de 2015. Consultado el 3 de septiembre de 2015 .
- ^ "SQLite Release 3.8.3 On 2014-02-03". SQLite.org. 3 de febrero de 2014. Archivado desde el original el 5 de septiembre de 2015. Consultado el 3 de septiembre de 2015 .
- ^ "La extensión JSON1". SQLite.org . Archivado desde el original el 14 de septiembre de 2017. Consultado el 14 de septiembre de 2017 .
- ^ "Límites en SQLite". SQLite.org . Archivado desde el original el 2021-11-07 . Consultado el 2022-09-19 .
- ^ "Reflexiones sobre el diseño del DVCS fósil". Fossil-scm.org. 12 de julio de 2017. Archivado desde el original el 13 de octubre de 2022. Consultado el 14 de octubre de 2022 .
- ^ "Fossil: Fossil Performance". Fossil-scm.org. 23 de agosto de 2009. Archivado desde el original el 9 de octubre de 2009. Consultado el 12 de septiembre de 2009 .
- ^ "Derechos de autor de SQLite". sqlite.org . Archivado desde el original el 15 de marzo de 2024. Consultado el 6 de marzo de 2024 .
- ^ "Código de ética". sqlite.org . Archivado desde el original el 19 de febrero de 2024 . Consultado el 6 de marzo de 2024 .
- ^ "Command Line Shell For SQLite" (Shell de línea de comandos para SQLite). Sqlite.org. Archivado desde el original el 6 de octubre de 2022. Consultado el 14 de octubre de 2022 .
- ^ ab "Cómo se prueba SQLite". SQLite.org. Archivado desde el original el 6 de octubre de 2009. Consultado el 12 de septiembre de 2009 .
- ^ "Para utilizar la versión de SQLite que está instalada con Windows". 20 de octubre de 2022. Archivado desde el original el 31 de marzo de 2022 . Consultado el 31 de marzo de 2022 .
- ^ "Inicio". System.Data.SQLite . 2016-12-30. Archivado desde el original el 2014-07-13 . Consultado el 2017-01-06 .
- ^ "SQLite ODBC Driver". Ch-werner.de . 2016-12-01. Archivado desde el original el 2014-06-26 . Consultado el 2017-01-06 .
- ^ "Uso de la base de datos SQLite con OpenOffice.org: versión 2.0" (PDF) . Documentation.openoffice.org . Archivado (PDF) desde el original el 28 de septiembre de 2011 . Consultado el 6 de enero de 2017 .
- ^ "sqlite — Sqlite Wrappers". SQLite.org. 7 de febrero de 2009. Archivado desde el original el 5 de febrero de 2009 . Consultado el 7 de febrero de 2009 .
- ^ "Índice de documentación de sqlite3 WebAssembly y JavaScript". SQLite . Archivado desde el original el 2024-05-02 . Consultado el 2023-05-08 .
- ^ "Ubicación del historial de Google Chrome". www.foxtonforensics.com . 2020-10-06. Archivado desde el original el 2023-02-28 . Consultado el 2020-10-06 .
- ^ "SQLite Manager :: Complementos para Firefox". Addons.mozilla.org . 28 de febrero de 2015. Archivado desde el original el 2 de enero de 2017 . Consultado el 6 de enero de 2017 .
- ^ "SQLite Manager – Consigue esta extensión para 🦊 Firefox (en-US)". Addons.mozilla.org . 2018-07-24. Archivado desde el original el 2018-10-05 . Consultado el 2018-10-05 .
- ^ "SQLite Reader – Consigue esta extensión para 🦊 Firefox (en-US)". Addons.mozilla.org . 2018-09-01. Archivado desde el original el 2018-10-05 . Consultado el 2018-10-05 .
- ^ "Usando SQL para encontrar mi mejor foto de un pelícano según Apple Photo". Blog de Simon Willison . Archivado desde el original el 22 de mayo de 2020. Consultado el 23 de mayo de 2020 .
- ^ "Lanzamiento de Audacity 3.0.0". 17 de marzo de 2021. Archivado desde el original el 14 de agosto de 2023. Consultado el 17 de marzo de 2021 .
- ^ Hinegardner, Jeremy (28 de agosto de 2007). "¿El cliente de Skype usa SQLite?". sqlite-users (Lista de correo). Archivado desde el original el 17 de noviembre de 2007. Consultado el 14 de junio de 2010 .
Fuentes
- Allen, Grant; Owens, Mike (5 de noviembre de 2010). The Definitive Guide to SQLite (2.ª ed.). Apress . p. 368. ISBN 978-1-4302-3225-4Archivado desde el original el 30 de diciembre de 2010 . Consultado el 23 de diciembre de 2010 .
- Kreibich, Jay A. (17 de agosto de 2010). Using SQLite (1.ª ed.). O'Reilly Media . p. 528. ISBN 978-0-596-52118-9Archivado desde el original el 25 de diciembre de 2010 . Consultado el 23 de diciembre de 2010 .
- Newman, Chris (9 de noviembre de 2004). SQLite (Developer's Library) (1.ª ed.). Sams . p. 336. ISBN 0-672-32685-X. Archivado desde el original el 14 de enero de 2012 . Consultado el 12 de mayo de 2010 .
Enlaces externos
Wikimedia Commons tiene medios relacionados con SQLite .
- Sitio web oficial
- "La historia no contada de SQLite". CoRecursive.