IndexedDB занимает много места для простого объекта

Я храню объект JSON, включая 18 изображений в IndexedDB. Каждое изображение занимает не более 50 КБ, но почему-то в indexedDB требуется 118 МБ? - Я понятия не имею, почему он такой тяжелый?

Помимо изображений, все это просто JSON, в основном пары ключ/значение с текстом...

Смотрите прикрепленные скриншоты

Размер индексируемой БД

Элемент в IndexedDB

Я использую DexieJS для работы с IndexedDB.

Функция сохранения в базу данных выглядит так:

  export const savePendingSurvey = (id, currentSurvey, surveyAnswers, surveyFiles) => {
const updatedSurvey = {
    id: id,
    createdAt: new Date(),
    status: 'UNSUBMITTED',
    surveyVersion: currentSurvey.survey.version,
    currentSurvey: {
        ...currentSurvey.survey
    },
    currentSurveyAnswers: [
        ...surveyAnswers
    ],
    currentSurveyFiles: [
        ...surveyFiles
    ]
};

db.open().then(() => {
    db.pendingSurveys.put(updatedSurvey).then((response) => {
        console.log('done adding pending survey', response);
    }).then(() => {
        return db.pendingSurveys.toArray();
    }).then((data) => {
        console.log('pendings surveys in db', data);
    }).catch((e) => {
        if ((e.name === 'QuotaExceededError') ||
            (e.inner && e.inner.name === 'QuotaExceededError')) {
            // QuotaExceededError may occur as the inner error of an AbortError
            alert('QuotaExceeded error! - There are not enough space available on your device');
        } else {
            // Any other error
            console.error(e);
        }
    });
});
};

Кажется, что каждый раз, когда я делаю простейшее обновление объекта, даже с простым изменением текста, он каждый раз добавляет к элементу от 100 до 300 КБ :/


person nickycdk    schedule 18.11.2019    source источник


Ответы (1)


Аналогичные вопросы есть в выпусках Dexie 604 и 641. Кажется, что большинство реализаций IndexedDB работает так же, как и большинство баз данных — добавляет новые строки для каждого обновления и помечает старые версии для последующего удаления. Когда БД достигает определенного размера, старые строки будут собираться мусором.

person David Fahlander    schedule 18.11.2019
comment
Любой способ сохранить небольшой размер БД или это произойдет автоматически? - person nickycdk; 19.11.2019
comment
@nickycdk Нет, к сожалению, нет API для управления этим, насколько мне известно. - person David Fahlander; 21.11.2019