Как сжать базу данных WebSQL из JavaScript - PullRequest
5 голосов
/ 20 июля 2011

Я разработал приложение с использованием HTML5 + WebSQL, которое синхронизирует данные из локальной базы данных с сервером.

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

Я знаю, что команда VACUUM в sqlite может сжиматьбазы данных и удалить неиспользуемое пространство, но когда я пытаюсь запустить его в базе данных WebSQL из JavaScript, происходит сбой с ошибкой «логическая ошибка или отсутствует база данных».Выполнение команды из браузера работает нормально.

Мои вопросы:

  1. Можно ли каким-то образом выполнить команду VACUUM из JavaScript?

  2. Реализуют ли браузеры это автоматически и будет ли оно вызываться в конце концов?(не могу найти никакой документации по этому поводу)

Спасибо за любую помощь.

1 Ответ

4 голосов
/ 16 марта 2013

В связи с тем, что WebSQL был отменен / остановлен работой, запросы об ошибках / функциях не были и никогда не будут удовлетворены. Такая же проблема существует, например, как ошибка Chromium без ответа.

Похоже, что худшее верно из ваших двух вопросов:

1: поскольку команда вакуума может быть запущена только в том случае, если она не подключена к базе данных, она может быть запущена только из командной строки. Кажется, в браузерах или javascript нет команды «отключить базу данных, а затем запустить VACUUM».

2: Не рассчитывайте на это. Не ясно, будет ли он работать даже при достижении предела максимального размера, и даже если это произойдет, вы заметите значительное замедление задолго до того, как достигнете предела максимального размера.

В большинстве случаев вы можете отправить команду в подключаемый модуль или что-то вне контекста javascript, который сам может выполнить команду ... сейчас это не рекомендуется, так что это скорее спорный вопрос. Если вам нужно иметь функцию для унаследованного приложения, это нужно делать вне простого контекста web-страницы / js.

Будущие / современные приложения используют IndexedDB сейчас; на этот вопрос ответили только для устаревших приложений.

...