Program saját használatra
Sziasztok!
Ti hogyan készítenétek el saját magatoknak egy adatbázist használó programot? (Például naptár programot.)
A.) „asztali programozással” pl.: C++
B.) „webszerver oldali programozással” pl.: PHP, MySQL
C.) „kliens oldali programozással” pl.: JavaScript, SQLite
1. Melyiknek mi az előnye és mi a hátránya?
2. Melyik a legmobilisebb, legtöbb helyen futtatható és melyiknél oldható meg a legkönnyebben a szinkronizálás? (C aztán, B végül A?)
3. Melyik a legbiztonságosabb? (Szigorú tűzfal mögül ~ nagyjából csak választ enged be. SQLite esetében pedig: a böngésző mappájában csak egy szimbolikus link lenne az SQLite fájlra.)
■ Ti hogyan készítenétek el saját magatoknak egy adatbázist használó programot? (Például naptár programot.)
A.) „asztali programozással” pl.: C++
B.) „webszerver oldali programozással” pl.: PHP, MySQL
C.) „kliens oldali programozással” pl.: JavaScript, SQLite
1. Melyiknek mi az előnye és mi a hátránya?
2. Melyik a legmobilisebb, legtöbb helyen futtatható és melyiknél oldható meg a legkönnyebben a szinkronizálás? (C aztán, B végül A?)
3. Melyik a legbiztonságosabb? (Szigorú tűzfal mögül ~ nagyjából csak választ enged be. SQLite esetében pedig: a böngésző mappájában csak egy szimbolikus link lenne az SQLite fájlra.)
Probléma
Mindegyiknek rengeteg előnye és hátránya van. Ha leírod, melyik kérdésed mit jelent, akkor talán lehet rá válaszolni. Na meg, az is kérdéses, mit akarsz megoldani az alkalmazással.
Nincs olyan, hogy legmobilisebb. Határozd meg a célplatformot, és akkor tudjuk, azon milyen lehetőségek vannak. Minden lehetőség operációs rendszer és eszköz képesség függő. Hiába írtál meg egy iszonyú jó Java alkalmazást, ha az csak grafikus környezetben fut, az eszköz, amin használni akarod pedig szöveges. Talán érdemes szöveges módú alkalmazást írni DOS környezetben, azt támogatja a legtöbb operációs rendszer valami emulációs környezetben. Talán még C64 kód is lehet, arra is van rengeteg emulátor. Minden attól függ mit akarsz csinálni, nincs olyan, hogy egy megoldás mindent visz.
A kérdésnek szintén nincsen értelme, minden környezetben megoldható a szinkronizálás hasonló bonyolultsággal.
Az, amelyiket a legbiztonságosabbra írod. A kérdésnek nincs ebben a formában értelme, mert nem tudjuk, mit akarsz megvalósítani. A legbiztonságosabb talán, egy C64-en futtatni, ami egy aggregátorról veszi az áramot és a Gobi sivatag közepén van elásva 20 km mélyre, egy 50 m falvastagságú betonacél-ólom borítású tömbben.
Pontosítás
A hogyan-t úgy értettem, hogy a A-C variációból melyik megközelítés a legjobb. (Például később se kelljen nagyon módosítani, hogy akár a jövőbeli Chrome OS-szerű rendszerekbe is át lehessen vinni. Vagy ez a szempont már a biztonság rovására megy?)
Asztali programozás alatt értem az asztali alkalmazásokat, pl. jegyzettömb, számológép. Klienset meg a böngészőre értem, akár úgy is, mint például az Opera widget motorja és a többi böngésző hasonló megoldása.
A célplatformnál Ubuntura, Windowsra és Androidra gondoltam. A cél hogy ezek között lehessen minél könnyebben adatot cserélni. (Az elég Androidnál, hogyha egyszerűen a memória kártyán lévő tároló fájt olvasom és írom.)
A 3. válaszod tetszett. :-) Itt arra gondoltam, hogy kívülről melyikhez a legnehezebb hozzáférni.
Saját vélemény
Az SQL-hez pedig nem tudom miért ragaszkodsz, talán érdemes lenne megismerkedned a NoSQL rendszerekkel is. A biztonságnál pedig tényleg csak az a lényeg, hogy te mennyire biztonságos rendszert fejlesztesz.
Az SQL-hez pedig nem tudom
Feladatfüggő
A másik dolog ami pl. a MySQL-lel és hasonlókkal, hogy alapból szolgáltatásként futnak, amik akkor is terhelik a gépet, amikor nincs is szükség rájuk. Elég lenne őket az alkalmazás futási idejére elindítani, majd az alkalmazás végén bezárni.
Olyan rendszerekre gondolok itt NoSQL alatt, mint például a Solr, és amire épül a Lucene. Kényelmesen tud indexelni adatokat, valamint nagyon hordozható, és gyors is. Nagy mennyiségű adat mellett is gyorsabb mint pl. egy MySQL ugyanakkor csak keresésre jó, az adatok tárolását és a Lucene / Solr rendszerbe küldését neked kell megoldani.
Teljesen más tészta a MongoDB vagy CouchDB, amik dokumentum alapúak, és a beállított indexek mentén tudnak keresni. A választás attól függ, mennyi gépen akarod futtatni, is a sebesség vagy a megbízhatóság a szempont.
A MongoDB például nagy mennyiségű adat mellett is nagyon gyors, főleg mivel nagyon jó a replikációs képessége (master-slave). Képes az adatbázisokat feldarabolni (sharding).
A CouchDB kicsit fejlettebb replikációs képességekkel rendelkezik (master-master), verziókezelni tudja a dokumentumokat, de valamivel lassabb.
A fentieknek az egyik fontos előnye, hogy JavaScript barát adatformátummal és lekérdezési rendszerrel dolgoznak, illetve a szerver oldalon abban programozhatók. Kovács Kristófnak van egy nagyszerű összehasonlítása, hogy mikor melyiket érdemes használni.
Ami hátrány tud lenni a legtöbb NoSQL rendszerben, hogy az adatokat gyakran denormalizálni kell, hogy megfelelően kereshetővé tehessük. Ezáltal nő a helyfoglalása az adatbázis adatoknak, ezért például mobilon használt alkalmazásoknál inkább ajánlott pl. SQLite-ot használni, ami kevés helyet foglal, valamint az adatbázismotor sem igényel jelentős memóriát és tárhelyet az adatok mellett.
A MongoDB honlapján régebben
A MongoDB honlapján régebben
Én nem tudok ilyenről, pedig a mi adatbázisaink több mint 100Gb-osak és több százezer dokumentum van egy adatbázisban.
A mobil eszközöknél általában a memória fix, ezért ott igenis ügyelni kell arra, hogy az alkalmazásunk és annak komponensei mennyi memóriát fogyasztanak. Asztali környezetben természetesen más a helyzet, bár ott is érdemes ügyelni a memória fogyasztásra.
Megtaláltam. Az
Az adatbázisoknál meg csak a szerverekre gondoltam.
range
Találtam egy érdekes cikket,
+1 buzzword
Megnézve a VoltDB oldalt
Google Calendar APIs and Tools
Fenntartva, hogy ez így
Cross-platform akkor lesz, ha minden (vagy legalábbis a legtöbb) platformon létezik hozzá valamilyen értelmező (interpreter), ami az adott operációs rendszeren futtatja a kódodat. Egy php scriptet is futtathatsz asztali alkalmazásként, de a legjobb megoldás talán a java, mert az a legelterjedtebb, Window, Linux, OSX, mobil platformokon is működhet. Ekkor az adatbázisod valszeg azon a gépen lesz, ahol futtatod, és ettől nehezen tudod majd ténylegesen átvinni az egyik eszközről a másikra. (Át kell vinni az adatbázismotort és a teljes db dumpot.) De használhatsz valami hálózati erőforrást is adatbázisnak, akkor ezt kikerülöd.
Legjobb talán, ha webszervert működtetsz, mert http kliens létezik minden platformon (a nem grafikus platformokon is), az adatokat pedig egy helyen, a szerveren tudod tárolni. A szerver valószínűleg publikus elérésű, ezért ha a biztonság nagyon fontos, tedd htaccess mögé, szolgáltasd a 44447-es porton, illetve írd biztonságosra a kódot.
SQLite és társai
A Java pedig a mobil platformokon eleve rosszul támogatott, és ahol van, ott is csak egy meglehetôsen szûk eszközkészlettel.
Hogy férek hozzá a mobil fájlaihoz?
Már korábban is próbáltam, de nem sikerült a mobilon lévő fájlokhoz hozzáférnem. A mobiltelefonom pendriveként csatlakozik a számítógépre. Ha beírom a csatolási pont címét a böngészőbe, akkor látom a tartalmát, de ugyanezt PHP-ből már nem tudom megnyitni. A mappa jogosultsága rwx a tulajnak, a többieknek nincsen semmilyen joga. Ha MC-ben a haladó chown-al átállítom (777), akkor sem változik semmi, még a mappa jogosultság sem.
Az etc/fstab-ban nincs megemlítve ez az usb-s csatlakozási pont.
A php melyik felhasználói névvel fut? A print(exec('whoami',$kimenet)); print_r($kimenet); parancsokra csak egy üres tömböt kapok.
Mi lehet a hiba? Hogy tudok hozzáférni a fájlokhoz?
(Ubuntut használok.)