2017-02-15 4 views
0

Я работаю над компонентом таблицы данных/сетки, который поддерживает сортировку, фильтрацию, бесконечную прокрутку и т. Д. Я изучаю замену моей существующей модели данных на IndexedDB (используя Dexie).IndexedDB как бэкэнд для веб-компонента таблицы данных

Мой первоначальный план был использовать один дб и имеют «стол» для каждого компонента. Однако, прочитав документацию, я понял, что каждый раз, когда добавляется новая таблица, значение версии db будет расти.

Что это значит?

  • Нужно ли отслеживать этот номер версии?
  • Если сетка использует db, а другая сетка обновляет db, будут ли данные потеряны?
  • Лучше ли использовать БД на компонент?

Спасибо за любую помощь

ответ

1

Это правда, что схема IndexedDB является довольно статичным. Всякий раз, когда вы должны изменить его, ему нужно будет закрыть все существующие подключения, которые могут перегружать другие вкладки при загрузке вашего приложения. Если все экземпляры вашего приложения ведут себя одинаково - это близко и возобновляет свою базу данных динамически всякий раз, когда происходит событие «changechange». Это было бы возможно. Однако длительные транзакции будут блокировать его до обновления, пока они не будут выполнены.

Мне любопытно, что вы пытаетесь выполнить. Я полагаю, вы хотите использовать индексированные индексы для сортировки и подкачки/прокрутки. Но неясно, есть ли у вас конкретная модель или если ваш компонент будет общим или адаптируется к любой модели/схеме.

Если ваша модель является конкретной, а ваши компоненты предназначены для приложения конечного пользователя. Вы можете моделировать это статически, используя Dexie (db.version (1) .stores (...)). Но по мере того, как вы ставите этот вопрос, я предполагаю, что вы хотите создать общий компонент, вопрос в том, нужно ли вам определять схему внутри вашего компонента или, скорее, позволить пользователю этого определить это и позволить вашему компоненту адаптироваться к существующим базам данных. Например, пользователь вашего компонента может захотеть определить базу данных и использовать ваш компонент в качестве средства просмотра данных. Ваш компонент может принимать входные аргументы, например:

(databaseName, tableName, columns) 

Вы можете создание экземпляр Dexie без указания схемы и вместо того, чтобы просто открыть существующую базу данных:

var db = new Dexie(databaseName); 
// Don't specify version() - open dynamically! 
db.open().then(db => { 
    var table = db.table(tableName); 
    var indexedColumns = table.schema.indexes.map(idx => idx.keyPath); 
    if (table.schema.primKey.keyPath) 
     indexedColumns.unshift(table.schema.primKey.keyPath); 
    } 
    // Here you can render your columns. 
    // For each column that also exists in indexedColumns, you can 
    // orderBy() or put queries based on it. 
}); 

Похожих Документов

+0

Спасибо за этот подробный ответ! Компоненты сетки действительно являются общими. Для каждого экземпляра пользователь должен предоставить определения столбцов (ключ, тип, сортируемый, фильтруемый), прежде чем предоставлять ему какие-либо данные.Однако наши приложения имеют динамические макеты, и пользователи могут добавлять/удалять компоненты «на лету», поэтому эти «версии» беспокоят меня. Используя вышеприведенный подход, смогу ли я добавлять/удалять таблицы или мне еще нужно будет определить для него новую версию? – Dogoku

+0

Чтобы добавить новую таблицу в существующую базу данных, вам необходимо обновить базу данных. Но если вы создадите новую базу данных, а не новую таблицу, это не будет применяться. –

Смежные вопросы