Параметры createStore: имя базы и имя хранилища

Idb-keyval предоставляет простой и удобный интерфейс для работы с IndexedDB, абстрагируя большинство сложностей работы с асинхронным хранилищем браузера. Основным инструментом для настройки собственной базы данных является функция createStore, которая позволяет создавать отдельные хранилища с индивидуальными параметрами.

Синтаксис функции createStore

import { createStore } from 'idb-keyval';

const store = createStore(dbName, storeName);
  • dbName — имя базы данных (тип: string), в которой будет создаваться хранилище.
  • storeName — имя конкретного хранилища данных (тип: string) внутри базы.

Оба параметра являются обязательными для явного создания собственного пространства хранения.

Имя базы данных (dbName)

Имя базы определяет, в какой физической базе IndexedDB будут храниться данные. При указании одного и того же имени базы в разных частях приложения данные будут сохраняться в одной базе, что позволяет организовать общие или глобальные настройки.

Особенности:

  • Каждая база данных в IndexedDB уникальна по имени и версии. Если база с указанным именем не существует, idb-keyval создаёт её автоматически.
  • Имя базы должно быть уникальным в контексте домена. Несоблюдение уникальности приведёт к использованию существующей базы.
  • Рекомендуется использовать осмысленные имена, отражающие назначение базы (например, user-settings, app-cache).

Имя хранилища (storeName)

Хранилище (object store) — это логическая коллекция данных внутри базы. С помощью имени хранилища можно разделять различные типы данных в одной базе, избегая конфликтов ключей и обеспечивая структурированное хранение.

Особенности:

  • При создании нового хранилища с уникальным именем оно автоматически добавляется в базу.
  • Повторное использование имени хранилища возвращает ссылку на уже существующее хранилище.
  • Рекомендуется использовать короткие и понятные имена, отражающие тип данных (например, todos, cache, preferences).

Пример использования createStore

import { createStore, set, get, del } from 'idb-keyval';

// Создание собственной базы и хранилища
const userStore = createStore('user-database', 'settings');

// Сохранение значения
set('theme', 'dark', userStore);

// Получение значения
get('theme', userStore).then(value => {
    console.log(value); // 'dark'
});

// Удаление значения
del('theme', userStore);

В данном примере создаётся база user-database с хранилищем settings. Все операции (set, get, del) применяются только к этому хранилищу, не затрагивая другие базы или хранилища.

Принципы работы с несколькими хранилищами

Использование нескольких хранилищ позволяет организовать хранение данных по категориям. Каждое хранилище изолировано друг от друга:

const cacheStore = createStore('app-database', 'cache');
const prefsStore = createStore('app-database', 'preferences');

set('lastFetched', Date.now(), cacheStore);
set('language', 'ru', prefsStore);
  • Изоляция данных: значения одного хранилища не видны в другом.
  • Общее управление базой: несколько хранилищ могут сосуществовать в одной базе, что упрощает управление версионностью и миграциями.

Версионность и обновление хранилища

Idb-keyval автоматически управляет версией базы при добавлении новых хранилищ. Если база уже существует, но указано новое хранилище, IndexedDB увеличивает версию базы и создаёт новый объект store.

Практическое значение:

  • Это позволяет безопасно добавлять новые типы данных без потери существующих значений.
  • Для крупных приложений рекомендуется централизованно управлять версиями баз, чтобы минимизировать вероятность коллизий.

Резюме ключевых моментов

  • dbName определяет физическую базу IndexedDB.
  • storeName создаёт логическое хранилище внутри базы.
  • Использование createStore позволяет разделять данные по категориям и изолировать операции между хранилищами.
  • Новые хранилища автоматически добавляются с обновлением версии базы, существующие возвращаются повторно.

Эффективное применение параметров createStore обеспечивает структурированное, безопасное и удобное хранение данных, упрощает поддержку и масштабирование приложений на JavaScript.