Dexie.js получение результатов надлежащим образом

#dexie

#dexie

Вопрос:

Мой вопрос касается подхода к данным. Допустим, у меня есть таблица из 700 записей файлов и некоторые данные для них, такие как дата, имя и т.д. Пример:

 {
blob:....,
name:'Name',
date:'13-11-2020',
type:'text/html'
....
}
  

Теперь я хочу выполнить некоторую сортировку, фильтрацию и разбивку на страницы в приложении spa, таком как vue.
Лучше ли делать db.files.Собрать (COSTOMFILTER, РАЗБИВКА на страницы, функция сортировки) и вернуться к просмотру или получить все данные в массив и отсортировать их там? список = ожидание db.files.toArray() .

Также возможно ли ограничить возвращаемые элементы? например, я не хочу, чтобы blob в моих возвращаемых элементах. НЕТ Blob { name:’Имя’, дата:’13-11-2020′, тип:’текст / html’ …. } Или возвращать ответ, просто указывая на большой двоичный объект в памяти? Я спрашиваю, потому что файлы могут быть большими. Спасибо за ответ.

Ответ №1:

Что касается сочетания сортировки, фильтрации и разбивки на страницы, то нет никаких указаний на то, как к этому подойти. Обычно:

  • попытайтесь выжать все возможное, используя составной индекс для объединения фильтрации нескольких полей и упорядочения.
  • В случае, если набор данных огромен, а страницы маленькие, но невозможно объединить фильтрацию и порядок в индексе, рассмотрите возможность использования индекса только для сортировки и выполните фильтрацию поверх этого. Смотрите некоторые подсказки на этой странице.

Что касается вашего другого вопроса о выборе полей: в IndexedDB можно выбирать только целые объекты (коллекция.toArray()) или просто первичные ключи (Collection.PrimaryKeys()) — не определенные свойства. Однако большие двоичные объекты немного особенные: они (или, по крайней мере, должны быть) загружены с задержкой, поэтому они не должны истощать память, пока вы не начнете читать из них.

Комментарии:

1. Привет, спасибо за информацию. На данный момент я реализовал как фильтр и разбивку на страницы. Есть ли лучшее решение для «кэширования» части результатов? например, теперь фильтр запускается при каждом изменении разбивки на страницы. ` filesDB = ожидает filesDB.OrderBy(sortOptions). filter((file) => { return _filterElements(file, filters); }); if (isRev !== undefined) { filesDB.reverse(); } const count = ожидает filesDB.count(); filesDB = ожидает filesDB.offset(смещение).limit(разбивка на страницы.Размер страницы). toArray(); возвращает { count: count, filesDB: filesDB };`

2. В Dexie нет кэширования, поэтому вам нужно будет реализовать это самостоятельно