Comenzando con indexeddb

Visión general

IndexedDB es una API de bajo nivel para el almacenamiento del 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 pequeñas cantidades de datos, es menos útil para almacenar grandes cantidades de datos estructurados. El estándar IndexedDB se creó para habilitar el almacenamiento y la recuperación escalables y eficaces de objetos Javascript en un navegador.

Lo esencial

indexedDB está diseñado para almacenar objetos literales de Javascript como {prop1 : value, prop2 : value}. Además, las implementaciones más recientes admiten el almacenamiento de objetos binarios grandes (BLOB), como imágenes, archivos de audio y archivos de video. Además, indexedDB puede almacenar objetos que contienen otros objetos (objetos anidados), como {prop1 : value, prop2 : {nestedprop1 : value, nestedprop2 : value}}.

Los siguientes son algunos conceptos básicos:

  • Base de datos: un contenedor de almacenes e índices de objetos. Cada base de datos tiene un nombre y una versión.
  • Tienda de objetos: un contenedor de objetos. Esto es análogo a una tabla en una base de datos relacional. En indexedDB, los registros corresponden a objetos de Javascript y las columnas corresponden a propiedades de objetos de Javascript. Los objetos agregados a la tienda se almacenan en el orden agregado. Las consultas contra la tienda recuperan objetos en el mismo orden. Puede insertar, actualizar o eliminar objetos en un almacén de objetos.
  • Índice: un contenedor especial para objetos específicos contenidos dentro de un almacén de objetos. Los índices también son análogos a las tablas y pueden entenderse como almacenes de objetos con restricciones especiales. Cuando un objeto se inserta en un almacén de objetos, si cumple ciertos criterios, también puede insertarse en un almacén de índice correspondiente. Los objetos en un índice se almacenan en un orden definido por el índice. Las consultas contra un índice recuperan objetos en el orden definido por el índice (aunque las consultas se pueden configurar para que funcionen de manera diferente). No puede insertar, actualizar ni eliminar objetos en un índice (solo puede hacerlo indirectamente insertando el objeto en el almacén en el que se basa el índice).
  • Cursor: los cursores son análogos a las consultas. Un cursor itera sobre los objetos en un almacén de objetos o en un índice. Los cursores pueden avanzar o retroceder, buscar (saltar o avanzar más allá de los objetos) y saltar al objeto ‘único’ siguiente o anterior en el almacén/índice subyacente.
  • Ruta de clave: las rutas de clave son análogas a las claves primarias (o claves primarias compuestas) de una tabla en una base de datos relacional. En el caso general, cuando le indica a indexedDB que cree un almacén de objetos en una base de datos particular, también define la ruta de la clave para el almacén. Puede usar la ruta de la clave para obtener rápidamente un objeto en particular, que es similar a usar una clave principal para seleccionar un registro en una tabla relacional. Opcionalmente, puede usar claves para asegurarse de que los intentos posteriores de insertar un objeto en un almacén de objetos que ya contiene un objeto con la misma clave produzcan un error.
  • Transacciones y solicitudes: las solicitudes son análogas a las consultas SQL individuales. Existen métodos API específicos para insertar un objeto, eliminar un objeto, actualizar un objeto e iterar sobre uno o más objetos. Cada llamada de método corresponde a una sola solicitud. Cada solicitud ocurre dentro del contexto de una transacción. En otras palabras, pueden ocurrir múltiples solicitudes en una transacción. Las solicitudes individuales pueden fallar por una variedad de razones. Cuando se realizan varias solicitudes en una sola transacción, las solicitudes no se confirman por completo hasta que todas las solicitudes se consideran exitosas. De esta manera, si ocurre un problema en una solicitud posterior, la transacción completa se puede “revertir” para que el estado del almacén de objetos subyacente sea el mismo que antes de que ocurriera la primera solicitud en la transacción.

Asíncrono vs Sincronizado

La API Javascript de indexedDB utiliza técnicas asincrónicas. Al interactuar directamente con la API, y no con una biblioteca de terceros de nivel superior, la API requiere el uso de devoluciones de llamada de Javascript. El diseño asincrónico ayuda a evitar que las operaciones de procesamiento de datos más grandes bloqueen el subproceso principal de Javascript, lo que ayuda a evitar que la interfaz de usuario (lo que ve en el navegador) aparezca congelada, entrecortada o con retraso.

Apoyo

Visite http://caniuse.com/#feat=indexeddb.

Aprende más

Instalación o configuración

Instrucciones detalladas sobre cómo configurar o instalar indexeddb.

Esquema de base de datos indexado

Esquema IndexedDB

Como se puede ver en la imagen de arriba, en una sola aplicación podemos crear:

  • Múltiples bases de datos
  • Cada base de datos puede tener múltiples almacenes de objetos (tablas)
  • Cada tienda de objetos puede haber almacenado múltiples objetos

Descripción general de la solicitud de base de datos indexada

ingrese la descripción de la imagen aquí

Como se puede ver en la imagen de arriba, en la base de datos indexada para acceder a los datos que necesita tener:

  1. Abra una conexión a la base de datos deseada
  2. Abra una transacción que pueda ser de solo lectura o de lectura y escritura
  3. Abra un cursor o índice que se puede usar para filtrar los datos
  4. En la solicitud del cursor: en caso de éxito, puede acceder a sus datos