EnglishРусский Map

IndexedDB

title
IndexedDB
type
concept
summary
Встроенное в браузер key-value хранилище с индексами, транзакциями и курсорами для клиентских данных
tags
browser, database, javascript, storage
created
2026-04-08
updated
2026-04-08
lang
ru
translation_of
indexeddb
source_updated
2026-04-08
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Встроенное в браузер key-value хранилище с индексами, транзакциями и курсорами. Это основной вариант для хранения больших объёмов структурированных данных на стороне клиента: лимит localStorage составляет около 5 МБ, тогда как IndexedDB может вмещать сотни мегабайт и более в зависимости от браузера и свободного места на диске.

IndexedDB хранит объекты JavaScript (а не строки) в хранилищах объектов (object stores, а не таблицах). У каждого object store может быть несколько индексов для быстрого поиска. Любое чтение и запись требуют транзакций, а сам API полностью асинхронный: изначально он строился на callback'ах, хотя в современном коде его почти всегда оборачивают в промисы.

Индексы и multiEntry

Индекс сопоставляет путь к ключу (key path) в сохраняемых объектах с B-деревом для быстрого поиска. Особенно полезен флаг multiEntry: если установить его для индекса по полю-массиву, IndexedDB создаёт отдельную запись в индексе для каждого элемента массива, а не считает весь массив единым ключом. Фактически получается inverted-index - каждый терм в массиве указывает обратно на содержащий его документ.

full-text-search-indexeddb использует это для организации полнотекстового поиска: заранее токенизированные термы сохраняются в виде поля-массива, индексируются с multiEntry: true, а затем поиск идёт по отдельным термам.

Чего здесь нет

Здесь нет SQL, полнотекстового поиска, join'ов и агрегаций. Если что-то из этого требуется, приходится реализовывать это самостоятельно или брать решения вроде sql.js (SQLite, скомпилированный в WebAssembly). Статья full-text-search-indexeddb показывает, что для простого поиска по токенам возможностей нативных индексов вполне достаточно и подключать более тяжеловесные инструменты не нужно.

Где применяется

Offline-first веб-приложения вроде borogove используют его как основное хранилище данных. Service worker'ы применяют его для кэширования структурированных данных. А библиотеки вроде Dexie.js и idb дают более удобный API поверх низкоуровневого интерфейса IndexedDB.