Przesyłanie danych między bazami - aplikacja mobilna


(andreabaccalli) #1

Cześć,

 

Zgłębiam tematykę projektowania aplikacji mobilnych/desktopowych (docelowo wykorzystując: electron/jode/js/html5). O ile potrafiłam sobie odnaleźć różnego rodzaje informacje nt. już tworzenia samych apek (z czym jestem zaznajomiona) o tyle ciekawostką jest dla mnie kwestia baz danych. Wyobraźmy sobie, że mamy serwer bez zewnętrznego IP (więc nie mogę się podłączyć bezpośrednio do inego) z bazami danych (jedna Postgresql druga interbase/firebird; nie wiem na którą się zdecyduję). Czy jeśli chcę aplikacją na zupełnie innym komputerze wyciągnąć część danych z tabel (z bazy na serwerze) to jak to najlepiej zrobić:

 

  • wyeksportować dane z bazy serwera jako CSV, przesłać na hosting i zaimportować do bazy w aplikacji,

  • wyeksportować dane z bazy serwera jako CSV, przesłać na hosting i zasilić tym samym online’ową bazę typu MSSQL/Postgresql/Mysql i z tą że bazą się połączyć

  • wyeksportować dane z bazy jako plik z danymi, wysłać na hosting, i zasilić aplikację danymi z pliku?

 

Nie mam w tym doświadczenia i narazie to barzdiej rozważania koncepcyjne… Wiem, że są aplikacje do synchronizacji baz danych, ale skoro np mam na serwerze MEGA dużą bazę danych, a potrzebuję tylko cztery tabele z danymi numerycznymi to chyba takie rozwiązania są zbędne? dzięi :slight_smile:

 

Pozdrawiam Andrea


(Fizyda) #2

Zależ od tego jak często mają być dane synchronizowane, jak dużo one zajmują oraz jak często aplikacja będzie ich używała. Kolejna kwestia to czy jest to aplikacja multi user czy single, inaczej mówiąc czy wiele osób ma korzystać za pomocą aplikacji z tego samego zbioru danych czy tylko jedna.

Jak długo taki stan ma się utrzymać, czyli taki patologiczny dostęp do bazy, na stałe czy tylko w celach developerskich, a później aplikacja i serwer będą pracowały w jednej sieci?

 

Czy na pewno nie ma możliwości połączyć się z tym serwerem? Może wystarczą tylko uprawnienia dla odpowiedniego usera z dostępem do konkretnych tabel, a nie całej bazy danych.

Jeśli jest to aplikacja o publicznym dostępie (dla osób z zewnątrz) może dobrym rozwiązaniem byłoby postawić jakiś serwer może nawet rest który zapewniałby komunikację z bazą. W takim przypadku można dodać potrzebę logowania się w aplikacji by uzyskać dostęp do danych.


(andreabaccalli) #3

To tak:

  • aplikacja ma wyświetlać dane liczbowe typu: dzienny utarg, dzienna liczba pacjentów no i dane archiwalne (również tego typu)

  • myślałam by zasilanie danymi odbywało się trzy razy w ciągu dnia (żeby nie generować zbyt dużego ruchu) czyli np o 8, 12 i 20.00. 

  • nie można bezpośrednio się łączyć z serwerem bo on pracuje w godzinach 7.00 - 22.00 (nie wnikajmy proszę dlaczego… zwykła ludzka głupota)

  • aplikacja będzie przeznaczona dla jednego użytkownika,

  • taki stan PATOLOGICZNY (:)) ma się utrzymać ciągle

 

pytam bo nie mam pojęcia jak działają zatem aplikacje mobilne (chyba, żeone trzymają dane tlyko w 1 miejscu.)


(Fizyda) #4

Co masz na myśli przez apliakcje mobilną? Chodzi o apkę na telefon/tablet? Ile warzą potrzebne dane w tej chwili i jaki jest orientacyjny ich przyrost w powiedzmy okresie czasu miesiąca.


(andreabaccalli) #5

To jest tak - rozwiązanie, które kiedyś znalazłam w necie robi zrzut poszczególnych tabel do plików sql. Jest to w formie listy:
INSERT INTO <NAZWA TABELI> …

Jeśli chodzi o wagę to miesięcznie przyrasta to o ok 50kb? minus tego rozwiązania jest inny - ten mini skrypt bash oparty o narzędzie razor sql (płatne) robi zrzut CAŁYCH tabel i przy ładowaniu do mysql znowu skrypt na hostingu czyści kompletnie całą tabelę w bazie mysql, i ładuje dane z pliku sql. Totalnei bezsensu.

 

dodatkowo chcę wywalić tego razor sql bo wygasła licencja. 


(Fizyda) #6

 


(andreabaccalli) #7

to był skrót myślowy. Chodzi o o aplikację na desktop budowaną na podstawie js/node/html5.


(Fizyda) #8

No to sprawa jest prosta, user z odpowiednimi uprawnieniami (tylko odczyt - select) na oryginalnej bazie danych, aplikacja łączy się z bazą danych w celu pobrania nowych rekordów, np co 4 godziny, a jeśli w ciągu 24h nie może połączyć się z serwerem dopiero informuje o jakimś problemie (rozwiąże to problem z tym że serwer działa w godzinach od do). Pobrane dane zapisuje we własnej bazie danych SQLite. Chyba że baza danych jest dużo to w tedy można dodać serwer MySQL. Pobieranie rekordów to zwykły select gdzie id jest większe od ostatniego z lokalnej bazy danych. Może być też data zamiast id zależy od struktury tabel.

Pobierasz tylko te dane które Cię interesują i tylko te zapisujesz lokalnie.

 

Aplikacja cały czas aktualizuje dane sama, a i dane są dostępne nawet jeśli serwer główny zostanie wyłączony.


(angh) #9

Jezeli sa to tylko wybrane dane, nie mozesz po prostu replikowac potrzebnych informacji na normalnie dostepnym serwerze? Jakis proces co 30 minut sprawdza czy jakies dane zostaly dodane do systemu i jezeli te dane powinny byc dostepne w aplikacji, polaczy sie z jakims zewnetrznym serwerem i je tam umiesci? a mobilna aplikacja bedzie uzywala tylko zewnetrzengo serwera, dzieki czemu zawsze bedzie dzialac jak powinna, i dane beda do tylu maksymalnie 30 minut?


(Fizyda) #10

Warto stawiać serwer dla jednego klienta? Tylko mamy dodatkową możliwą lukę w systemie.


(ttomas) #11

vps są za 12 zł miesięcznie, powinno się zwrócić, a dla jednego klienta wystarczy z iptables z blokadą na ip, jeśli dynamicznie to można jakiś vpn i raczej bezpiecznie.