2011-07-20 10 views
6

Opracowałem aplikację przy użyciu HTML5 + WebSQL, która synchronizuje dane z lokalnej bazy danych na serwer.Jak skompresować bazę danych WebSQL z JavaScript

Po usunięciu danych rozmiar pliku bazy danych sqlite pozostaje niezmieniony. Wiem, że zawiera ona pustą przestrzeń i zostanie wypełniona po włożeniu nowych danych, ale chciałbym, aby rozmiar był jak najmniejszy ze względu na ograniczenia.

Wiem, że polecenie VACUUM w sqlite może skompresować bazę danych i usunąć nieużywane miejsce, ale gdy próbuję uruchomić go na bazie danych WebSQL z JavaScript, kończy się niepowodzeniem z błędem "błąd logiczny lub brakująca baza danych". Uruchomienie polecenia spoza przeglądarki działa dobrze.

Moje pytania są następujące:

  1. Can komendę VACUUM być realizowane w jakiś sposób z JavaScript?

  2. Czy przeglądarki automatycznie zaimplementują to i czy zostanie ono ostatecznie nazwane? (nie można znaleźć żadnej dokumentacji na ten temat)

Dzięki za pomoc.

Odpowiedz

4

Z powodu przerwanego/przerwanego działania WebSQL, błędy/prośby o funkcje nie były - i nigdy nie będą honorowane. Ten sam problem występuje na przykład w przypadku błędu Chromium, bez żadnej odpowiedzi.

Wydaje się, że najgorsze jest to prawdziwe w odniesieniu do swoich dwóch pytań:

1: Ponieważ komenda próżnia może być uruchomiony tylko wtedy, gdy nie jest podłączony do bazy danych, można je uruchomić tylko z poziomu wiersza poleceń. Nie ma "rozłączaj bazy danych, a następnie uruchom polecenie" VACUUM "w przeglądarkach lub javascript, jak się wydaje.

2: Nie licz na to. Nie jest jasne, czy uruchomi się nawet po przekroczeniu maksymalnego limitu rozmiaru, a nawet jeśli zauważysz poważne spowolnienie na długo przed osiągnięciem maksymalnego limitu rozmiaru.

Co najwyżej możesz wysłać polecenie do wtyczki lub coś poza kontekstem javascript, które może samo uruchomić polecenie ... jest teraz przestarzałe, więc jest to raczej kwestia sporna. W przypadku starszej aplikacji, jeśli musisz mieć tę funkcję, będzie ona musiała zostać wykonana poza prostym kontekstem strony WWW/js.

Przyszłe/nowoczesne aplikacje korzystają teraz z IndexedDB; na to pytanie udzielono odpowiedzi tylko w przypadku starszych aplikacji.

Powiązane problemy