stringtranslate.com

SQLite

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ t / , [4] [5] / ˈ s k w ə ˌ l 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 integran en sus aplicaciones . Como tal, pertenece a la familia de bases de datos integradas . Es el motor de base de datos más 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 exige 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 número 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 utilizaba originalmente 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ó gdbm con una implementación de árbol B personalizada , agregando capacidad de transacción . En junio de 2004, SQLite 3.0 agregó internacionalización , escritura 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 pasó a llamarse 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 sea operado sin instalar un sistema de administración de bases de datos ni requerir un administrador de bases de datos . A diferencia de los sistemas de gestió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 vinculador integra la biblioteca SQLite, estática o dinámicamente , en un programa de aplicación que utiliza la funcionalidad de SQLite a través de llamadas a funciones simples , lo que reduce la latencia en las operaciones de la 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 llama zero-conf [17] porque no requiere administración de servicios (como scripts de inicio) ni control de acceso basado en GRANT y contraseñas. El control de acceso se maneja mediante permisos del sistema de archivos otorgados al propio archivo de base de datos. Las bases de datos en sistemas cliente-servidor utilizan permisos del sistema de archivos que dan acceso a los archivos de la base de datos sólo al proceso demonio , que maneja sus bloqueos internamente, permitiendo 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 la base de datos durante la escritura. El acceso de escritura puede fallar con un código de error o se puede volver a intentar 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 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 con uso intensivo de escritura. [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 exige la verificación de tipos ; el tipo de valor es dinámico y no está estrictamente restringido por el esquema (aunque el esquema desencadenará 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 funciones. Por ejemplo, solo proporciona activadores parcialmente y no puede escribir en vistas (sin embargo, proporciona EN LUGAR DE activadores que brindan esta funcionalidad). Su soporte de declaraciones ALTER TABLE es limitado. [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, se escribe dinámicamente . Además, tiene tipos débiles en algunas de las mismas formas que Perl : se puede insertar una cadena en una columna de números enteros (aunque SQLite intentará convertir la cadena a un número entero primero, si el tipo preferido de la columna es un número entero). Esto agrega flexibilidad a las columnas, especialmente cuando están vinculadas a un lenguaje de secuencias de comandos escrito dinámicamente. Sin embargo, la técnica no es portátil 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 las columnas escritas estáticamente, aunque se puede emular con restricciones como . [10] Se agregaron tablas estrictas en la versión 3.37.1. [22]CHECK(typeof(x)='integer')

Las tablas normalmente incluyen una columna de índice de ID de fila oculta , lo que brinda un acceso más rápido. [24] Si una base de datos incluye una columna de clave primaria entera, SQLite normalmente la optimizará tratándola como un alias para rowid , lo que hace que el contenido se almacene como un entero de 64 bits con signo estrictamente tipado y cambie su comportamiento para que sea algo así como una columna de incremento automático. Futuro [ ¿cuándo? ] Las versiones de SQLite pueden incluir un comando para realizar una introspección si una columna tiene un comportamiento como el de rowid para diferenciar estas columnas de las claves primarias enteras no autoincrementales y con tipos débiles. [25] [ verificación fallida ]

La versión 3.6.19 lanzada 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 integrarse dentro de una aplicación host que puede definir sus propios procedimientos en torno a la base de datos. [28]

Se puede habilitar 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 con respecto al módulo FTS3 anterior. [30] FTS4 permite a los usuarios realizar búsquedas de texto completo en documentos de forma similar a como los motores de búsqueda buscan en páginas web. [31] La versión 3.8.2 agregó soporte para crear tablas sin ID de fila , [32] lo que puede proporcionar mejoras de espacio y rendimiento. [33] Se agregó compatibilidad con expresiones de tabla comunes 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 un aumento en la versión.

En 2015, con la extensión json1 [35] y nuevas interfaces de subtipo, 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 SQL de SQLite como lenguaje de implementación. [37] [38]

En la distribución de SQLite se proporciona un programa shell de línea de comandos independiente llamado sqlite3 [39] . Se puede utilizar para crear una base de datos, definir tablas, insertar y cambiar filas, ejecutar consultas y administrar un archivo de base de datos SQLite. También sirve como ejemplo para escribir aplicaciones que utilizan la biblioteca SQLite.

SQLite utiliza pruebas de regresión automatizadas antes de cada lanzamiento. Se ejecutan más de 2 millones de pruebas [40] como parte de la verificación de una versión. A partir de la versión de SQLite 3.6.17 del 10 de agosto de 2009, las versiones de SQLite tienen una cobertura de prueba de rama del 100%, uno de los componentes de la cobertura de código . Las pruebas y los arneses de prueba son en parte de dominio público y en parte de propiedad exclusiva . [40]

Usos notables

Sistemas operativos

SQLite se incluye por defecto en: [11]

software intermedio

navegadores web

Marcos de aplicaciones web

Otros

Ver también

Referencias

Citas

  1. ^ "Lanzamiento de SQLite 3.45.1 el 30 de enero de 2024". 30 de enero de 2024 . Consultado el 30 de enero de 2024 .
  2. ^ "Copyright de SQLite". sqlite.org . Consultado el 17 de mayo de 2010 .
  3. ^ "Tipo de medio de formato de archivo de base de datos SQLite en IANA". Autoridad de asignación de números de Internet . IANA . Consultado el 8 de marzo de 2019 .
  4. ^ "Por qué SQLite tuvo éxito como base de datos: Richard Hipp, creador de SQLite". El registro de cambios . Episodio 201. El evento ocurre a las 00:17:25. ¿Cómo pronuncio el nombre del producto? Digo SQL-ite, como un mineral.
  5. ^ D. Richard Hipp (presentador) (31 de mayo de 2006). Introducción a SQLite (vídeo) . El evento de Google Inc. ocurre a las 00:01:14 . Consultado el 23 de marzo de 2010 . [...] ess-kju-ellite [...]
  6. ^ D. Richard Hipp (presentador) (31 de mayo de 2006). Una introducción a SQLite. El evento de Google Inc. ocurre a las 00:48:15 . Consultado el 23 de marzo de 2010 . [...] secuela [...]
  7. ^ "Estimaciones de las bases de datos SQL más implementadas". SQLite.org . Consultado el 11 de mayo de 2011 .
  8. ^ 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). Presione . pag. 133.ISBN _ 978-1-59059-673-9. Consultado el 30 de diciembre de 2014 .
  9. ^ "Tablas ESTRICTAS".
  10. ^ ab Owens, Michael (2006). La guía definitiva de SQLite . Presione . doi :10.1007/978-1-4302-0172-4_1. ISBN 978-1-59059-673-9.
  11. ^ abc "Usuarios conocidos de SQLite". SQLite . Consultado el 5 de agosto de 2015 .
  12. ^ "Entrevista: Richard Hipp sobre UnQL, un nuevo lenguaje de consulta para bases de datos de documentos". InformaciónQ. 4 de agosto de 2011 . Consultado el 5 de octubre de 2011 .
  13. ^ McCarthy, Kieren. "El creador de SQLite crucificado después de que un código de conducta advirtiera a los desarrolladores que amen a Dios y no maten, cometan adulterio, roben, maldigan..." www.theregister.com . Consultado el 17 de noviembre de 2022 .
  14. ^ "Formato de almacenamiento recomendado por LoC". www.sqlite.org . Consultado el 9 de abril de 2020 .
  15. ^ "SQLite, versión 3". www.loc.gov . 2017-03-28 . Consultado el 9 de abril de 2020 .
  16. ^ "Declaración de formatos recomendados: conjuntos de datos/bases de datos". Biblioteca del Congreso . Consultado el 9 de abril de 2020 .
  17. ^ "SQLite es una base de datos sin configuración". SQLite.org . Consultado el 3 de agosto de 2015 .
  18. ^ "Escribir inicio de sesión anticipado en SQLite 3.7". SQLite.org . 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.
  19. ^ "Usos apropiados de SQLite". SQLite.org . Consultado el 3 de septiembre de 2015 .
  20. ^ "PGCon 2014: Agrupación y VODKA". Lwn.net . Consultado el 6 de enero de 2017 .
  21. ^ "PGCon2014: SQLite: protegido de PostgreSQL". Pgcon.org . 20 de septiembre de 2015 . Consultado el 6 de enero de 2017 .
  22. ^ ab "SQLite: modo estricto". SQLite.org . Consultado el 3 de septiembre de 2015 .
  23. ^ "Historial de versiones de SQLite".
  24. ^ "SQL tal como lo entiende SQLite". SQLite . Consultado el 21 de mayo de 2018 . La búsqueda de un registro con un ID de fila específico, o de todos los registros con ID de fila dentro de un rango específico, es aproximadamente dos veces más rápida que una búsqueda similar realizada especificando cualquier otra CLAVE PRIMARIA o valor indexado.
  25. ^ "SQLite: registro [2494132a]". www.sqlite.org . 2017-11-28. Agregue el comando "PRAGMA table_ipk(TABLE)" para fines de evaluación.
  26. ^ Karwin, Bill (mayo de 2010). Carter, Jacquelyn (ed.). Antipatrones de SQL: evitar los peligros de la programación de bases de datos . La estantería pragmática. pag. 70.ISBN _ 978-1-934356-55-5. A veces se ve 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).
  27. ^ "Lanzamiento de SQLite 3.6.19 el 14 de octubre de 2009". sqlite.org .
  28. ^ Fuente: comentarios de los desarrolladores en el foro SQLite
  29. ^ "La coincidencia de caracteres Unicode que no distingue entre mayúsculas y minúsculas no funciona". Preguntas frecuentes sobre SQLite . Consultado el 3 de septiembre de 2015 .
  30. ^ "Lanzamiento 3.7.4 de SQLite el 8 de diciembre de 2010". SQLite.org. 8 de diciembre de 2010 . Consultado el 3 de septiembre de 2015 .
  31. ^ "Extensiones SQLite FTS3 y FTS4". SQLite.org . Consultado el 3 de septiembre de 2015 .
  32. ^ "Lanzamiento de SQLite 3.8.2 el 6 de diciembre de 2013". SQLite.org. 6 de diciembre de 2013 . Consultado el 3 de septiembre de 2015 .
  33. ^ "La optimización SIN ROWID". SQLite.org . Consultado el 3 de septiembre de 2015 .
  34. ^ "Lanzamiento de SQLite 3.8.3 el 3 de febrero de 2014". SQLite.org. 3 de febrero de 2014 . Consultado el 3 de septiembre de 2015 .
  35. ^ "La extensión JSON1". SQLite.org .
  36. ^ "Límites en SQLite". SQLite.org .
  37. ^ "Reflexiones sobre el diseño del Fossil DVCS". Fossil-scm.org. 12 de julio de 2017 . Consultado el 14 de octubre de 2022 .
  38. ^ "Fossil: rendimiento fósil". Fossil-scm.org. 23 de agosto de 2009 . Consultado el 12 de septiembre de 2009 .
  39. ^ "Shell de línea de comandos para SQLite". SQLite.org . Consultado el 14 de octubre de 2022 .
  40. ^ ab "Cómo se prueba SQLite". SQLite.org . Consultado el 12 de septiembre de 2009 .
  41. ^ "Para utilizar la versión de SQLite instalada con Windows". 20 de octubre de 2022.
  42. ^ "Inicio". Sistema.Data.SQLite . 2016-12-30 . Consultado el 6 de enero de 2017 .
  43. ^ "Controlador ODBC SQLite". Ch-werner.de . 2016-12-01 . Consultado el 6 de enero de 2017 .
  44. ^ "Uso de la base de datos SQLite con OpenOffice.org: versión 2.0" (PDF) . Documentación.openoffice.org . Consultado el 6 de enero de 2017 .
  45. ^ "sqlite - Envoltorios de Sqlite". SQLite.org. 7 de febrero de 2009 . Consultado el 7 de febrero de 2009 .
  46. ^ "Índice de documentación de JavaScript y WebAssembly de sqlite3". SQLite . Consultado el 8 de mayo de 2023 .
  47. ^ "Ubicación del historial de Google Chrome". www.foxtonforensics.com . 2020-10-06 . Consultado el 6 de octubre de 2020 .
  48. ^ "SQLite Manager :: Complementos para Firefox". Complementos.mozilla.org . 2015-02-28. Archivado desde el original el 2 de enero de 2017 . Consultado el 6 de enero de 2017 .
  49. ^ "SQLite Manager: obtenga esta extensión para 🦊 Firefox (en-US)". Complementos.mozilla.org . 2018-07-24 . Consultado el 5 de octubre de 2018 .
  50. ^ "SQLite Reader: obtenga esta extensión para 🦊 Firefox (en-US)". Complementos.mozilla.org . 2018-09-01 . Consultado el 5 de octubre de 2018 .
  51. ^ "Usando SQL para encontrar mi mejor foto de un pelícano según Apple Photo". Blog de Simon Willison . Consultado el 23 de mayo de 2020 .
  52. ^ "Lanzamiento de Audacity 3.0.0". 17 de marzo de 2021 . Consultado el 17 de marzo de 2021 .
  53. ^ Hinegardner, Jeremy (28 de agosto de 2007). "¿Cliente Skype usando SQLite?". usuarios de sqlite (lista de correo). Archivado desde el original el 17 de noviembre de 2007 . Consultado el 14 de junio de 2010 .

Fuentes

enlaces externos