logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Android/JSON/MySQL Połącznie z bazą danych w aplikacjach

7hebill 25 Wrz 2017 00:04 2058 5
REKLAMA
  • #1 16719379
    7hebill
    Poziom 11  
    Posty: 206
    Ocena: 42
    Witam,
    mam takie pytanie odnośnie pobierania/zapisywania danych w bazach danych dla aplikacji typu Android. Otóż spedziłem sporo czasu szukając odpowiedzi na moje pytanie ale niestety wszystkie informacje kierują do jednego rozwiązania.

    Większość poradników poraje schemat wysyłki danych z aplikacji
    JAVA -> Async -> JSON -> mySQL,
    chodzi mi przedewszystkim o ten fragment "async", który rzekomo pozwala nam wykonywać aplikacje w tle etc.

    Generalnie z tego co sie dowiedziałem to uzywanie Async w Javie ponoć generuje wycieki pamięci etc. i warto było by jej unikać. No i moje pytanie to czy w tym zastosowaniu są jakieś przeciwwskazania na uzywanie Async do połączeń z bazą danych czy istnieją jakieś inne metody, jeśli tak to jakie??

    Kolejną zagadką dla mnie jest że kazdy toturial przedstawia temat bardzo w ubogi sposob a interesowalby mnie fakt bezpieczeństwa kontaktu z bazą danych, ktory jest pomijany w tych filmikach czy artykółach. W jaki sposób zabezpieczyć sie przed niechcianymi wywołaniami, gdyż kod wydaje się dość otwary?
  • REKLAMA
  • #2 16719533
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    7hebill napisał:
    Witam,
    mam takie pytanie odnośnie pobierania/zapisywania danych w bazach danych dla aplikacji typu Android. Otóż spedziłem sporo czasu szukając odpowiedzi na moje pytanie ale niestety wszystkie informacje kierują do jednego rozwiązania.

    Czy masz na myśli zapisywanie w ZDALNEJ bazie danych, dla apliakcji typu Android?

    7hebill napisał:

    Większość poradników poraje schemat wysyłki danych z aplikacji
    JAVA -> Async -> JSON -> mySQL,
    chodzi mi przedewszystkim o ten fragment "async", który rzekomo pozwala nam wykonywać aplikacje w tle etc.

    Generalnie z tego co sie dowiedziałem to uzywanie Async w Javie ponoć generuje wycieki pamięci etc. i warto było by jej unikać. No i moje pytanie to czy w tym zastosowaniu są jakieś przeciwwskazania na uzywanie Async do połączeń z bazą danych czy istnieją jakieś inne metody, jeśli tak to jakie??

    Async, co masz na myśli? Ogólną koncepcję, to klarownie by było mówić np "operacje asynchroniczne". Jeśli ogólny koncept (???) to jedną z jego realizacji jest androidowy backgroud task, czy service. Android to mocno inny runtime, niz klasyczna Java

    Nie ma czegoś jednego pn "async w javie"

    7hebill napisał:

    Kolejną zagadką dla mnie jest że kazdy toturial przedstawia temat bardzo w ubogi sposob a interesowalby mnie fakt bezpieczeństwa kontaktu z bazą danych, ktory jest pomijany w tych filmikach czy artykółach. W jaki sposób zabezpieczyć sie przed niechcianymi wywołaniami, gdyż kod wydaje się dość otwary?

    Wraz z pewnym umasowieniem, popularna wiedza podlega zasadom mody, religii itd... JSON jest zdecydowanie modny, ale w innym spojrzeniu jest krokiem wstecz (np. przestaje to być kontrolowane przez kompilator, a staje się czułe na literówki), jest bardziej rozwlekłe niż protokoły binarne itd...
    Ja np integruję apkę androidową protokołem / biblioteką Apache Thrift, alternatywy to Protocol Buffers, Avro i kilka innych.

    Przy wysokim bezpieczeństwie oczywiście tzreba by się zająć profesjonalnym szyfrowaniem (kontrolą danych, autentykajcją i autoryzacją) ogromne tematy.

    Zwrócę uwagę na twój schemat (JAVA -> Async -> JSON -> mySQL - w kwestach szczegółowych wrzucasz do jednego worka język, model użycia, protokół i bazę, lekki mismasz, ale da się zrozumieć co masz na myśli). Chcę powiedzieć o jednej rzeczy. Jestem przeciwnikiem wchodzenia "ze świata" wprost na bazę danych w serwerze, choć nowelizacje baz coraz częściej pozwalają na zapis JSON. Warstwa na serwerze może niekoniecznie mocno zabezpieczy przez hackerami, ale utrzyma spójność danych wg założeń biznesowych (np" suma zamówienia nie większa niz limit kredytowy" oraz "pozycje nie większe niż stan magazynowy"). Wyraziłbym to tak.

    Android JAVA (kod kliencki) -> protokół sieciowy (u Ciebie JSON) -> usługa na serwerze -> baza centralna (SQL)

    albo częściej

    Android JAVA (kod kliencki) -> protokół sieciowy (u Ciebie JSON) -> usługa na serwerze -> baza centralna (SQL)
    |
    Baza lokalna Android

    Nie piszesz o jakiej dziedzinie tej apliakcji mówisz, wiele dosłownie nie da się zrobić "wchodzeniem na bazę".
  • REKLAMA
  • #3 16720777
    7hebill
    Poziom 11  
    Posty: 206
    Ocena: 42
    Cytat:
    Czy masz na myśli zapisywanie w ZDALNEJ bazie danych, dla apliakcji typu Android?

    Generalnie chodzi mi o bazy typu MySQL (bo Oracle dopiero się uczę w szkole, a wcześniej sie z nimi nie spotkałem). Server zewnętrzy (akurat hostuje sobię sam na moim NAS) przechowujący wszystkie dane aplikacji. Tego jak zrobić wewnętrzną i zewnętrzną bazę i je ze sobą zsychnronizować nie zabardzo wiem jak dlatego chcialem sie bardziej skupić najpierw na bazach zewnętrznych (choć jest to chyba trudniejszy orzech do zgryzienia.

    Cytat:
    Async, co masz na myśli? Ogólną koncepcję, to klarownie by było mówić np "operacje asynchroniczne". Jeśli ogólny koncept (???) to jedną z jego realizacji jest androidowy backgroud task, czy service. Android to mocno inny runtime, niz klasyczna Java

    Nie ma czegoś jednego pn "async w javie"

    Generalnie fakt, troszkę namąciłem. Chodziło mi o to, że przeczytałem kilka artykółów o Async i o tym ze maja przecieki pamięci (czego warot unikać), a że jetem trochę perfekcjonistą poprostu z góry chciałem poznać poprawną implementacje wątku w takim projekcie.

    Cytat:
    Nie piszesz o jakiej dziedzinie tej apliakcji mówisz, wiele dosłownie nie da się zrobić "wchodzeniem na bazę".

    Jeśli chodzi o mnie to nie jestem jakimś wielkim programistą i za takiego sie nie uważam, mam trochę podstawowej wiedzy z tego co się sam nauczyłem i trochę teorii i praktyki ze szkoły (choć tam poziom jest beznadziejny). Aplikacje jakie ja tworze poki co słórzą raczej mi osobiście by ułatwić sobie życie i nie są jakieś zaawansowane. Proste aplikacje na androidzie poki co. Mimo jak wspomniałem wcześniej zawsze lubie sięgnąć bo wiecej wiedzy niż mi potrzebne chocby tylko po to żeby mieć tego wyobrażenie.

    Cytat:
    JAVA -> Async -> JSON -> mySQL

    Ten schemat troszkę skopiowałem od jednego gościa, gdy tłumaczył mniej wiecej o co chodzi w połączeniu z bazą danych. Chciałem właśnie tak z grubsza tylko pokazać o co mi chodzi . Jak słusznie z resztą zauważyłeś .

    Cytat:
    Wraz z pewnym umasowieniem, popularna wiedza podlega zasadom mody, religii itd... JSON jest zdecydowanie modny, ale w innym spojrzeniu jest krokiem wstecz (np. przestaje to być kontrolowane przez kompilator, a staje się czułe na literówki), jest bardziej rozwlekłe niż protokoły binarne itd...
    Ja np integruję apkę androidową protokołem / biblioteką Apache Thrift, alternatywy to Protocol Buffers, Avro i kilka innych.

    Akurat własnie nie dawno doszedłem do tego ze wszystko w środowisku programistycznym jest na tej podstawie. Dlatego też cieżko mi potem stwierdzić co jest "dobrą praktyką" a co nie. Generalnie jestem chętny dowiedzieć sie jak mozna taką implementacje bazy danych zrobic w aplikacji i gdzie mogłym znaleźć wiecej intormacji na ten temat. Sam próbowałem ale czesto jest to powielana wiedza na temat połączenia z użyciem Async i itd. Generalnie nie mam jeszcze dość wiedzy o jakiś zaawansowanych technologiach czy klasach. Nie ukrywam, że brak wiedzy o tym jak poprawnie łączyć sie z bazą danych (właściwie przekazywanie informacjie do niej i na odwrót) jest dość w tym momencie dla mnie największym problemem bo kolejna aplikacja ma przechowywać wieszkość danych własnie w niej (bazie zew.) bo nie chce narażać danych na usuniecie (format/utrata telefonu).

    Być może piszę i wyrażam sie mało zrozumiale ale mam nadzieje ze rozumiesz. Mam troszkę ostatnio z tym problem.
  • REKLAMA
  • #4 16720925
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    1. W moim rozumieniu, dostęp z androida do (centralnej w sensie moich słów, zewnętrznej dla androida) bazy ma sens, jeśli chcemy ją przetwarzać.

    jeśli celem jest ochrona przed utratą, optymalne są inne środki, wiem że w całym olbrzymim API androida były sychronizacje do chmury itd... (jak mi się odnajdzie, to przeedytuję post).
    Nie miałem potrzeby użyć - mój przypadek przetwarza dane, i wrzucam jak narysowałem przez serwis pośredniczący).

    Wydaje mi się, że w zakresie o jaki pytasz, myśl o danych na androidze w najbardziej naturalny dla zagadnienia sposób, bez sztuczności, i to tego poszukaj backupu.

    2. Nie wyobrażam sobie pracy appki tylko w oparciu o baze zdalną, zasięg, szybkość, zrywanie transakcji, te sprawy, musi być lokalna (drugi z moich nieudolnych grafów), wiem że czasem są aplikacje z absolutnym "online", ale to chyba tylko w metropoliach chodzi

    baza centralna w "moim" sensie która ma swoje życie, ma aktualizacje, zarazem dostaje aktualizacje z androida, to idą za tym niebanalne intelektualnie problemy, choćby które z konfliktowych aktualizacji są "ważniejsze".

    3. W moim rozumieniu, a zapomniałem podać pojedyncze słówo, możesz o takim dwuwarstwowym użyciu bazy pogooglać pod hasłem mikroserwisy (tylko nie daj sobie wmówić, że oprócz REST/JSON-a nie ma nic innego - właśnie taki Thrift to są alternatywy). Poczytanie o mikroserwisach będzie dla Ciebie użyteczne (w pełni dotyczy to korporacji, jakieś dziesiątki i setki mikroserwisów w clustrach które nawet trudno narysować - u ciebie jeden mikroserwis na jednej maszynie, będzie to użyteczne). Jest w rewolucji mikroserwisowej sporo argumentów na tak, jest dużo "ewangelizacji" do nieprzekonanych, ale w tej modzie (tak, znów moda) są problemy.
    Poczytaj o REST, tylko dobre materiały. Wiele wdrożeń rzekomo REST, w rzeczywistości tym nie jest. Skrót REST zwykle spotkasz złączony z JSON, ale to nie jest prawda.
    Duzo dobrych materiałów o mikroserwisach znajdziesz z kręgów "dużej Javy" (tzn nie androidowej) a nawet Javy EE, nie musisz się tym przerażać.

    sorry, nie mam czasu na jakieś linki, w miarę zainteresowania dopiszę.

    EDIT1: do MySQL mam to, że jego dialekt mocno odjeżdża od "głównego nurtu", wiedza tam nauczona jest nie zawsze do przeniesienia na inne bazy. Ale rozumiem mocną pozycję wśród startujących programistów.
    Oracla uważam za bazę zdecydowanie nie do dydaktyki. Mocna pozycja rynkowa, potencjalnie duża wydajność, ale specyficzne zacofanie z "ficzerami", jak brak typu logicznego, specyficzne podejście do numerycznych, mało "bajerne" narzędzia. Tam jest wszystko tak zrobione, aby zadzwonić po inżynierów 500USD/godzina :)

    Jak masz okazję, PostgreSQL Ci krzywdy nie zrobi, czy Microsoft Express
  • REKLAMA
  • #5 16721296
    7hebill
    Poziom 11  
    Posty: 206
    Ocena: 42
    Dzięki za kolejny zastrzyk wskazówek.
    A jak to jest z tym Async? Bo sam już chyba sie zgubiłem. Lepiej go unikac probojac swoje wątki tworzyć?

    O mikroserwisach slyszalem kilka podkastów w tym na devTalku cos było. To też mam zamiar w przyszłosci obadać, coś napisać.
    Mysle, że jest dużo właśnie wiedzy do przyswojenia dla mnie jeszcze zanim zaczne to wszystko łapać jak należy. Poki co skupiałem sie bardziej na bazach SQL bo z nich mam trochę wiedzy. Oracla i tak muszę też przerobić ale to ze względu na szkołę bardziej niż z samozainteresowania heh. Obiło mi sie o uszy kiedyś cos takiego jak RoboSpice ale nie zdąrzyłem jeszcze tematem sie zainteresować. Myslisz, że mogę poki co używać MySQLa na tym Async dla początkującym levelu ?
    Generalnie zamysł aplikacji z połączeniem tylko do bazy zew.. mySQL był dość podporządkowany temu, że generalnie nie zależało mi jakoś na szybkośći i liczyłem sie z pewnymi problemami typu przrwane tranzakcje.

    Dużo informacji, czasem aż za dużo. Ogolnie mam teraz urwanie głowy, ale musze przysiąść do tego wszystkiego.
  • #6 16721580
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    nie znam na gruncie androida słowa Async (nie umiem znaleźć?), ale znam i używam AsyncTask

    Wg mojej wiedzy jest to prawidłowy sposób robienia czynności długotrwałych. Jak rozumiem, główną motywacją jest, aby nie "zamrażać" głównego wątku czyli GUI.
    Właśnie mam notkę AsyncTask'a przed sobą, najpierw było jeden wątek, potem pula, potem znów jeden.

    https://developer.android.com/reference/android/os/AsyncTask.html

    Runtime Androida jest specyficzne, w odróżnieniu od "dużej" Javy części (klasy, aktywności) mogą być wyładowane z RAM. Może na współczesnych androidach 2GB to nie zachodzi tak widocznie, ale na 450MB było pełno "dziwnych błędów", zachowania programu "inaczej niż kod jest napisany". Należy bardzo gorliwie trzymac się tego, co zalecane.
REKLAMA