Aki elolvasva a cimet rogton linkelne a phonegapet vagy az iceniumot (esetleg a flexet), azt megkernem hogy elobb olvasson tovabb, es csak akkor linkelje, ha az altala emlitett technologia biztosan tudja ezeket.
Eloszor is: kozepes szinten ertek webfejleszteshez, Android alkalmazasok fejlesztesehez es iOS alkalmazasok fejlesztesehez is. A hetekben ismerosoktol tobb olyan mindharmat erinto otletet kaptam, aminek ugy kezdenek neki, hogy az altalam kerdezett db frameworkot megkeresnem ha letezik, es megirnam ha nem letezik (annak tudataban is, hogy nemely otletrol (nem mindrol) nehezen tudom elkepzelni, hogy valaha tul fogja lepni a bevetele az uzemeltetes kolsegeit (tipikus IT startup betegseg, de ez most mindegy)).
Tehat adott a kovetelmeny:
-van egy kozponti DB, webes feluletrol nyilvan az egeszet el szeretnek erni, mar csak egy csak webrol elerheto admin felulet miatt is. Ez a FULL DB
-adottak a mobilalkalmazasok iOS es Android alapokon. Mindkettonel teljesen mas jellegu DB megoldast szoktak hasznalni. Az Androidnak sajat (szerintem kifejezetten jol hasznalhato es baratsagos) SQLite konyvtara van, iOS-nel pedig valaszthatsz a C SQLite library es az Objective-C/Cocoa Touch-os xcode altal is tamogatott CoreData megoldasa kozt (nyilvan ez utobbit konnyebb hasznalni minden szempontbol, de az elozo is tulelheto)
-Mig egy admin feluletet is ellato weboldal siman elbir egy tobbmillio rekordos db-vel, addig egy iOS-t vagy egy Androidot futtato eszkozon ennel tobb okbol is joval kevesebb rekordot erdemes tarolni. Van pl. 1'000'000 user, abbol 1 user adatahoz ferhetunk csak hozza eleve a webappbol, akkor csak ahhoz a userhez kapcsolodo adatokat szeretnek a kozponti db-bol lefetchelni.
--Ugyanakkor illik egy mobilappot ugy megirni, hogy offline is mukodjon, ergo ha nincs se tererod, se mobilneted, se wifid (iOS-en ezt tudod ellenorizni a Reachability class-szal pl.), akkor is tudjal abbol a db-bol olvasni es abba a DB-be (akar kesleltetetten) irni.
Kovetkezmeny:
1. Alapeset: le akarunk kerdezni minden adatot, ahol a userunk aki epp be van lepve a FOREIGN KEY a tobbi adathoz, ezeket letoltjuk a mobilapphoz tartozo PARTIAL DB-jebe
2. Azoknak a tovabbi FOREIGN KEY-eihez tartozo adatokat is le akarjuk kerdezni a FULL DB-BOL a PARTIAL DB-be
3. Rajovunk, hogy ez igy nem eleg, van par statikus adattabla amit midenkeppen le akarunk kerdezni egeszben a FULL DB-bol a PARTIAL DB-be (pl. egy user jogosultsagokat vagy kategoria ID-kat tartalmazo altalaban kismeretu tabla), mert anelkul nem mukodik transzparensen az app offline (ezt mondjuk be tudjuk allitani egy config file-ban vagy egy include-ban)
4. Ha mar van configunk/include-unk, a FOREIGN KEY-ekkel meg nem jelolheto (pl. mas db-ben levo, vagy egy tablaban egyszerre ket oszlopban is elofordulo (pl. contact1: x user es contact2: y user es az is kell ahol a userunk x es az is ahol a userunk y)) adatokat is jo ha le tudjuk menteni, erre jo ha kulon meg tudunk adni szabalyokat, hogy "ezzel azt is fetch-eld le mindig a FULL DB-bol a PARTIAL DB-be"
+Idonkent valtoztatunk a tablakon (ALTER TABLE ADD COLUMN), ez ha pl. a szerveren (FULL DB, amit a webapp hasznal) megtortenik, akkor arrol valahogy (pl. verzioszam valtoztatasaval) szerezzen tudomast a szinkronizalasi kiserletnel az iOS/Android app (PARTIAL DB) is, mielott barmi tortenne, es modositsa a sajat semait ennek megfeleloen.
Kivant vegeredmeny:
-ugyanugy tudjuk megirni az SQL query-ket az iOS appban, az Android app-ban, es a webappban, de az iOS es az Android appban csak az a szelete legyen bent az adatbazisnak, amelyik az adott user interakcioihoz kell (ami nyilvan joval kevesebb rekordot takar).
-mindehhez a programozonak eleg legyen a configolason kivul es az "import fuggvenykonyvtar"-on kivul egy fuggvenykonyvtar.syncdb(userid)/[fuggvenykonyvtar syncdb forUser: userid] utasitast kiadnia
-primary key-ekben legyen mindig a webes appdb-nek igaza (pl. ott kezdodhet 10001-tol a primary key, a 10000 alattiak meg local recordok, es a webserver mogott futo db azoknak szinkronizalaskor ad egy globalis primary keyt amit a mobilapp letezo kapcsolat eseten magatol befrissit erre az egyetlen sync parancsra, ha a mobilapp 10001-edik local rekordot akar kesziteni, akkor meg Android/Java eseten ugye dobjon kivetelt, iOS/Objective-C/Cocoa Touch eseten meg returnoljon false-t/NSNull-t/Egyeb NSObject-et, es majd a programozo lekezeli, hogy hogy kene kozolni a userrel, hogy mostmar illene internetre csatlakozni).
-Amikor letrehozunk egy adatbazis semat, legyen egy egyszeru user tabla semank aminek dedikalt helye van a configban (az alapjan donti el a "sync" parancs, hogy milyen db szeletet ker le), es azon kivul amikor a tobbi CREATE TABLE/ALTER TABLE utasitast megirjuk, az jojjon letre transzparensen ugyanugy a webapp PostgreSQL/MySQL/Oracle db-jeben (PDO?), es ugyanugy az Android SQLite libjeben, es ugyanugy az iOS C-szintu SQLite db-jeben es/vagy a Cocoa Touch CoreData megoldasaban. Tehat ehhez is legyen eleg a config fajlba beirni a db szerver adatait, es a mar emlitett fuggvenykonyvtar.syncdb(userid)/[fuggvenykonyvtar syncdb forUser: userid] legyen eleg arra, hogy letrehozza/verziovaltozas eseten editalja a db-t semastol.
-emiatt lehetseges egy overhead: modification_date oszlop kotelezoen hozzaadodik pl. minden tablakhoz es/vagy edits/deletions tabla letre kell hogy hozodjon a szinkronizalas idoinek menedzslesere, stb.
-commit mindket helyen nyilvan akkor tortenik, ha a sync parancs vegen is van egymassal connection es ACK, kulonben rollback
[Felmerulhet a kerdes sokakban, hogy mi tortenik, ha nem csak egy user adatai kellenek, hanem egy usergroupe-e: lekerdezed a FOREIGN KEY-es modszerrel a group-ot es annak a tobbi rekordjat, es meg is jon resultkent a tobbi user, azoknak is besynceled az adatait userkey alapjan (vagy beallitod a configban, hogy GROUP ID-ra is menjen olyankor vegig)]
Kerdesek:
-Van ilyen fuggvenykonyvtar/framework? Az Icenium/Phonegap tudja ezt/ezeket/hasonlot ami _konnyen_ ezze alakithato? Bar az igazat megvallva azok tudtommal UI frameworkok (is), jobban orulnek, ha valami egyedul ezt a DB sync-es dolgot tudna (a la UNIX: "do one thing and do it well"), a maximum amit meg talan szivesen vennek az a DB sorobjektumainak az adott nyelv osztalypeldanyava valo konvertalasa (amit szerintem konnyebben fogok talalni joval, mint ilyen libet/frameworkot), de ez mar opcionalis, kevesbe lenyeges szempont.
-Amennyiben nincs ilyen, mennyire volna szerintetek igeny egy ilyen/ilyesmi libre? Lehet nekiesnek valami hasonlonak, ha az egyik-masik startup tervvel megis meggyoznek az ismerosok, hogy igenis eletkepes (mint irtam, mindnek igy esnek neki kozuluk, hogy ezt elobb megoldanam). :)
- 5491 megtekintés
Hozzászólások
DB kapcsán: couch?
- A hozzászóláshoz be kell jelentkezni
Koszi, elso ranezesre nem tunik rossznak. Irjak is az oldalukon, hogy "CouchDB works well with modern web and mobile apps", de ez utobbit nem igazan reszletezik tul. Van valakinek ezzel tapasztalata?
Kozben kideritettem, hogy CoreData-hoz sajna forditasideju tabladefinicio kell, ergo iOS-nel CoreData kilove a terveimhez. :( Az SQLite pedig ott eleg baratsagtalan, ergo lehet ott jobb lesz valami ilyesmi megoldas.
Szerk.: ahogy nezem ez akar meg jobb is lehet, ergo a DB engine is ugyanaz mindegyik platform alatt. Majd meglatom a gyakorlatban mennyire van jol implementalva.
Szerk2.: akit erdekel meg a kerdes: https://groups.google.com/forum/#!topic/mobile-couchbase/ETA4tBchUXU
En meg alszom ra egyet azert, fel kell fognom amiket itt irtak, foleg hogy ha jol vettem ki, az Android port meg nincs rendesen kiadva, "par honap meg".
- A hozzászóláshoz be kell jelentkezni
Utánanéztem mi ez és aludtam rá egyet. Reakcióm:
Te atya úristen ez a sz*r mégis mire jó? Csak hogy egy szemléletes példát mutassak:
http://stackoverflow.com/questions/2534376/how-do-i-do-the-sql-equivale…
Szerintem nem éppen normális, hogy több év DB-zés után még meg kéne tanulnom valami egészen mást, aminél alapvető kifejezéseket kell majd kigugliznom, mert az SQL túl mainstream volt. Ezenkívül ha jól veszem ki, ezek saját db engine-t is írtak maguknak, kiváncsi volnék, hogy egy Postgres-hez (még csak nem is Oracle-höz) képest hogyan performál két milliós nagyságrendű rekordot tartalmazó táblán egy subquery rajta.
Szóval ez nekem több szempontból is egy nem, pont az lett volna a lényeg, hogy ugyanazokat az SQL query-ket tudjam megírni a webapphoz, mint az iOS és az Android apphoz (csak az utóbbi kevesebb rekordon futtassa, meg (jelen terv szerint) csak a saját kicsinyített SQLite db-jén tegye mindezt).
Meg eleve, miért kellett ebbe az egészbe erlangot meg javascriptet belekeverni? Még az aszinkron hívásokhoz is ott van Androidon az asynctask, iOS-en meg a blokkok, gyönyörűen meg van oldva mindkét platformon, miért kell a fejlesztőre az ajaxot ott is ráerőltetni. De dolgoznak azon, hogy JS motor nélkül is elérhető legyen a couchdb motor, úgy már, "csak 5 megabájt" lesz a jelenlegi 10+ helyett a mobilapp indulási mérete (és mire ez kész lesz már eleve).
Tehát CouchDB -> NEM
Viszont amit megtanultam ezt olvasgatva: muszáj leszek Anroid mellett iOS-en is SQLite-ot használni (lehet jobb is), a CoreData a céljaimra alkalmatlan (főként a fordítási idejű tábladefiníciók miatt), de lehet hogy majd találnom/írnom kell mellé egy olyasmi libet, ami ahhoz hasonló, ami Androidon körülöleli az SQLite-ot, mert ez a C szintű SQLite lib elég kényelmetlen iOS-en.
- A hozzászóláshoz be kell jelentkezni
szép nagy feleslegességnek tűnik a couch ez alapján, köszönet hogy leírtad
amúgy ha találsz megoldást, mindenképpen közöld le itt, nem vagy egyedül ezzel a céloddal, csak én jelenleg még a ui framework egységesítésénél tartok csak, jelenleg legtöbb project-ben local-ban nem kell adatokat kezelni, de ez lesz a következő lépcső
- A hozzászóláshoz be kell jelentkezni
> én jelenleg még a ui framework egységesítésénél tartok csak
off: Qt Mobile-ra vess egy pillantást, de leglább erre a háromperces videóra: http://www.youtube.com/watch?v=-NdvLGbPAbc
- A hozzászóláshoz be kell jelentkezni
Legutobb mikor neztem Qt Mobile-t, iOS-nel meg nem volt az igazi. Ellenben en jobb szeretem a platform sajat UI toolkitjet hasznalni, de ha DB szinten tudna a Phonegap vagy az Icenium azt, amit elvarok, lehet kibekulnek azzal, hogy ok generaljak ki az UI kodjat is nekem. :)
- A hozzászóláshoz be kell jelentkezni
Lehet inkabb irni fogok egy ilyet es arulok majd hozza egy egy hetes oktatast es supportot (a kodot magat eladni eselytelen, ilyennek csak nyilt forrasu alapokon van letjogosultsaga). De ha valaki talal mar meglevo ilyet, azt elobb szivesen megnezem kozelebbrol.
- A hozzászóláshoz be kell jelentkezni
szép nagy feleslegességnek tűnik a couch ez alapján, köszönet hogy leírtad
Pedig nem az :) Baromi jó kis DB összeségében.
Mondjuk tény és való, hogy nem SQL, de reméltem, hogy ez első ránézésre világos lesz.
hogyan performál két milliós nagyságrendű rekordot tartalmazó táblán egy subquery rajta
Ha van rá kész view, akkor gyakorlatilag azonnal megkapod az eredményt.
pont az lett volna a lényeg, hogy ugyanazokat az SQL query-ket tudjam megírni a webapphoz, mint az iOS és az Android apphoz
Ezt tudja. De tényleg nem SQL :)
tl;dr: Elnézést a zsákutcáért.
- A hozzászóláshoz be kell jelentkezni
Így jár, aki csak SQL-ben tud gondolkodni.
Szelaví.
- A hozzászóláshoz be kell jelentkezni
És hány évtizede is használnak gyakorlatilag minden sikeres IT vállalatnál SQL-t? A legismertebb és legleterjedtebb és leginkább piacvezető db engine-ek egész véletlen nem SQL-en alapulnak? ;)
Ezenkívül (sok szakmabelivel ellentétben) nem magamnak/csak magamnak akarom összeállítani a direkt leegyszerűsített függvénykönyvtár-készletemet, ezért igyekszek mindent azon a szinten és technológián belül megoldani, amit a legkönnyebben el tud sajátítani az, aki pl. az iOS vagy az Android alkalmazások fejlesztését már elsajátította (és az ahhoz tartozó Objective-C-s/Javas környezetet). Márpedig több mint 90%-uk szintén SQL-ben fog gondolkodni. Vagy te írnál a veled dolgozó csoportnak egy frameworköt egy kevesek által használt nyelvet is beimportálva és megtanítanád mindenkinek "nemigazhogyeztsemtudod"-oznál? ;) (Ez volt ugyanis a baj a couchdb-vel is, minek bele az a másik két nyelv, az Obj-C és a Java nem volt Turing-teljes? ;) Nem beszélve arról, hogy ez eleve plusz méretet jelent és futásidőben is overheadet (Objective-C kódhoz képest biztosan))
- A hozzászóláshoz be kell jelentkezni
Larry a hajós, 15-20 éve azt mondta, hogy nincs szükség file rendszerre, mert SQL-ben is mindezt le lehet képezni.
Nos.
Homogén struktúrájú adatok tárolására az SQL igen jó.
De mi van, ha nem ilyen struktúrában a leghatékonyabb a tárolás? Miért kéne lookup táblák, join-ok, és egyéb vackokkal szarakodni, ha van hatékonyabb eszköz is?
Aztán vagy felismered, hogy mikor kell egyiket vagy másikat használnod, vagy nem.
- A hozzászóláshoz be kell jelentkezni
Nem erről van szó, hanem arról, hogy eleve azért akarom mind iOS-ben, mind Androidban a beépített SQLite könyvtárat használni, és a fejlesztő számára elérni azt a kényelmet, hogy ez kb. 2 extra sorába kerüljön, hogy annak, aki eddig a beépített SQLite függvényeket használta, az használhassa ezután is pont ugyanúgy, ahogy megtanulta, megszokta, kitapasztalta, és kiismerte a hibáival együtt.
És a példáim is eleve olyanok voltak, hogy igenis kellett a join meg a relációs adatbázisséma. Elhiszem, hogy valami más optimálisabb tudna lenni adott esetekben, de nekem inkább az számít, hogy miután megcsinálom, hányan fognak érteni hozzá (és a cél, hogy minél többen, majdnem mindent pont ugyanúgy kelljen utána is csinálniuk, ahogy előtte). És ez a couchdb-s erlangos meg javascriptes bohóckodás valljuk be, hogy ettől nagyon messze van. Biztosan nagyon jó egyébként a célra, lehet hogy valamit jobban, hatékonyabban és erőforrásbarátabban meg lehet benne csinálni, mint az én megoldásomban lehet majd, de hogy egy éven belül az én megoldásomra hamarabb fogsz összeszedni egy tíz fős hozzáértő csapatot, az is biztos.
A kevésbé ismert scriptnyelvekkel, meg az SQL-en kívüli db megoldással jelenleg pont ugyanaz a baj, mint az experimental elektronikus zenei stílusokkal - jól hangzik, de egyelőre többen szeretik megírni őket, mint ahányan szívesen hallgatják a stílust (és emiatt pont ugyanennyire is piacképes). :)
- A hozzászóláshoz be kell jelentkezni
Bár számodra úgy tűnt, de én egy szóval sem említettem a 'couchdb'-t.
- A hozzászóláshoz be kell jelentkezni
Meglehet. :) Akkor már csak abban nem értünk egyet, hogy érdemes-e ragaszkodni az SQL-hez? (szerintem azért igen, mert könnyebb hozzá szakértőket találni, még ha technikailag nem is a legjobb megoldás adott esetekben)
- A hozzászóláshoz be kell jelentkezni
iOS + SQLite reszhez:
Ugy tunik az fmdb megoldja a C szintunel szebb (konkretan obj-C nyelvi elemekbol osszerakott) SQL kezelest iOS-en, ha magamnak irom meg, jo esellyel ezt fel fogom hasznalni
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni
Codename One, h2database?
NFL van, csak ideimpróztam, bocs :D
- A hozzászóláshoz be kell jelentkezni