как сжать базу данных sqlite? - PullRequest
14 голосов
/ 07 октября 2011

После того, как все мои данные сохранены в sqlite, они достигают уже 14 МБ.Вот почему я боюсь, что некоторые люди не смогут загрузить мое приложение из области медленного соединения.Есть ли способ уменьшить базу данных sqlite?

Ответы [ 6 ]

22 голосов
/ 07 октября 2011

Вы пробовали ВАКУУМ ?

Команда VACUUM перестраивает всю базу данных. Существует несколько причин, по которым приложение может сделать это:

  • Если SQLite не работает в режиме «auto_vacuum = FULL», когда большой объем данных удаляется из файла базы данных, он оставляет пустое пространство или «свободные» страницы базы данных. Это означает, что файл базы данных может быть больше, чем строго необходимо. Запуск VACUUM для восстановления базы данных освобождает это пространство и уменьшает размер файла базы данных.
  • Частые вставки, обновления и удаления могут привести к фрагментации файла базы данных, когда данные для одной таблицы или индекса разбросаны по файлу базы данных. Запуск VACUUM гарантирует, что каждая таблица и индекс в основном сохраняются в файле базы данных. В некоторых случаях VACUUM может также уменьшить количество частично заполненных страниц в базе данных, дополнительно уменьшая размер файла базы данных ...

Команда VACUUM работает, копируя содержимое базы данных во временный файл базы данных, а затем перезаписывая оригинал содержимым временного файла. При перезаписи оригинала используется журнал отката или журнал записи с опережением WAL-файл, как и для любой другой транзакции базы данных. Это означает, что при VACUUMing базе данных в свободное место на диске требуется вдвое больше исходного файла базы данных ...

10 голосов
/ 07 октября 2011

несколько подсказок:

  • SQLite несколько ленив, чтобы освободить неиспользуемое пространство;используйте команду VACUUM или автоматический вакуумный режим .

  • формат базы данных обменивает эффективность использования пространства для быстрого доступа.если вы просто создадите дамп содержимого данных в виде дампа SQL или просто файла CVS для каждой таблицы базы данных, вы, вероятно, получите файлы меньшего размера.

  • либо с использованием файлов базы данных, либо простых данных,попробуйте сжать их.

2 голосов
/ 07 октября 2011

Попробуйте сжать его и использовать поток zipinput при распаковке базы данных из ресурсов. В любом случае, Android создаст 14 МБ базы данных, когда вы все равно создадите свой apk (который будет разархивирован во время установки), поэтому я предполагаю, что ваш apk будет размером около 5-6 МБ.

1 голос
/ 07 октября 2011

14 МБ очень велико для приложения Android, но лучше организовать загрузку с сервера и интегрировать в приложение.

Вместо этого вы можете связать приложение со сжатым файлом базы данных.(т. е. файл .zip) и распакуйте его при первом запуске приложения (не забудьте удалить файл .zip).Лучше всего делать все это на SD-карте.

1 голос
/ 07 октября 2011

У меня был опыт работы с sqlite, когда я импортировал около 3 МБ данных, после чего я понял, что у данных были проблемы с кодированием.Я удалил таблицу, заново создал ее и повторно импортировал данные после устранения проблем с кодировкой.Результат: файл sqlite 6 МБ.Мое решение состояло в том, чтобы удалить базу данных sqlite и просто сделать новую.(Без дополнительной информации о том, что вы храните в своей базе данных, это все, что я могу предложить ...)

0 голосов
/ 23 января 2015

14MB не так уж велика для приложения в настоящее время. Еще одна вещь, которую вы можете попробовать - удалить ненужные табличные индексы Некоторые индексы могут быть скрыты в ваших таблицах, и они могут занимать много места. Возможно, вам придется выполнять ваши запросы по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...