Библиотека Idb-keyval предоставляет удобный интерфейс для работы с IndexedDB в браузере, позволяя хранить и извлекать данные с минимальным количеством кода. Одним из важных аспектов является управление ключами и возможность перемещения данных между различными хранилищами. Ключи в Idb-keyval выступают идентификаторами значений, и грамотное управление ими обеспечивает гибкость и безопасность хранения информации.
Idb-keyval не предоставляет встроенной функции для прямого переименования ключа. Чтобы изменить ключ, необходимо выполнить последовательность операций:
get.set.del.Пример пошагового кода:
import { get, set, del } from 'idb-keyval';
async function renameKey(oldKey, newKey) {
const value = await get(oldKey);
if (value !== undefined) {
await set(newKey, value);
await del(oldKey);
}
}
Особенности:
undefined не сохраняется в IndexedDB, поэтому
проверка на undefined обязательна.get и set возвращают промисы, что
позволяет использовать await для упрощения асинхронного
кода.Idb-keyval позволяет создавать отдельные хранилища через класс
Store. Каждое хранилище может находиться в одной базе
IndexedDB или в отдельной, что удобно для разделения данных по
логическим категориям.
Создание нового хранилища:
import { Store, get, set, del } from 'idb-keyval';
const storeA = new Store('databaseA', 'storeA');
const storeB = new Store('databaseB', 'storeB');
Перемещение данных из одного хранилища в другое осуществляется аналогично переименованию ключей:
async function moveKeyBetweenStores(key, sourceStore, targetStore) {
const value = await get(key, sourceStore);
if (value !== undefined) {
await set(key, value, targetStore);
await del(key, sourceStore);
}
}
Особенности:
Для сценариев с большим количеством ключей можно комбинировать
функции keys(), get(), set() и
del().
Пример: массовое перемещение всех ключей, начинающихся с префикса
user_:
import { keys, get, set, del } from 'idb-keyval';
async function moveKeysWithPrefix(prefix, sourceStore, targetStore) {
const allKeys = await keys(sourceStore);
for (const key of allKeys) {
if (key.startsWith(prefix)) {
const value = await get(key, sourceStore);
await set(key, value, targetStore);
await del(key, sourceStore);
}
}
}
Особенности:
for...of с await
обеспечивает последовательное выполнение операций.Promise.all, но нужно учитывать лимиты браузера на
параллельные транзакции IndexedDB.get.set.del.Такая структура операций обеспечивает гибкое и безопасное управление ключами в любых приложениях, использующих Idb-keyval.