IndexedDB API: Lleva el almacenamiento web a otro nivel

| Última modificación: 6 de junio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Buscas una manera eficiente de gestionar grandes cantidades de datos en el lado del cliente? La API de IndexedDB puede ser la solución perfecta. En esta guía, te mostraremos cómo usar IndexedDB para llevar el almacenamiento web a otro nivel, proporcionándote una manera robusta de manejar datos estructurados en tus proyectos web.

IndexedDB API

¿Qué es IndexedDB?

IndexedDB es una API de bajo nivel para el almacenamiento de grandes cantidades de datos estructurados en el lado del cliente, incluyendo archivos y blobs. A diferencia de Web Storage, que es útil para almacenar pequeñas cantidades de datos, IndexedDB está diseñado para manejar volúmenes más grandes y complejos. Utiliza índices para permitir búsquedas de alto rendimiento en estos datos, haciéndolo ideal para aplicaciones que requieren acceso rápido y eficiente a grandes conjuntos de datos.

Características principales de IndexedDB

IndexedDB funciona como un sistema de base de datos transaccional, similar a un Sistema de Gestión de Bases de Datos Relacionales (RDBMS) basado en SQL. Sin embargo, a diferencia de estos sistemas, que usan tablas de columnas fijas, IndexedDB es una base de datos orientada a objetos basada en JavaScript. Esto significa que puedes almacenar y recuperar objetos que se indexan con una clave, y cualquier objeto compatible con el algoritmo de clonación estructurada puede ser almacenado.

Conceptos clave de IndexedDB

  • Transaccional: Todas las operaciones en IndexedDB se realizan dentro de transacciones, lo que asegura la integridad y consistencia de los datos.
  • Orientada a objetos: A diferencia de las bases de datos SQL, IndexedDB almacena datos como objetos JavaScript.
  • Asincrónica: Las operaciones se realizan de manera asincrónica para no bloquear las aplicaciones.

¿Cómo empezar con IndexedDB?

Conectarse a una base de datos

Para acceder a una base de datos, se utiliza el método open() en la propiedad indexedDB del objeto window. Este método devuelve un objeto IDBOpenDBRequest.

let request = indexedDB.open('miBaseDeDatos', 1);

request.onsuccess = function(event) {
    let db = event.target.result;
    console.log('Conexión exitosa a la base de datos', db);
};

request.onerror = function(event) {
    console.error('Error al conectar a la base de datos', event);
};

Crear y modificar datos

Para almacenar y recuperar datos, se utilizan transacciones y almacenes de objetos (object stores). Aquí tienes un ejemplo básico de cómo añadir datos a un almacén de objetos:

let db;
let request = indexedDB.open('miBaseDeDatos', 1);

request.onupgradeneeded = function(event) {
    db = event.target.result;
    let objectStore = db.createObjectStore('miObjeto', { keyPath: 'id' });
    objectStore.createIndex('nombre', 'nombre', { unique: false });
};

request.onsuccess = function(event) {
    db = event.target.result;
    let transaction = db.transaction(['miObjeto'], 'readwrite');
    let objectStore = transaction.objectStore('miObjeto');
    let addRequest = objectStore.add({ id: 1, nombre: 'Juan', edad: 30 });

    addRequest.onsuccess = function(event) {
        console.log('Datos añadidos correctamente');
    };

    addRequest.onerror = function(event) {
        console.error('Error al añadir datos', event);
    };
};

Operaciones comunes en IndexedDB

Leer datos

Para leer datos de un almacén de objetos, se utiliza el método get:

let transaction = db.transaction(['miObjeto']);
let objectStore = transaction.objectStore('miObjeto');
let getRequest = objectStore.get(1);

getRequest.onsuccess = function(event) {
    console.log('Datos recuperados:', event.target.result);
};

getRequest.onerror = function(event) {
    console.error('Error al leer datos', event);
};

Actualizar datos

🔴 ¿Quieres entrar de lleno al mundo DevOps & Cloud Computing? 🔴

Descubre el DevOps & Cloud Computing Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en DevOps & Cloud Computing por una semana

Para actualizar datos, se usa el método put dentro de una transacción de escritura:

let transaction = db.transaction(['miObjeto'], 'readwrite');
let objectStore = transaction.objectStore('miObjeto');
let putRequest = objectStore.put({ id: 1, nombre: 'Juan', edad: 31 });

putRequest.onsuccess = function(event) {
    console.log('Datos actualizados correctamente');
};

putRequest.onerror = function(event) {
    console.error('Error al actualizar datos', event);
};

Eliminar datos

Para eliminar datos, se usa el método delete:

let transaction = db.transaction(['miObjeto'], 'readwrite');
let objectStore = transaction.objectStore('miObjeto');
let deleteRequest = objectStore.delete(1);

deleteRequest.onsuccess = function(event) {
    console.log('Datos eliminados correctamente');
};

deleteRequest.onerror = function(event) {
    console.error('Error al eliminar datos', event);
};

Beneficios de usar IndexedDB

  • Alto rendimiento: Indexed DB está diseñado para manejar grandes cantidades de datos de manera eficiente. Utiliza índices para realizar búsquedas rápidas y optimizadas, lo que es ideal para aplicaciones que requieren un acceso rápido a datos complejos.
  • Flexibilidad: Al ser una base de datos orientada a objetos, Indexed DB te permite almacenar y manipular objetos JavaScript directamente. Esto elimina la necesidad de transformar datos entre diferentes formatos, simplificando el proceso de desarrollo.
  • Persistencia de datos: Los datos almacenados en IndexedDB persisten entre sesiones del navegador, lo que significa que los usuarios pueden cerrar su navegador y regresar más tarde sin perder sus datos. Esto es crucial para aplicaciones que necesitan mantener el estado del usuario.
  • Seguridad: Indexed DB sigue la política de mismo origen, lo que significa que solo las páginas del mismo dominio pueden acceder a los datos almacenados. Esto proporciona un nivel adicional de seguridad y aislamiento de datos.

La API de Indexed DB es una herramienta poderosa para cualquier desarrollador web que necesite almacenar y gestionar grandes cantidades de datos en el cliente. Con su capacidad de manejar operaciones asincrónicas, almacenar objetos complejos y proporcionar un alto rendimiento, IndexedDB lleva el almacenamiento web a otro nivel. Si quieres dominar herramientas como esta y transformar tu carrera en el sector tecnológico, ¡apúntate al Bootcamp en DevOps & Cloud computing de KeepCoding! Este programa intensivo te dará las habilidades necesarias para sobresalir en una industria en constante crecimiento, con altos salarios y una estabilidad laboral que pocos sectores pueden ofrecer.

Xoán Mallón

Senior DevOps Engineer en Zscaler & Coordinador del Bootcamp DevOps & Cloud Computing.

Posts más leídos

¡CONVOCATORIA ABIERTA!

DevOps & Cloud Computing

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado