Сжатие зашифрованной базы данных SQLite FTS3 для iOS - PullRequest
2 голосов
/ 05 марта 2012

Мое приложение использует базу данных SQLite с FTS3 для поиска товаров. Я пытаюсь зашифровать базу данных с помощью SQLCipher, но из-за этого размер базы данных увеличивается (7 МБ -> ~ 20 МБ).

Не похоже, что есть отличный способ сжать зашифрованную базу данных FTS SQLite. У кого-нибудь есть предложения по этому поводу? Я должен сжать его, чтобы приложение не превышало ограничение на загрузку 3 МБ.

Спасибо!

1 Ответ

0 голосов
/ 05 марта 2012

Нет причины, по которой база данных, использующая SQLCipher, была бы такой большой по сравнению с базой данных без SQLCipher.Каждая страница базы данных SQLCipher использует только 48 байтов страницы для IV и HMAC.Таким образом, при размере страницы 1024 байта, если у вас была незашифрованная база данных 7 МБ, зашифрованная версия SQLCipher должна быть только 7,34 МБ.

Более вероятным объяснением является то, что ваша база данных выросла в результате удалений и вставок.Если автоматический вакуум не включен в базе данных, удаленные строки могут продолжать занимать место.Попробуйте запустить VACUUM в базе данных, чтобы освободить место.

Если очистка базы данных не решает проблему, вот несколько дополнительных вопросов;

  1. Вы уверены, что индексы FTS3 не просто отвечают за размер файла?
  2. Вы пытались создать такую ​​же точную схему и структуру таблицы с FTS3 в незашифрованной базе данных, чтобы сравнить размеры файлов, чтобы сделатьуверены, что это на самом деле проблема с SQLCipher?Является ли незашифрованная база данных с FTS3 7 МБ?
  3. Если ответы на вопросы 1 и 2 - да, можете ли вы указать точные шаги для перехода от незашифрованной к зашифрованной базе данных?

Чтобы ответить на ваш общий вопрос, база данных SQLCipher, вероятно, не будет хорошо сжиматься.Если увеличение размера файла на самом деле является результатом FTS3, а не SQLCipher, то вы можете рассмотреть возможность отправки данных в приложение, а затем создать виртуальную таблицу FTS3 на устройстве.

...