Dlaczego baza danych Web SQL jest przestarzała?

86

Tworzę hybrydową aplikację na Androida.

Na początku zdecydowałem się na użycie localStorage, po spędzeniu 2 dni zdałem sobie sprawę, że to bardzo dziwne i dlatego go porzuciłem.

Następnie wziąłem indexedDB, po spędzeniu dzisiejszego dnia i uzyskaniu danych wyjściowych w Google Chrome, nie działa w WebView aplikacji na Androida.

I nigdy nie korzystałem z bazy danych Web SQL, ponieważ była przestarzała. W każdym razie zauważyłem, że PhoneGap nadal korzysta z Web SQL, a przeglądarki Androida to obsługują.

Dlaczego przede wszystkim przestarzałe Web SQL? I czy warto teraz korzystać z Web SQL?

komar
źródło
3
Co było dziwnego w localStorage? To tylko sklep pary klucz / wartość. Jestem ciekaw, co ci się nie podobało i jakie problemy napotkałeś. Używam go w projekcie i chciałbym poznać problem, z którym się spotkałeś.
jmq
1
@oligofren, Jeśli używasz SQL-a więcej niż tylko mózg-prosty-prosty SQL, nie możesz go dokładnie przetłumaczyć na
localStorage
2
Ale zaoszczędź sobie kłopotów z tworzeniem warstwy abstrakcji (co zrobiłem) i po prostu użyj YDN-DB na razie dev.yathit.com/ydn-db/index.html . Wykorzysta najlepszą dostępną technologię dla tego urządzenia.
oligofren
2
Zawsze używasz jakiejś warstwy abstrakcji. To jest programowanie i jak osiągnąć spójne zachowanie niezależnie od błędów implementacyjnych w przeglądarce. Połączenia z atrapami js przekraczają 5000 na ms, więc jeśli autor YDN-DB nie zrobi czegoś śmiesznie głupiego, nie powinieneś uzyskiwać wydajności w pobliżu rzędu 100ms. Bardziej jak 1ms dla operacji 1: 1 na platformach, które natywnie nie obsługują IndexedDB. Które w tej chwili są tylko starszymi wersjami. Wszystkie obecne przeglądarki obsługują IndexedDB. WebSQL jest przestarzały. I wypróbuj proste profilowanie, zanim „zoptymalizujesz” technologię :-)
oligofren
4
@ Oligofren, Nie rozumiesz sedna mojego komentarza. Nie mówię o narzutach związanych z jedną funkcją wywołującą inną i viceversa. Mówię, że kiedy korzystasz z warstwy abstrakcji db, ograniczasz się do podzbioru wzorców zapytań SQL , których możesz używać bez narażania się na straty wydajności. Nie możesz stroić, ponieważ biblioteka robi to za Ciebie automatycznie i nie zawsze robi to poprawnie. Nie zajmie to 1 ms, chyba że przechujesz tylko 1 wiersz danych.
Pacerier

Odpowiedzi:

99

Krótka wersja: Web SQL był przestarzały, ponieważ standardy są naprawdę ważne, a przekształcenie Web SQL w odpowiedni standard byłoby niezwykle trudne.

Ponieważ istniejące implementacje Web SQL są w zasadzie owijane wokół SQLite, każda próba zdefiniowania jego standardu polegała zasadniczo na „robieniu tego, co robi SQLite”. To nie wystarczy; prawdziwy standard musi być samowystarczalny, aby zdefiniować same przypadki interfejsu i narożników oraz wyjątki, zamiast wskazywać na istniejącą implementację (szczególnie implementację innej firmy, taką jak SQLite). W przeciwnym razie ryzykujesz wzięciem jednego dziwactwa z implementacji i zapisaniem ich jako standardu. Z tego, co przeczytałem, W3C preferuje wiele niezależnych implementacji proponowanych standardów, aby zapewnić, że tak się stanie; ponieważ Web SQL był tak związany z SQLite, to po prostu się nie wydarzyło.

Blog Mozilli zawiera więcej szczegółów na temat ich uzasadnienia, w szczególności za brak obsługi Web SQL; najwyraźniej byli jednym z głównych głosów w przestarzałości Web SQL.

Czy powinieneś teraz korzystać z Web SQL? Nie oczekuję, że dostawcy, którzy obecnie go obsługują (np. Google i Apple), porzucą go w najbliższym czasie, ale IE i Firefox nie będą go dodawać, a ponieważ są przestarzałe, po co inwestować w to? (Na przykład Ido Green z Relacjami programistów Google nie zaleca korzystania z niego).

Josh Kelley
źródło
8
Ten post autorstwa Ido jest bardzo prosty i nawet nie zdradza, dlaczego warto użyć jednego lub drugiego. w rzeczywistości bazy danych noSQL zostały zaprojektowane z myślą o dużych rozmiarach, a to nie dotyczy bazy danych działającej na jednym komputerze użytkownika. Możesz uzyskać pewne korzyści związane z dużymi zbiorami danych, ale tracisz takie rzeczy, jak DOŁĄCZ. Nie ma mowy, żebym mógł rozwinąć moje rozszerzenie Chrome „Plus for Trello” open-source, gdybym musiał korzystać z indexedDb (i nie używam magazynu danych noSQL w aplikacji), więc wybrałem web sql.
Zig Mandel
2
Ponieważ konkurent Google GMail MS-Outlook mógłby wtedy przeprowadzić wyszukiwanie pełnotekstowe i ponieważ „objęcie, rozszerzenie, eksterminacja” nie jest możliwe, gdy istnieje tylko jedna implementacja SQLite (MS), a Jonas Sicking (Mozilla) nie lubi SQL. Magazyny kluczowych wartości z nadmiernie skomplikowanym interfejsem są oczywiście o wiele lepsze (inaczej in hyphe), zwłaszcza że każdy obiekt JavaScript jest już tablicą asocjacyjną. I spójrzmy prawdzie w oczy, normalizacja danych, integralność referencyjna i operacje oparte na zbiorze naprawdę budzą obrzydzenie dla kogoś, kto nie chce (SQL) rozumieć SQL, czyli „Użytkownicy nie chcą SQL”.
Quandary,
3
jak na ironię, WebSQL jest idealny do interakcji z SQLite, jeśli jest to dokładnie to, co chcesz zrobić (i nie potrzebujesz PRAGMA).
Michael
4
więc mozilla zabiła projekt i technologię, która była niezwykle przydatna w wielu sytuacjach, ponieważ niektórym ludziom się to nie podobało i ludzie ich bronili. Dlaczego? mogliby wdrożyć ZARÓWNO IndexedDB ORAZ WebSQL
yoyo_fun
1
Safari 13 usunęła teraz obsługę WebSQL, którą miały wcześniejsze wersje.
Thunderforge
17

Odpowiedź Josha Kelleya jest jak dotąd NAJLEPSZĄ odpowiedzią, jaką kiedykolwiek znalazłem na temat powodu, dla którego standardowa praca została przerwana. To powiedziawszy, myślę, że istnieje dodatkowa perspektywa do rozważenia w odniesieniu do bazy użytkowników.

Mimo to nie zgadzam się z podejściem Ido Green do tego tematu („Jest to zalecenie dla programistów internetowych, aby nie korzystali już z technologii tak skutecznie”) ...

Wierzę (jak stwierdza vi4m w komentarzach do artykułu Ido Greena):

My (programiści) nadal możemy korzystać z tej technologii. Żaden sprzedawca przeglądarki nie zażądał usunięcia tej technologii ani nie planuje jej usunięcia. Programiści są głosem sieci. Nadal możemy z niego korzystać, może Mozilla zmieni zdanie ;-)

I dodałbym inne logiczne podejście: jeśli tworzysz mobilny ambient ... ¿jakie otoczenie jest w twoich rękach? Odpowiedź: iOS i Android ... Więc jeśli OBA obsługa obsługuje webSQL, a twoim celem jest MASYWNA MOBILNOŚĆ, idź!

Pomyśl, jak duże aplikacje robiły prawie zawsze na początku, najpierw uzyskaj MOST, a następnie (po osiągnięciu sukcesu) odtwórz pracę, aby uzyskać pozostałe mniej (jeśli naprawdę chcesz je osiągnąć lub zostaniesz o to poproszony). Wreszcie, czy nie zawsze sukces wyznacza ścieżkę?


Po przeczytaniu artykułu Nolana Lawsona (w którym jasno widać, że zamierza dać szansę swojemu wynalazkowi) uważam, że ta sprawa stała się nową zimną wojną między gigantami technologii, która nawet nie powinna istnieć. Uważam, że specyfikacje zostały stworzone, aby pozostały (tak długie i nietknięte, jak to możliwe, tym lepiej dla wydajności zorientowanej na klienta). Jak na ironię, zadaniem „facetów ze specyfikacji” jest generowanie NOWYCH specyfikacji (czasami tam, gdzie nie są potrzebne, więc może mieć coś więcej do zrobienia), a także zadania programistów czasami koncentrują się na zmianie i przepisywaniu tego, co już działa, zamiast na rozwiązywaniu nowych problemów i nowe tendencje.

Dla mnie bazy danych po stronie klienta polegały na prostym ułożeniu podobieństw (między serwerem a stroną klienta), abyśmy mogli łatwo tworzyć, przechowywać, przesyłać i pobierać dane. Zgodnie z tym podejściem posiadanie tych samych języków i struktur (przynajmniej dla nas, programistów LAMP opensource) jest proste i logiczne.

Uważam, że zamiar IndexedDB bycia alternatywą z szerszymi i nowszymi możliwościami jest zawsze dobrym podejściem, ale jakoś przypomina mi potrzebę opracowania oprogramowania, które POTRZEBUJE zainstalować (nawet jeśli podstawowe rozwiązanie może pozostać w chmurze). W świecie, który ma tendencję do pozostawania w kontakcie, brzmi to jak A) kwestia kontroli i posiadania lub B) koncentrowanie się na rozwoju potworów po stronie klienta ... ale dla takich potrzeb istnieją aplikacje (w świecie mobilnym) i oprogramowanie (w świecie komputerów PC). Uważam, że celem aplikacji internetowych powinno pozostać głównie rozszerzenie sieci bez względu na urządzenie.

Uważam, że z tego podejścia może wyniknąć ładna infografika.

DavidTaubmann
źródło
Pamiętaj, że najnowsze wersje Firefoksa i IE w ogóle nie obsługują WebSQL.
ocodo
1
O ile wiem, nigdy nie wspierali WebSQL. Możesz to sprawdzić tutaj: [link] caniuse.com/#feat=sql-storage . Jedyne, co mnie zadziwia, to Opera Mini, w ten sposób tracą rynek. W każdym razie, dla mnie jako programisty, jedyne, które mają znaczenie, to iOS i Android dla WebApps, a także WebKit, który moim zdaniem jest silnikiem obu systemów.
DavidTaubmann
1
Niemniej jednak żadne przeglądarki nie przyjęły standardu pamięci masowej po stronie klienta: html5rocks.com/en/features/storage
DavidTaubmann
1
Safari 13 usunęła teraz obsługę WebSQL, którą miały wcześniejsze wersje. Dlatego „Żaden sprzedawca przeglądarki nie zażądał usunięcia tej technologii ani nie planuje jej usunięcia” nie jest już prawdą.
Thunderforge
@Thunderforge Dzięki za informację! Naprawdę dobrze wiedzieć! Myśląc trochę dalej, nie wiem, czy będzie źle dla deweloperów, czy gorzej dla iOS, ponieważ to narzędzie jest dla nas kompletne i przydatne od tylu lat. Możemy zalecić naszym użytkownikom, aby nie używali ani nie kupowali więcej urządzeń Mac lub iOS, chyba że ktoś poniesie koszty przeprogramowania projektów na indexedDB.
DavidTaubmann,
1

W rzeczywistości strony wnoszące wkład osiągnęły impas w kierunku normy. Krótko mówiąc, nikt nie mógł się zgodzić.

Witryna W3C wyjaśnia to.

Specyfikacja osiągnęła impas: wszyscy zainteresowani implementatorzy korzystali z tego samego zaplecza SQL (Sqlite), ale potrzebujemy wielu niezależnych implementacji, aby kontynuować ścieżkę standaryzacji.

Strona WSC

htm11h
źródło
2
Dla mnie w jakiś sposób oznacza to, że zgadzają się, że nie ma nic innego do standaryzacji na tej ścieżce ... Działa dobrze tak, jak to jest, ponieważ łączy ścieżkę standardu z istniejącą technologią innej firmy, która powinna / może nie być przez nich standaryzowana.
DavidTaubmann
Dla mnie brzmi to tak: nie zgodzili się na to, ponieważ nie pozwala na funkcje specyficzne dla dostawcy (obejmowanie, rozszerzanie, eksterminacja?).
Quandary,
Uważam, że jest to rodzaj preferencji specyficznej dla dostawcy, następne zdanie stwierdza, że ​​badania są kontynuowane. Nie jestem więc pewien, czy wszystkie strony były zadowolone z obecnego stanu ... „Grupa robocza ds. Aplikacji internetowych kontynuuje prace nad dwiema innymi specyfikacjami związanymi z pamięcią: Web Storage i indeksowaną bazą danych API”.
htm11h