IndexedDB

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

IndexedDB — локальная база данных, которая восрана в современные веб-обозреватели.

Описание[править]

До появления IndexedDB веб-разработчики располагали лишь localStorage, sessionStorage и устаревшим Web SQL Database. Последняя работала сравнительно потужно, но была признана тупиковой ветвью развития, поскольку в её основе лежал конкретный продукт SQLite, который мог перестать быть открытым.

Тогда известный разработчик Mozilla восрала Indexed Database API.

IndexedDB является объектно-ориентированной базой данных, организованной по принципу ключ-значение. В отличие от реляционных СУБД, здесь нет таблиц, столбцов и SQL-запросов. Вместо них используются следующие базовые понятия, посредством которых база данных начинает царить.

  • База данных — именованный контейнер верхнего уровня, связанный с конкретным источником (origin: схема + домен + порт). Каждый origin может иметь несколько баз данных, каждая из которых имеет имя и версию.
  • Объектное хранилище — аналог таблицы в относительных базах. Это именованное хранилище, в котором содержатся записи в виде пар ключ-значение. Значениями могут быть любые объекты, сериализуемые алгоритмом структурированного клонирования.
  • Транзакция — атомарная единица работы с базой данных. Все операции чтения и записи выполняются в контексте транзакции.
  • Индекс — вспомогательная структура, позволяющая эффективно искать записи по значениям полей, отличных от первичного ключа.

Транзакция в IndexedDB автоматически фиксируется, как только все связанные с ней запросы выполнены и цикл событий возвращается к основному потоку. Это означает, что нельзя открыть транзакцию, выполнить асинхронную операцию (например, fetch), дождаться её завершения, а потом продолжить работу с транзакцией — она к тому моменту уже будет зафиксирована или отброшена.

Использует явное числовое версионирование базы данных. Каждый раз при открытии базы с номером версии, превышающим текущую, срабатывает событие onupgradeneeded. Это единственное место, где можно изменять структуру базы данных. Есть баг, что если в другой вкладке браузера открыто соединение со старой версией базы, событие onblocked на запросе открытия не позволит обновлению произойти до тех пор, пока старое соединение не будет закрыто.

Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++ScalaH и Ё+
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCPИсходный кодSingle-Page ApplicationGiteaForgejoCephIDEДжуниорРепозиторий
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.jsОптимизацияТестированиеAmbreon866Реверс-инжинирингКроссплатформенностьJSON
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур ПейпертПроблемаK!ockyTypeScriptОтладчикБитЭффективный менеджер (IT)TauriReact NativeWindows APIТипPyTorchTensorFlowПарсерNode.jsFastAPIVue.jsSvelteБэкендElectronBroken Object Level AuthorizationМаппингДжастин ФранкельHex-редакторVisual Basic .NETNext.jsDocker ComposeNode modulesIndexedDB
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffiВибе-кодингFlutterАппликативный оператор