Idb-keyval — это простая обёртка над IndexedDB, которая позволяет хранить ключи и значения без сложной работы с API. В стандартной конфигурации Idb-keyval использует одно хранилище по умолчанию, однако для сложных приложений часто требуется разделять данные по разным категориям, чтобы избежать конфликтов и повысить читаемость данных. Для этого Idb-keyval предоставляет возможность создавать собственные хранилища.
Хранилище в Idb-keyval определяется через функцию
createStore. Она принимает два параметра:
import { createStore } from 'idb-keyval';
const myStore = createStore('my-database', 'my-store');
Каждое создание хранилища через createStore позволяет
полностью изолировать набор данных, что особенно полезно при работе с
разными модулями приложения.
Все стандартные методы Idb-keyval (get,
set, del, clear,
keys) поддерживают параметр хранилища. Пример
использования:
import { get, set, del, clear, keys } from 'idb-keyval';
// Создание отдельного хранилища
const settingsStore = createStore('app-db', 'settings');
const cacheStore = createStore('app-db', 'cache');
// Добавление данных
await set('theme', 'dark', settingsStore);
await set('userData', { name: 'Alice' }, cacheStore);
// Получение данных
const theme = await get('theme', settingsStore);
const userData = await get('userData', cacheStore);
// Удаление данных
await del('theme', settingsStore);
// Очистка всего хранилища
await clear(cacheStore);
Использование отдельных хранилищ позволяет:
Например, ключ userData в хранилище
settings может содержать одни данные, а в хранилище
cache — другие, и они не будут пересекаться.
При работе с большим приложением можно создать отдельные хранилища для каждого модуля:
const authStore = createStore('app-db', 'auth');
const uiStore = createStore('app-db', 'ui');
const analyticsStore = createStore('app-db', 'analytics');
Это упрощает логику кода:
authStore.uiStore.analyticsStore
для кэширования событий и статистики.Метод keys позволяет получить список всех ключей в
указанном хранилище:
const allKeys = await keys(authStore);
С помощью цикла можно легко извлечь все данные:
for (const key of allKeys) {
const value = await get(key, authStore);
console.log(key, value);
}
Это удобно для резервного копирования или синхронизации данных.
Настройки и кэш: Хранение настроек пользователя отдельно от временных данных кэша.
Мультипользовательские приложения: Для каждого пользователя можно создать отдельное хранилище в одной базе, чтобы изолировать данные.
Модули с разными сроками жизни данных: Например, аналитика может очищаться чаще, чем пользовательские настройки, что упрощается при использовании отдельных хранилищ.
Использование нескольких хранилищ в Idb-keyval обеспечивает гибкость и безопасность данных, позволяя управлять ими на уровне модулей, избегать конфликтов ключей и поддерживать масштабируемость приложения.