2010-07-01 11 views
14

Mam mały problem. Zaraz rozpocznie się 4-6-miesięczny projekt, który będzie wymagał wsparcia offline. AppCache jest niesamowity i akceptowany jako standard, ale duże przeglądarki wciąż nie są zdecydowane o implementacji bazy danych, opera, Safari i Chrome decydują się na WebSQL (SQLite) i Mozillę, a podobno IE wspierają IndexDB.IndexDB, WebSQL w 4 miesiące

wiem, że Chrome będzie również rozwijać opcję IndexDB w przyszłości, ale nie mogłem znaleźć żadnych informacji na temat jakichkolwiek dat wydania itp

Teraz, w 4-6 miesięcy, pozwala nazwać listopada chcę mieć system, który obsługuje większość (nie musi być wszystkim) przeglądarek najnowszej wersji (przy założeniu, że IE9 jest wyłączony, FF4 i Chrome 6). Naprawdę nie chcę mieć podwójnej implementacji indexdb/websql. Myśl o użyciu localStorage jako wielkiej brzydkiej bazie danych blob daje mi dreszcze i chciałbym nie używać Gears.

Co wy, moi szanowni koledzy, polecacie zrobić, jaką drogę mam podążać? Którą pigułkę zabrać?

Dzięki wszystkim

Guido

+0

Trochę aktualizacji, ten projekt jest teraz zakończony i skończyłem budować własną warstwę abstrakcji, która wygląda tak: 1) IndexedDB 2) Web SQL 3) Gears DB (w kolejności rezerwowej). Jest podobny do wózka inwalidzkiego, ale nieco bardziej elastyczny. To było całkiem proste i działa naprawdę dobrze.Gdybym miał zasięg, chciałbym mieć również opcję awaryjnego przechowywania pamięci flash. Nie obsługiwałem lokalnego magazynu, ponieważ miał on limit 2,5 MB (bezużyteczny w moim scenariuszu). – gatapia

+0

Gatapia, czy opublikowałeś tę warstwę abstrakcji dla społeczności? –

+4

@Peder Rice, tak, mam faktycznie: [tutaj] (https://github.com/PicNet/picnet_closure_repo/tree/master/src/pn/data) – gatapia

Odpowiedz

3

I rzeczywiście iść do (a.o.) localStorage. Napisałem na początku tego roku mały dowód koncepcji takiej aplikacji internetowej (por. this blogpost i offline-enabled webapp here), przy czym podstawowym podejściem jest;

  • dane umieszczone w tablicach/obiektów
  • używać standardowych javascript funkcje do wykonania CRUD (lub przejść do jlinq)
  • json-IFY tablicy/przedmiot do przechowywania
  • użyć biblioteki przechowywania abstrakcja jak persistjs do przechowywania/pobierania tablicy/obiektu json-ified
+1

Myśl o marszałku do/od string/JSON co czas aktualizacji bazy danych jest naprawdę brzydki. I może być w porządku dla bardzo małych danych, ale to zajdzie bardzo szybko z dużym zestawem danych. Nie podoba mi się to jednak, może masz rację, a to może być najbardziej zgodne podejście i jestem pewien, że można zastosować podejście "segmentacji", aby poprawić wydajność, ale dlaczego, dlaczego FireFox tak bardzo utrudnia życie? !!!!! – gatapia

+1

masz absolutną rację, to jest brzydkie rozwiązanie, ale o ile wiem, nie ma na razie prawdziwej alternatywy. some misc. bity: * to nie tylko mozilla sprzeciwiła się webdb, ms nie chciało implementować sqlite ani * ms & mozilla, oryginalni backersowie, zaimplementują indexdb * opera wyraziła zainteresowanie również indexdb, więc prawdopodobnie będą również podążać za * chromem-faceci pracują nad indexdb (http://www.chromium.org/developers/design-documents/indexeddb), więc można bezpiecznie założyć, że skończy się w chromie (i może safari, bo dużo pracy będzie w webkicie) – futtta

0

Wiem, że jest nieco późno, ale w przypadku przyszłych projektów można wypróbować SequelSphere.

To nowość na rynku, ale mam nadzieję, że obejmie ten rodzaj projektu. Jest to mechanizm relacyjnej bazy danych HTML5, który obsługuje SQL i przechowuje jego dane w pamięci lokalnej. Nie korzysta z baz danych WebSQL, ale jest to własny silnik SQL. W związku z tym będzie działać w dowolnej przeglądarce zgodnej z JavaScript (jeden z twoich głównych problemów). Jednak obecnie obsługuje on tylko lokalną pamięć masową jako mechanizm utrwalania, więc rozmiar może być dla Ciebie problemem. Oczekuję, że SequelSphere w końcu zwiąże z innymi lokalnymi mechanizmami wytrwałości, takimi jak koła zębate i flash, ale to nie jest natychmiast dostępne.

Do pełnego ujawnienia: Jestem spokrewniony z firmą SequelSphere. :)