Как уменьшить размер sqlite3 базы данных для iPhone?

Взгляните на этот плунжер

Обратите внимание на изменения, которые я сделал:

(function(){
  const Modal = {
    templateUrl: 'modalAlert.html',
    controller:  ModalCtrl,
    bindings: {
      resolve: "<"
    }
};

angular.module('app').component('modalComponent', Modal);

function ModalCtrl() {
  var $ctrl = this;
  $ctrl.$onInit = function() {
    $ctrl.modalMessages = $ctrl.resolve.modalMessages;
  }
}

})()

вам нужно использовать resolve с bindings получить доступ к переданному параметру

7
задан Chris Hanson 1 January 2009 в 01:46
поделиться

11 ответов

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

2
ответ дан 6 December 2019 в 11:53
поделиться

Удалите индексы на sowpods и twl - они, вероятно, не помогают Вашим временам запроса и определенно занимают много места.

Можно добраться, статистика на базе данных с помощью sqlite3_analyzer от SQLite загружает страницу.

4
ответ дан 6 December 2019 в 11:53
поделиться

Как полностью другой подход, Вы могли попытаться использовать фильтр цветка вместо всеобъемлющей базы данных. В основном фильтр цветка состоит из набора хеш-функций, каждая из которых связана с битовым полем. Для каждого легального слова оценена каждая хеш-функция, и соответствующий бит в соответствующем битовом поле установлен. Недостаток, теоретически возможно получить ложные положительные стороны, но они могут быть минимизированы/практически устраненные с достаточным количеством хешей. Плюс сторона огромное пространство сбережения.

3
ответ дан 6 December 2019 в 11:53
поделиться

Создатель SQLite продает версию SQLite, который включает сжатие базы данных (и шифрование). Это было бы прекрасно.

1
ответ дан 6 December 2019 в 11:53
поделиться

Вы попытались ввести "вакуумную" команду, чтобы удостовериться, что у Вас нет дополнительного пространства в дб, который Вы забыли к рекламе?

5
ответ дан 6 December 2019 в 11:53
поделиться

Ваш лучший выбор состоит в том, чтобы использовать сжатие, которое, к сожалению, SQLite не поддерживает исходно в этой точке. К счастью кто-то не торопился для разработки расширения сжатия для него, которое могло быть тем, в чем Вы нуждаетесь.

Иначе я рекомендовал бы хранить Ваши данные главным образом в сжатом формате и распаковать на лету.

1
ответ дан 6 December 2019 в 11:53
поделиться

Как текстовое поле, signature в настоящее время использует по крайней мере 26 * 8 байтов за запись (208 байтов), но если бы необходимо было упаковать данные в битовое поле, то Вам могли бы, вероятно, сойти с рук только 3 бита за букву (уменьшающий Вашу максимальную частоту на букву к 7). Это означало бы, что Вы могли упаковать всю подпись в 26 * 3 бита = 78 битов = 10 байтов. Даже при использовании 4 битов за букву (для максимальной частоты 15 на букву), Вы только использовали бы 104 бита (13 байтов).

Править: После немного более размышления я думаю, что 4 бита за букву (вместо 3) были бы лучшей идеей, потому что оно сделает двоичную математику легче.

EDIT2: Прочитывая документы о типах данных SQLite, кажется, что Вы смогли просто заставлять поле "подписи" охватить 26 столбцов ЦЕЛОГО ЧИСЛА типа, и SQLite будет делать правильную вещь и только использовать столько же битов как требуется для хранения значения.

1
ответ дан 6 December 2019 в 11:53
поделиться

Я считаю правильно, что Вы имеете о 450K словах как этот в Вашей базе данных?

У меня нет подсказки о iPhone, ни один серьезно относящийся к sqlitem, но... целый sqlite не допускает способ сохранить файл как gz сразу же (он, возможно, уже делает внутренне? нет, не похож на это, когда Вы говорите, что это - приблизительно 135 b на запись. даже с обоими индексами), я переехал бы от подхода таблицы, сохранил бы его "вручную" в сжатии подхода словаря и создал бы остальных на лету и в памяти. Это должно работать Очень хорошо на Вашем типе данных.

Ожидать... Вы используете ту подпись для обеспечения fulltextsearching или вводящий с опечаткой recogition? Был бы полнотекстовый поиск на sqlite, не устаревшем то поле?

0
ответ дан 6 December 2019 в 11:53
поделиться

mhmm... iPhone... разве это не имеет постоянной передачи данных? Я думаю, что это - то, где webapplication/webservice может вскочить уютно. Переместите большую часть своей бизнес-логики в веб-сервер (он будет иметь реальный SQL с FTS и looooots памяти), и выберите ту информацию онлайн клиенту на устройстве.

0
ответ дан 6 December 2019 в 11:53
поделиться

Как отмечено хранение "Подписи" более эффективно походит на хорошую идею.

Однако также кажется, что Вы могли получить тонну сбережений пространства при помощи некоторой справочной таблицы для слов - так как Вы, кажется, берете корневое слово и затем добавляете "er", "редактора", "es", и т.д. почему бы не столбец с числовым идентификатором, который ссылается на корневое слово от отдельной справочной таблицы и затем отдельного столбца с числовым идентификатором, который ссылается на таблицу суффиксов общего слова, которые были бы добавлены к основному слову.

Если бы были какие-либо приемы вокруг хранения кратких версий подписей для многократных въездов с единственным корневым словом, то Вы могли также нанять их для сокращения размера сохраненных подписей (не уверенный, какой алгоритм производит те значения),

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

0
ответ дан 6 December 2019 в 11:53
поделиться

Как упомянуто в другом месте, потеряйте индексы на булевых столбцах, они почти наверняка будут медленнее (если используется вообще), чем сканирование таблицы и собираются использовать пространство напрасно.

Я рассмотрел бы применение простого сжатия к словам, Кодирование методом Хаффмана довольно хорошо для этого вида вещи. Кроме того, я посмотрел бы на подписи: отсортируйте столбцы в частоте буквы, заказывают и не потрудились хранить конечные нули, которые могут подразумеваться. Я предполагаю, что Вы могли Huffman - кодировать их, также.

Всегда принятие Ваших закодированных строк не нарушает SQLite, конечно.

0
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: