Как можно отфильтровать 100 тыс. записей в IndexedDB?

#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, представляющий все имена, начинающиеся с заданной строки.