IndexedDB es una interfaz de programación de aplicaciones ( API ) de JavaScript para el almacenamiento del lado del cliente de grandes cantidades de datos estructurados, incluidos archivos / blobs . En otras palabras, es un almacén de datos NoSQL en formato JSON dentro del navegador . El estándar fue desarrollado por el W3C e implementado en los navegadores desde 2011. [una]
Se agregó soporte para IndexedDB en Firefox versión 4, [2] Google Chrome versión 11, [3] e Internet Explorer versión 10. [4] Safari eventualmente agregó soporte en la versión 8. [5]
La base de datos Web SQL fue una API predecesora desarrollada por Apple . [6] Pero Mozilla se opuso a su estandarización porque no se ofrecían alternativas al motor SQLite . [7] [8] Como tal, ha quedado en desuso a favor de IndexedDB .
En la base de datos , los sitios de IndexedDB pueden almacenar y leer permanentemente los datos de almacenamiento del cliente. Cada dominio tiene su propia área de almacenamiento, el acceso a los datos almacenados en otro dominio no se proporciona de acuerdo con la Política del mismo origen . La cantidad de memoria disponible varía según el navegador, generalmente hay un límite fijo que no se puede exceder y un límite flexible a partir del cual el usuario primero debe aceptar el almacenamiento. [9] En principio, el almacenamiento es permanente, pero los navegadores ofrecen a sus usuarios la opción de eliminar los datos almacenados. [diez]
Una base de datos es una base de datos de objetos, normalmente objetos JavaScript almacenados, con una de las entradas como clave, con la que recuperar los datos. También se pueden crear índices en otras entradas de objetos almacenados para permitir búsquedas eficientes.
El acceso a la base de datos es asíncrono: el cliente realiza una solicitud y registra funciones de devolución de llamada. Tan pronto como se conozca el resultado de la solicitud, se le informará de la misma y, en caso de éxito, se le facilitarán los datos solicitados, en caso de error, el motivo. Al acceder, las transacciones se utilizan para garantizar la coherencia de los datos, incluso si, por ejemplo, dos pestañas abiertas simultáneamente tienen acceso independiente a la base de datos.
La implementación exacta de la base de datos no es fija, sin embargo, es un árbol B. Todos los navegadores modernos admiten el estándar, ya que está en constante evolución, no siempre en la versión actual. En los navegadores de Microsoft, la interfaz solo está parcialmente implementada. [10] Las versiones anteriores de la API del navegador todavía tienen un prefijo parcial del desarrollador. [once]
El almacenamiento web es una alternativa mucho más simple al almacenamiento de datos, pero con menos funciones, diseñada para una pequeña cantidad de datos.
Un estándar alternativo, que es una base de datos a la que se puede acceder a través de consultas SQL , fue Web SQL . Sin embargo, este estándar solo se implementó en algunos navegadores, por lo que se suspendió a favor de IndexedDB . [12]
En navegadores más antiguos , IndexedDB se puede modelar con polyfills . [13]