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.