--- title: IndexedDB slug: Web/API/IndexedDB_API tags: - API - Database - NeedsTranslation - Reference - Référence(2) - TopicStub translation_of: Web/API/IndexedDB_API ---
{{DefaultAPISidebar("IndexedDB")}}

IndexedDB — низкоуровневое API для клиентского хранилища большого объема структурированных данных, включая файлы/blobs. Эти API используют индексы для обеспечения высоко-производительного поиска данных. Если DOM Storage  полезен для хранения небольшого количества данных, он менее выгоден для большого числа структурированных данных. IndexedDB предоставляет решение. Это основная страница на MDN, покрывающая IndexedDB — здесь мы предоставляем ссылки к полному списку API и руководствам по использованию, детали поддержки браузерами и некоторые объяснения ключевых концепций.

{{AvailableInWorkers}}

Заметка: IndexedDB API мощные, но могут казаться слишком сложными для простых задач. Если вы предпочитаете простые API, попробуйте библиотеки, такие как localForage, dexie.js и ZangoDB, делающие IndexedDB более дружественным.

Ключевые концепции и  использование

IndexedDB транзакционная система базы данных, как SQL-основанная RDBMS. Однако, в отличие от RDBMS, которая использует таблицы с фиксированными колонками, IndexedDB — JavaScript-основанная объектно-ориентированная база данных. IndexedDB позволяет сохранять и возвращать объекты, которые были проиндексированы с ключом; любой объект, поддерживаемый структурированным алгоритмом клонирования может быть сохранен. Необходимо описать схему базы данных, установить соединение с ней и затем получить и обновить данные за несколько транзакций.

Заметка: Как и большинство решений web-хранения, IndexedDB следует аналогичной same-origin policy. Поэтому вы имеете доступ к хранилищу данных в пределах одного домена, но не можете получать их с любого другого.

Синхронность и асинхронность

Выполнение операций использующих IndexedDB происходит асинхронно, т. е. не блокирует приложение. IndexedDB первоначально включал синхронные и асинхронные API. Синхронные API предназначались только для работы с Web Workers, но были удалены из спецификации, потому что было неясно, нужны ли они. Однако, синхронные API могут быть повторно введены, если появится спрос со стороны веб разработчиков. 

Ограничения памяти и критерии освобождения 

Существует несколько веб-технологий, которые хранят данные того или иного вида на стороне клиента (т.е. на вашем локальном диске). Под IndexedDB чаще всего подразумевают одно. Процесс, в котором браузер вычисляет сколько места нужно выделить для хранения веб-данных. Ограничение памяти браузера и критерии особождения пытаются объяснить как это работает, по крайней мере в случае с Firefox.

Интерфейсы

Чтобы получить доступ к базе данных, вызовите метод  open() y атрибута indexedDB  объекта window. Этот метод возвращает объект {{domxref("IDBRequest")}} ; асинхронные операции связываются с вызывающим приложением, вызывая события объекта {{domxref("IDBRequest")}} .

Подключение к базе данных

{{domxref("IDBEnvironment")}}
Предоставляет доступ к функциям IndexedDB. Реализовано объектами {{domxref("window")}} и {{domxref("worker")}}.
{{domxref("IDBFactory")}}
Предоставляет доступ к базе данных. Этот интерфейс представлен глобальным объектом indexedDB. Он является точкой входа для API.
{{domxref("IDBOpenDBRequest")}}
Представляет запрос на открытие базы данных.
{{domxref("IDBDatabase")}}
Представляет подключение к базе данных. Это единственный способ получить транзакцию в базе данных.

Получение и изменение данных

{{domxref("IDBTransaction")}}
Представляет транзакцию. Вы создаете транзакцию в базе данных, указываете область действия (например, к каким хранилищам объектов вы хотите получить доступ) и определяете тип доступа (только чтение или чтение/запись), который вам нужен.
{{domxref("IDBRequest")}}
Generic interface that handles database requests and provides access to results.
{{domxref("IDBObjectStore")}}
Универсальный интерфейс, который обрабатывает запросы к базе данных и предоставляет доступ к результатам.
{{domxref("IDBIndex")}}
Позволяет получить доступ к подмножеству данных в IndexedDB, но вместо первичного ключа использует индекс для извлечения записи (записей). Иногда это быстрее, чем использование {{domxref("IDBObjectStore")}}.
{{domxref("IDBCursor")}}
Итерирует по хранилищам объектов и индексам.
{{domxref("IDBCursorWithValue")}}
Итерирует по хранилищам объектов и индексам и возвращает текущее значение курсора.
{{domxref("IDBKeyRange")}}
Определяет диапазон ключей, который можно использовать для извлечения данных из базы данных в определенном диапазоне.
{{domxref("IDBLocaleAwareKeyRange")}} {{Non-standard_inline}}
Определяет диапазон ключей, который можно использовать для извлечения данных из базы данных в определенном диапазоне, отсортированных в соответствии с правилами локали, указанной для определенного индекса (см. createIndex()'s optionalParameters.). Этот интерфейс не входит в спецификацию 2.0.

Пользовательские интерфейсы событий

Эта спецификация запускает события со следующим настраиваемым интерфейсом:

{{domxref("IDBVersionChangeEvent")}}
Интерфейс IDBVersionChangeEvent указывает, что версия базы данных изменилась в результате функции обработчика событий {{domxref("IDBOpenDBRequest.onupgradeneeded")}}.

Устаревшие интерфейсы

Ранняя версия спецификации также определяла эти теперь удаленные интерфейсы. Они все еще задокументированы на тот случай, если вам понадобится обновить ранее написанный код:

{{domxref("IDBVersionChangeRequest")}} {{obsolete_inline}}
Представляет запрос на изменение версии базы данных. С тех пор способ изменения версии базы данных изменился (путем вызова {{domxref("IDBFactory.open")}} без вызова {{domxref("IDBDatabase.setVersion")}}), а интерфейс {{domxref("IDBOpenDBRequest")}} теперь имеет функциональность удаленного {{domxref("IDBVersionChangeRequest")}}.
{{domxref("IDBDatabaseException")}}  {{obsolete_inline}}
Представляет исключения, которые могут возникнуть при выполнении операций с базой данных.
{{domxref("IDBTransactionSync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBTransaction")}}.
{{domxref("IDBObjectStoreSync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBObjectStore")}}.
{{domxref("IDBIndexSync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBIndex")}}.
{{domxref("IDBFactorySync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBFactory")}}.
{{domxref("IDBEnvironmentSync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBEnvironment")}}.
{{domxref("IDBDatabaseSync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBDatabase")}}.
{{domxref("IDBCursorSync")}} {{obsolete_inline}}
Синхронная версия {{domxref("IDBCursor")}}.

Примеры

Спецификации

Спецификация Статус Комментарий
{{SpecName('IndexedDB')}} {{Spec2('IndexedDB')}} Initial definition
{{SpecName("IndexedDB 2")}} {{Spec2("IndexedDB 2")}}

Смотрите также