Использование indexeddb в качестве базы данных с несколькими версиями - PullRequest
0 голосов
/ 25 февраля 2020

Сценарий:

Вы создаете лист Excel в 2018. Он имеет таблицы поиска в листах. Давайте назовем эту базу данных версией 1. Пользователь отправляет Excel в качестве идентификатора формы 1. Теперь, в 2019 году, вы обновляете таблицы поиска и публикуете sh новую версию Excel. Теперь это БД версии 2. Пользователь отправляет последний 2019 excel в виде -ID 2.

Теперь попробуйте сделать это в веб-приложении. Мы используем обещания Rule. JS, Formula. JS и JS вместе с индексированными db для mimi c excel-подобных функций. Мы используем indexeddb, чтобы избежать многократных обращений к БД для поиска. Таким образом, только данные STATI C хранятся в indexeddb. Все это работает при работе с последними данными. Моя задача при разработке заключается в том, чтобы сделать это для старых форм, которым, возможно, потребуется использовать старые версии таблиц просмотра db.

Когда вы открываете Form Id 1 в браузере - должна быть загружена Db ver 1.

Когда вы открываете Form Id 2 в браузере - должна быть загружена Db ver 2.

Проблема:

  1. Может ли indexeddb использоваться для загрузки указанной c версии на странице загрузка с использованием indexedDB.open (dbname, ver)?
  2. Можно ли снизить версию indexeddb при загрузке страницы?
  3. Можем ли мы передать версию # в качестве аргумента из JS при загрузке страницы?

Проблема заключается в том, что каждая форма должна извлекать указанную c версию базы данных в зависимости от того, когда она была отправлена. Используя indexedDb, я понимаю, что это перспективная база данных. Таким образом, мы можем обновиться только до более новой версии и не переходить на более раннюю версию. Есть ли способ сделать это с indexeddb или я лаю не то дерево?

Одно из решений, которое я придумал, - создать две таблицы в SQL. 1 фактическая таблица, 1 архивная таблица. Каждый раз, когда данные обновляются, мы перемещаем старые данные в таблицу архива с версией #. Если форма ищет указанную c версию, GetData (lookupvariable, ver #) может выполнить поиск в любой таблице, чтобы найти значение для этой указанной c версии. Таким образом, мне придется в конечном итоге преобразовать все в вызов AJAX и покончить с indexeddb.

1 Ответ

0 голосов
/ 25 февраля 2020

Хранилище данных IDB с именем foo будет иметь одинаковые данные независимо от версии. Поэтому, если вы добавите данные в v1, а затем измените их на v2, данные не исчезнут. IDB использует управление версиями, чтобы позволить вам изменить структуру. Вы можете изменять хранилища объектов только при изменении версии.

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

...