#javascript #indexeddb #dexie
#javascript #indexeddb #dexie
Вопрос:
У меня есть хранилище IndexedDB, содержащее 100 тыс. полей имен. Как отфильтровать его на основе имени, включающего некоторую подстроку?
Я пытался использовать indexeddb getall(), но это привело к увеличению загрузки процессора. Использование курсора для итерации заняло много времени. Пробовал dexie js.
Есть ли какая-нибудь хорошая реализация для выполнения такого рода операций?
Комментарии:
1. Вы индексировали поле name? Индексированный с
filter()
помощью dexie должен работать хорошо
Ответ №1:
Если вы индексируете поле name, вы можете выполнить поиск по префиксу, но обычных индексов недостаточно для поиска по полной подстроке.
const db = new Dexie ('dbname');
db.version(1).stores({things: 'id, name'});
function query(prefix) {
return db.things
.where('name').startsWith(prefix)
.toArray();
}
В этом примере определяется индекс в поле ‘name’, и функция запроса выполнит GetAll() для индекса ‘name’, используя IDBKeyRange, представляющий все имена, начинающиеся с заданной строки.