Безопасно ли принимать тот же порядок в индексе, что и хранилище с одинаковой верхней частью ключа? - PullRequest
0 голосов
/ 31 августа 2018

Итак, у меня есть магазин в indexeddb с составленным keyPath: [someKey, someSubKey]. У меня есть индекс на someKey. Я ищу самый быстрый способ удалить все объекты для данного someKey. Подход, который я пытаюсь использовать, заключается в том, чтобы получить нижний и верхний подразделы индекса, а затем удалить их в хранилище с диапазоном ключей между нижним и верхним подразделами.

Это работает, по крайней мере, в Firefox и Chrome. Но предполагается, что порядок значений в индексе будет таким же, как и в магазине. Мне интересно, это безопасное предположение? Я думаю, что это возможно, поскольку ключевые пути хранения и индекса используют первый ключ, но не могу найти много документации по порядку сортировки. Я бы предпочел не удалять каждую запись по отдельности, поскольку их может быть тысячи.

Псевдокод ниже описывает подход:

const someKeyRange = IDBKeyRange.only(givenSomeKey);
const lowerSubKey = index.openKeyCursor(someKeyRange, "next")
  .primaryKey[1];
const upperSubKey = index.openKeyCursor(someKeyRange, "prev")
  .primaryKey[1]; //1 to get subKey
const storeRange = IDBKeyRange.bound(
  [givenSomeKey, lowerSubKey],
  [givenSomeKey, upperSubKey]
);
store.delete(storeRange);

1 Ответ

0 голосов
/ 31 августа 2018

Порядок ключей определяется здесь:

https://w3c.github.io/IndexedDB/#key-construct

Специально для вашего случая, с ключами массива, они упорядочены по элементам. т.е. если A <<code>B, то [A, ...] <<code>[B, ...].

И да, если бы вы удалили диапазон IDBKeyRange.bound([A], [B], false, true), это удаляло бы что-нибудь с помощью [A, ...]. (Предполагается, что между A и B нет значения. К сожалению, в API нет префиксного диапазона. https://github.com/w3c/IndexedDB/issues/47)

...