IndexedDB
=========

**Experimental:** **Esta es una tecnología experimental**  
Comprueba la Tabla de compabilidad de navegadores cuidadosamente antes de usarla en producción.

IndexedDB es una API de bajo nivel que ofrece almacenamiento en el cliente de cantidades significativas de datos estructurados, incluyendo archivos y blobs. Para búsquedas de alto rendimiento en esos datos usa índices. Mientras DOM Storage (en-US) 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 (en-US). Para más detalles, vea Usando IndexedDB (en-US).

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 (en-US), 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-US)() 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:** 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` (en-US) 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` (en-US) itera sobre los objetos de almacenamiento y de índices.
* `IDBCursorWithValue` (en-US) itera sobre los objetos de almacenamiento y de índices y retorna el valor actual del cursor.
* `IDBDatabase` (en-US) 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` (en-US) provee acceso a la metadata de un índice.
* `IDBKeyRange` (en-US) define un rango de claves.
* `IDBObjectStore` (en-US) representa un objeto de almacenamiento.
* `IDBOpenDBRequest` (en-US) representa un requerimiento para abrir una base de datos.
* `IDBRequest` (en-US) 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` (en-US) 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` (en-US) 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:

* `IDBVersionChangeRequest` representa una solicitud para cambiar la versión de una base de datos. La manera de cambiar la versión de la base de datos ahora es diferente (llamando `IDBFactory.open()` (en-US) sin llamar también a `IDBDatabase.setVersion()` (en-US), y la interfaz `IDBOpenDBRequest` (en-US) tiene ahora la funcionalidad de la eliminada `IDBVersionChangeRequest`.
* `IDBDatabaseException`
Obsoleto
 representa las condiciones de excepción que se pueden encontrar mientras se ejecutan operaciones en la base de datos.

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

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:

* Firefox: no hay límite en el tamaño de una base de datos IndexedDB. La interfaz de usuario solicita permiso para almacenar blobs de más de 50MB. Este límite puede ser modificado mediante la preferencia dom.indexedDB.warningQuota (que está definida en http://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/init/all.js).
* Google Chrome: vea https://developers.google.com/chrome...rage#temporary
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.

Ver también
-----------

* Conceptos básicos acerca de IndexedDB (en-US)
* Usando IndexedDB (en-US)
* Almacenando imágenes y archivos en IndexedDB
* Una lista simple de PENDIENTES usando HTML5 IndexedDB. Nota("Este tutorial está basado en una antigua versión de la especificación y no funciona en los navegadores actualizados. por ejemplo, todavía usa el método actualmente eliminado `setVersion()`.")
* Especificación de la API para Indexed Database
* IndexedDB — El alamcén en su navegador
* Soporte IndexedDB en navegadores
* Ejemplos IndexedDB
* IndexedDB Polyfill para navegadores que sólo soportan WebSQL (p.e. mobile WebKit)
* JQuery IndexedDB plugin