IndexedDB

This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for the proper prefixes to use in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the spec changes.

IndexedDB es una API para el almacenamiento del lado del cliente, de cantidades significativas de datos estructurados y para búsquedas de alto rendimiento en esos datos, usando índices. Mientras DOM Storage es útil para el almacenamiento de pequeñas cantidades de datos, no es útil para almacenar grandes cantidades de datos estructurados. IndexedDB proporciona una solución.

Esta página es básicamente el punto de entrada para la descripción técnica de los objetos de la API. Si necesita algo elemental, debería consultar ;Conceptos básicos acerca de IndexedDB. Para más detalles, vea Usando IndexedDB.

IndexedDB provee APIs separados para un acceso síncrono o asíncrono. El API síncrono está destinado a ser usado únicamente dentro de Web Workers, pero no será implementado aún por cualquier navegador. El API asíncrono trabaja con o sin Web Workers.

API Asíncrono

Los métodos del API Asíncrono, retornan sin bloquear el hilo de llamada. Para obtener un acceso asíncrono a la base de datos, use open() en el atributo indexedDB de un objeto window. Este método retorna un objeto IDBRequest (IDBOpenDBRequest); operaciones asíncronas se comunicarán con la aplicación que llama, disparando eventos en los objetos IDBRequest.

Nota: El objeto indexedDB se prefija en las versiones antiguas de los navegadores (propiedad mozIndexedDB para Gecko < 16, webkitIndexedDB en Chrome, y msIndexedDB en IE 10).

  • IDBFactory provee acceso a la base de datos. Esta es la interface implementada por el objeto global indexedDB y es el punto de entrada para la API.
  • IDBCursor itera sobre los objetos de almacenamiento y de índices.
  • IDBCursorWithValue itera sobre los objetos de almacenamiento y de índices y retorna el valor actual del cursor.
  • IDBDatabase representa una conexión a la base de datos. Es la única manera de realizar una transacción en la base de datos.
  • IDBEnvironment provee acceso a la base de datos, desde el lado del cliente. Está implementada por el objeto window.
  • IDBIndex provee acceso a la metadata de un índice.
  • IDBKeyRange define un rango de claves.
  • IDBObjectStore representa un objeto de almacenamiento.
  • IDBOpenDBRequest representa un requerimiento para abrir una base de datos.
  • IDBRequest provee acceso a los resultados de los requerimientos asíncronos a la base de datos y a los objetos database. Es lo que se obtiene cuando se llama a un método asíncrono.
  • IDBTransaction representa una transacción. Cuando Ud. crea una transacción en la base de datos, especifica el alcance (como a que objetos store desea tener acceso), y determina la clase de acceso (sólo lectura o escritura) que desea tener.
  • IDBVersionChangeEvent indica que la versión de la base de datos ha cambiado.

Una versión anterior de la especificación también define estas -ahora removidas- interfaces. Éstas son documentadas todavía, en caso de que necesite actualizar código escrito previamente:

Hay también una versión sincrónica de la API. La API síncrona no ha sido implementada en cualquier navegador. Está destinada a ser usada con WebWorkers.

Límites de almacenamiento

No existe un límite de tamaño para un elemento simple de la base de datos. Sin embargo, puede haber un límite en el tamaño de cada base de datos IndexedDB. Este límite (y la forma en que la interfaz de usuario la hace valer) puede variar de una navegador a otro:

Ejemplo

Un claro ejemplo para lo que IndexedDB puede ser utilizado en la web, es el ejemplo de Marco Castelluccio, ganador del DevDerby IndexedDB Mozilla. La demostración ganadora fue eLibri, una biblioteca y una aplicación de lectura de libros electrónicos.

Compatibilidad de los navegadores

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
API asíncrono

24.0
11.0 webkit

16.0 (16.0)
4.0 (2.0) moz

10 ms Not supported Not supported
API síncrono
(usado por WebWorkers)
Not supported Not supported
Vea bug 701634
Not supported Not supported Not supported
Característica Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
API síncrono Not supported 6.0 (6.0) moz Not supported Not supported Not supported

Para otra matriz de compatibilidad, vea también: Cuándo puedo usar IndexedDB

También existe la posibilidad de usar IndexedDB en navegadores que soportan WebSQL por el uso de IndexedDB Polyfill.

Ver también

Etiquetas y colaboradores del documento

 Colaboradores en esta página: semptrion, Fjaguero, MPoli
 Última actualización por: semptrion,