Hola, tenemos la respuesta a lo que andabas buscando, deslízate y la obtendrás a continuación.
IndexedDB es una API de bajo nivel para el almacenamiento en el lado del cliente de cantidades significativas de datos estructurados, incluidos archivos / blobs. Esta API utiliza índices para permitir búsquedas de alto rendimiento de estos datos. Si bien el almacenamiento web es útil para almacenar cantidades más pequeñas de datos, es menos útil para almacenar grandes cantidades de datos estructurados. IndexedDB proporciona una solución. Esta es la página de inicio principal para la cobertura de IndexedDB de MDN; aquí proporcionamos enlaces a las guías de uso y referencia de API completas, detalles de soporte del navegador y alguna explicación de key conceptos.
Nota: Esta función está disponible en Web Workers.
Nota: La API IndexedDB es poderosa, pero puede parecer demasiado complicada para casos simples. Si prefiere una API simple, pruebe las bibliotecas de la sección Consulte también que hacen que IndexedDB sea más fácil de usar para los programadores.
Conceptos y uso clave
IndexedDB es un sistema de base de datos transaccional, como un RDBMS basado en SQL. Sin embargo, a diferencia de los RDBMS basados en SQL, que utilizan tablas de columnas fijas, IndexedDB es una base de datos orientada a objetos basada en JavaScript. IndexedDB le permite almacenar y recuperar objetos que están indexados con un key; se pueden almacenar todos los objetos admitidos por el algoritmo de clonación estructurada. Debe especificar el esquema de la base de datos, abrir una conexión a su base de datos y luego recuperar y actualizar los datos dentro de una serie de actas.
- Lea más sobre los conceptos detrás de IndexedDB.
- Aprenda a usar IndexedDB de forma asincrónica desde los primeros principios con nuestra guía Uso de IndexedDB.
- Combine IndexedDB para almacenar datos fuera de línea con Service Workers para almacenar activos fuera de línea, como se describe en Hacer que las PWA funcionen sin conexión con los trabajadores del servicio.
Nota: Como la mayoría de las soluciones de almacenamiento web, IndexedDB sigue un política del mismo origen. Entonces, si bien puede acceder a los datos almacenados dentro de un dominio, no puede acceder a los datos en diferentes dominios.
Sincrónico y asincrónico
Las operaciones realizadas con IndexedDB se realizan de forma asincrónica, para no bloquear aplicaciones. IndexedDB originalmente incluía API síncronas y asincrónicas. La API síncrona estaba pensada para usarse solo con Web Workers, pero se eliminó de la especificación porque no estaba claro si era necesaria. Sin embargo, la API síncrona puede reintroducirse si hay suficiente demanda por parte de los desarrolladores web.
Límites de almacenamiento y criterios de desalojo
Hay una serie de tecnologías web que almacenan datos de un tipo u otro en el lado del cliente (es decir, en su disco local). IndexedDB es el que se habla más comúnmente. El proceso mediante el cual el navegador calcula cuánto espacio asignar al almacenamiento de datos web y qué eliminar cuando se alcanza ese límite no es simple y difiere entre los navegadores. Los límites de almacenamiento del navegador y los criterios de desalojo intentan explicar cómo funciona esto, al menos en el caso de Firefox.
Interfaces
Para obtener acceso a una base de datos, llame open()
sobre el indexedDB
attribute de un objeto de ventana. Este método devuelve un IDBRequest
objeto; Las operaciones asincrónicas se comunican con la aplicación que llama disparando eventos en IDBRequest
objetos.
Conectarse a una base de datos
IDBEnvironment
- Proporciona acceso a la funcionalidad IndexedDB. Es implementado por el
window
yworker
objetos. Esta interfaz no forma parte de la especificación 2.0. IDBFactory
- Proporciona acceso a una base de datos. Esta es la interfaz implementada por el objeto global
indexedDB
y, por tanto, es el punto de entrada de la API. IDBOpenDBRequest
- Representa una solicitud para abrir una base de datos.
IDBDatabase
- Representa una conexión a una base de datos. Es la única forma de obtener una transacción en la base de datos.
Recuperar y modificar datos
IDBTransaction
- Representa una transacción. Usted crea una transacción en una base de datos, especifica el alcance (por ejemplo, a qué almacenes de objetos desea acceder) y determina el tipo de acceso (solo lectura o lectura y escritura) que desea.
IDBRequest
- Interfaz genérica que maneja las solicitudes de la base de datos y brinda acceso a los resultados.
IDBObjectStore
- Representa un almacén de objetos que permite el acceso a un conjunto de datos en una base de datos IndexedDB, consultados a través de key.
IDBIndex
- También permite el acceso a un subconjunto de datos en una base de datos IndexedDB, pero utiliza un índice para recuperar los registros en lugar del principal. key. A veces, esto es más rápido que usar
IDBObjectStore
. IDBCursor
- Itera sobre índices y almacenes de objetos.
IDBCursorWithValue
- Itera sobre almacenes e índices de objetos y devuelve el valor actual del cursor.
IDBKeyRange
- Define un key rango que se puede utilizar para recuperar datos de una base de datos en un rango determinado.
IDBLocaleAwareKeyRange
Esta API no se ha estandarizado.- Define un key rango que se puede usar para recuperar datos de una base de datos en un rango determinado, ordenados de acuerdo con las reglas de la configuración regional especificada para un índice determinado (consulte
createIndex()
Parámetros opcionales). Esta interfaz no forma parte de la especificación 2.0.
Interfaces de eventos personalizados
Esta especificación activa eventos con la siguiente interfaz personalizada:
IDBVersionChangeEvent
- los
IDBVersionChangeEvent
interfaz indica que la versión de la base de datos ha cambiado, como resultado de unaIDBOpenDBRequest.onupgradeneeded
función de controlador de eventos.
Interfaces obsoletas
Una versión anterior de la especificación también definía las siguientes interfaces, ahora eliminadas. Todavía están documentados en caso de que necesite actualizar el código escrito anteriormente:
IDBVersionChangeRequest
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Representa una solicitud para cambiar la versión de una base de datos. La forma de cambiar la versión de la base de datos ha cambiado desde entonces (llamando
IDBFactory.open
sin llamar tambiénIDBDatabase.setVersion
) y la interfazIDBOpenDBRequest
ahora tiene la funcionalidad de la eliminadaIDBVersionChangeRequest
. IDBDatabaseException
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Representa las condiciones de excepción que se pueden encontrar al realizar operaciones de base de datos.
IDBTransactionSync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBTransaction
. IDBObjectStoreSync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBObjectStore
. IDBIndexSync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBIndex
. IDBFactorySync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBFactory
. IDBEnvironmentSync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBEnvironment
. IDBDatabaseSync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBDatabase
. IDBCursorSync
Esta API obsoleta ya no debería usarse, pero probablemente seguirá funcionando.- Sincronizar versión de
IDBCursor
.
Ejemplos de
- eLibri: Una potente aplicación de biblioteca y lector de libros electrónicos, escrita por Marco Castelluccio, ganador del IndexedDB Mozilla DevDerby.
- Notificaciones de tareas pendientes (ver ejemplo en vivo): La aplicación de referencia para los ejemplos en los documentos de referencia.
- Almacenamiento de imágenes y archivos en IndexedDB
Especificaciones
Especificación | Estado | Comentario |
---|---|---|
API de base de datos indexada 2.0 | Recomendación | |
API de base de datos indexada 2.0 | Recomendación | Definición inicial |
Ver también
- localForage: Un Polyfill que proporciona una sintaxis simple de nombre: valor para el almacenamiento de datos del lado del cliente, que usa IndexedDB en segundo plano, pero recurre a WebSQL y luego a localStorage en navegadores que no admiten IndexedDB.
- Dexie.js: Un contenedor para IndexedDB que permite un desarrollo de código mucho más rápido a través de una sintaxis simple y agradable.
- ZangoDB: Una interfaz similar a MongoDB para IndexedDB que admite la mayoría de las funciones familiares de filtrado, proyección, clasificación, actualización y agregación de MongoDB.
- JsStore: Un contenedor IndexedDB con sintaxis similar a SQL.
- MiniMongo: Un mongodb en memoria del lado del cliente respaldado por almacenamiento local con sincronización del servidor a través de http. MiniMongo es utilizado por MeteorJS.
- PouchDB: Una implementación del lado del cliente de CouchDB en el navegador usando IndexedDB
- idb: Una biblioteca pequeña (~ 1.15k) que en su mayoría refleja la API IndexedDB, pero con pequeñas mejoras que marcan una gran diferencia en la usabilidad.
- idb-keyval: Un almacén de valores de claves basado en promesas súper simple y pequeño (~ 600B) implementado con IndexedDB
- sifrr-almacenamiento: Una pequeña biblioteca basada en promesas (~ 2kB) para el lado del cliente key-Almacenamiento de valores. Funciona con IndexedDB, localStorage, WebSQL, Cookies. Puede utilizar automáticamente el almacenamiento compatible disponible según la prioridad.
- tierra de amor: Lovefield es una base de datos relacional para aplicaciones web. Escrito en JavaScript, funciona en varios navegadores. Proporciona API similares a SQL que son rápidas, seguras y fáciles de usar.
Si te sientes impulsado, tienes la opción de dejar una noticia acerca de qué te ha parecido este escrito.