031.2 Lecke 1
Tanúsítvány: |
Web Development Essentials |
---|---|
Verzió: |
1.0 |
Témakör: |
031 Szoftverfejlesztés és webtechnológiák |
Fejezet: |
031.2 A webes alkalmazások architektúrája |
Lecke: |
1/1 |
Bevezetés
Az alkalmazás szónak sok jelentése van a szakzsargonban. Ha az alkalmazás egy hagyományos, helyben végrehajtott és önálló program, akkor mind az alkalmazás kezelőfelülete, mind az adatfeldolgozó komponensek egy “package”-ben (csomagban) vannak integrálva. Egy webalkalmazás eltér ettől, mivel adaptálja a kliens/szerver modellt, a kliens része HTML-en alapul, aminek a tartalmát a szerverről tölti le és a böngésző jeleníti meg.
Kliensek és szerverek
A kliens/szerver modell esetén a munka egy része lokálisan, a kliensoldalon történik és a munka egy része pedig távol, a szerveroldalon. Az egyes felek által elvégzendő feladatok az alkalmazás céljától függően változnak, de általában a kliens feladata, hogy felületet biztosítson a felhasználó számára, megfelelően elrendezett tartalommal. A szerver feladata, hogy futtassa az alkalmazás üzleti részét és válaszoljon az ügyfél kéréseire. Egy áruházi alkalmazás esetén például a kliens jeleníti meg azt a felületet a felhasználó számára, amin kiválaszthatja és kifizetheti a termékeket, de az adatforrás és a tranzakciórekordok a távoli szerveren vannak tárolva, amelyet a hálózaton keresztül ér el a kliens. A webes alkalmazások ezt a kommunikációt az interneten keresztül hajtják végre, általában a Hypertext Transfer Protocol (HTTP) segítségével.
Miután a böngésző betöltötte, az alkalmazás kliensoldala interakciót kezdeményez a szerverrel, amikor az szükséges vagy megfelelő. A webes alkalmazások szerverei egy alkalmazásprogramozási interfészt (API) kínálnak fel, amely meghatározza az elérhető kéréseket és azok végrehajtásának módját. Így a kliens az API által meghatározott formában készíti el a kérést és küldi el a szervernek, amely ellenőrzi a kérelem előfeltételeit és visszaküldi a megfelelő választ.
Míg mobilalkalmazás vagy asztali alkalmazás esetén a kliens a felhasználói felület és a szerverrel való kommunikáció tekintetében egy önálló program, a böngészőnek meg kell szereznie a HTML-oldalt és a hozzátartozó komponenseket—képeket, CSS-t és JavaScriptet--, amelyek meghatározzák a felületet és a szerverrel való kommunikáció utasításkészletét.
A kliensek és a szerverek által használt programozási nyelvek függetlenek, de kölcsönösen érthető kommunikációs protokollt használnak. A szerver részét szinte mindig egy grafikus felület nélküli program hajtja végre, amely magas elérésű számítási környezetben fut, így mindig készen áll a kérések megválaszolására. Ezzel szemben az ügyfél része minden olyan eszközök fut, amely képes HTML-felületek megjelenítésére, például okostelefonokon.
Amellett, hogy bizonyos célok esetén elengedhetetlen, a kliens/szerver modell lehetővé teszi, hogy az alkalmazások fejlesztése és karbantartása számos aspektusban optimalizált legyen, mivel minden rész a saját céljának megfelelően tervezhető. A térképeket és útvonalakat megjelenítő alkalmazásnak például nem kell minden térképet lokálisan tárolnia. Csak a felhasználó lokációját érintő térképek szükségesek, így csak azokat kell lekérnie a központi szerverről.
A fejlesztők közvetlenül irányíthatják a szervert, így módosíthatják az általa biztosított klienst is. Ez lehetővé teszi, hogy a fejlesztők kisebb-nagyobb mértékben javítsák az alkalmazást anélkül, hogy a felhasználóknak új verziókat kellene telepítenie.
A kliensoldal
Egy webes alkalmazásnak ugyanúgy kell futnia bármelyik legnépszerűbb böngészőn, feltéve, ha a böngésző naprakész. Előfordulhat, hogy egyes böngészők nem kompatibilisek a legújabb innovációkkal, de csak kísérleti alkalmazások használnak széles körben még nem elterjedt innovációkat.
Az inkompatibilitási problémák a múltban gyakrabban fordultak elő, amikor a különböző böngészők saját megjelenítő motorral rendelkeztek és kevesebb volt az együttműködés a szabványok kialakításában és elfogadásában. A megjelenítő motor a böngésző fő alkotóeleme, felelőssége a HTML és más összetevők átalakítása a felület vizuális és interaktív elemeivé. Néhány böngésző, különösen az Internet Explorer különleges bánásmódot igényelt a kódolás során, nehogy megtörje az oldalak elvárt működését.
Ma minimális különbségek vannak a főbb böngészők között és az inkompatibilitás is ritka. A Chrome és az Edge böngészők ugyanazt a megjelenítőmotort használják (a Blink-et). A Safari böngésző és az iOS App Store egyéb böngészői a WebKit motort használják, míg a Firefox a Gecko motort. Ez a három motor gyakorlatilag minden manapság használt böngészőt lefed. Bár külön-külön fejlesztették őket, mindhárom motor nyílt forráskódú projekt, fejlesztőik együttműködnek ami megkönnyíti a kompatibilitást, a karbantartást és a szabványok adaptálását.
Mivel a böngészők fejlesztői sok erőfeszítést tesznek a kompatibilitásért, a szerver általában nem egyetlen típusú klienshez kapcsolódik. Elvileg egy HTTP-szerver képes kommunikálni bármely klienssel, amely szintén képes HTTP-n keresztül kommunikálni. Egy térkép alkalmazás esetén például a kliens lehet egy mobilalkalmazás vagy egy böngésző, ami a HTML felületet tölti le a szerverről.
Különböző webes kliensek
Vannak olyan asztali- és mobilalkalmazások, amelyek felülete HTML és a böngészőkhöz hasonlóan használhatják a JavaScriptet programozási nyelvként. A böngészőbe betöltötött klienssel szemben ebben az esetben a HTML és a natív kliens működéséhez szükséges összetevők az alkalmazás telepítése óta lokálisan érhetők el. Valójában egy ilyen módon működő alkalmazás megegyezik egy HTML oldallal (sőt, mindkettőt valószínűleg ugyanaz a motor fogja megjeleníteni). Vannak úgynevezett progresszív webes alkalmazások (PWA), ami egy olyan mechanizmus, ami lehetővé teszi a webes alkalmazások kliensének offline használatát—olyan funkciókra korlátozva, amelyek nem igényelnek azonnali kommunikációt a szerverrel. Ami az alkalmazás teendőit illeti, nincs különbség a böngésző futtatása vagy a PWA-ba csomagolás között, kivéve, hogy utóbbiban a fejlesztő jobban kontrollálhatja, mi kerül lokálisan tárolásra.
A felületek HTML-ből való megjelenítése olyannyira visszatérő tevékenység, hogy a motor általában egy különálló szoftverkomponens, amely az operációs rendszerben van jelen. Külön komponensként való jelenléte lehetővé teszi, hogy a különböző alkalmazások anélkül használják, hogy be kéne építeni a csomagba. Ez a modell a megjelenítő motor karbantartását is az operációs rendszerre bízza, megkönnyítve a frissítést. Nagyon fontos, hogy egy ilyen kulcsfontosságú összetevőt naprakészen tartsunk az esetleges meghibásodások elkerülése érdekében.
Függetlenül attól, hogy hogyan kapjuk meg őket, a HTML-ben megírt alkalmazások a motor által létrehozott absztrakciós rétegen futnak, amely egy elszigetelt környezet. Böngészőben futó kliens esetén az alkalmazásnak csak a böngésző által kínált erőforrások állnak a rendelkezésére. Mindig rendelkezésre állnak az olyan alapvető funkciók, mint az oldal elemeivel való interakció és a fájlok HTTP-n keresztüli kérése. Az olyan erőforrások, amelyek érzékeny információkat tartalmazhatnak, mint például a lokális fájlokhoz, földrajzi helyhez, kamerához és mikrofonhoz való hozzáférés, kifejezett felhasználói engedélyt igényelnek, mielőtt az alkalmazás használni tudná őket.
Webes kliens nyelvek
A szerveren futó webalkalmazás kliensének központi eleme a HTML-dokumentum. Amellett, hogy a böngésző strukturáltan jeleníti meg a felület elemeit, a HTML-dokumentum tartalmazza az összes olyan fájl címét, ami szükséges a kliens megfelelő megjelenítéséhez és működéséhez.
A HTML önmagában nem eléggé sokoldalú a bonyolultabb felületek létrehozásához és nem rendelkezik általános célú programozási funkciókkal, emiatt azt a HTML-dokumentumot, ami kliensalkalmazásként működik, mindig egy vagy több CSS és JavaScript készlet egészíti ki.
A CSS különálló fájlként vagy közvetlenül a HTML-fájlban is megadható. A CSS fő célja a HTML-felületen lévő elemek megjelenítésének és elrendezésének beállítása. Bár nem feltétlenül szükséges, a kifinomultabb felületek általában az elemek CSS tulajdonságainak módosítását igénylik, hogy megfeleljenek az igényeknek.
A JavaScript gyakorlatilag nélkülözhetetlen összetevő. A JavaScriptben írt eljárások a böngésző eseményeire reagálnak. Ezek az események lehetnek a felhasználó által kiváltott vagy nem interaktív események. Egy HTML-dokumentum JavaScript nélkül gyakorlatilag képekre és szövegre korlátozódik. A JavaScript használata HTML-dokumentumokban lehetővé teszi az interaktivitás kiterjesztését a linkeken és a formokon túlra, így a böngésző által megjelenített oldal olyan lesz, mint egy hagyományos alkalmazás felülete.
A JavaScript egy általános célú programozási nyelv, de fő felhasználási területe a webes alkalmazások fejlesztése. A böngésző futtatási környezetének funkciói a JavaScript kulcsszavain keresztül érhetők el, amelyeket egy szkriptben a kívánt művelet elvégzéséhez használunk. A dokumentum
(document) kifejezés például a JavaScript kódban a JavaScripthez kapcsolódó HTML-dokumentumra utal. A JavaScript nyelv kontextusában a document
egy olyan tulajdonságokkal és metódusokkal rendelkező globális objektum, amely a HTML-dokumentum bármely eleméből származó információ megszerzésére használható. Ennél is fontosabb, hogy a document
objektum segítségével módosíthatjuk az elemeit és társíthatjuk őket a JavaScriptben írt egyéni műveletekhez.
A webes technológiákon alapuló kliensalkalmazás multiplatformos, mivel bármilyen eszközön futtatható, amelyen van kompatibilis böngésző.
A böngészőre korlátozódás azonban korlátozza a webes alkalmazásokat a natív alkalmazásokhoz képest. A böngésző általi közvetítés magasabb szintű programozást tesz lehetővé és növeli a biztonságot, de növeli a feldolgozási időt és a memóriafogyasztást is.
A fejlesztők folyamatosan dolgoznak rajta, hogy a böngészők több funkciót biztosítsanak és javítsák a JavaScript alkalmazások teljesítményét, de az olyan szkriptek végrehajtásának, mint a JavaScript, vannak olyan sajátos szempontjai, amelyek hátrányt jelentenek a natív programokhoz képest ugyanazon hardver esetén.
A böngészőben futó JavaScript alkalmazások teljesítményét jelentősen javítja a WebAssembly. A WebAssembly egyfajta lefordított JavaScript, amely egy hatékonyabb, alacsonyabb szintű nyelven, például C nyelven írt forráskódot állít elő. A WebAssembly elsősorban a processzorigényes tevékenységeket gyorsíthatja fel, mivel a böngésző által a hagyományos JavaScriptben írt program futtatásakor végzett fordítás nagy részét elkerüli.
Az alkalmazás megvalósításának részleteitől függetlenül minden HTML-kódot, CSS-t, JavaScriptet és multimédiafájlt először a szerverről kell beszerezni. A böngésző ezeket a fájlokat ugyanúgy szerzi meg, mint egy internetes oldalt, azaz egy böngésző által elérhető címről.
A webes alkalmazás interfészeként működő webalkalmazás olyan, mint egy egyszerű HTML-dokumentum, de további viselkedési elemeket tud hozzáadni. Hagyományos oldalak esetében a felhasználónak egy linkre kell kattintania ahhoz, hogy átirányítsák egy másik oldalra. A webalkalmazások anélkül tudják megjeleníteni a felületet és reagálni a felhasználói eseményekre, hogy új oldalakat töltenének be a böngészőbe. A HTML-oldalak e szabványos viselkedésének módosítása JavaScript programozással történik.
Egy webmail kliens például megjeleníti az üzeneteket és az üzenetmappák között az oldal elhagyása nélkül váltogat. Ez azért lehetséges, mert a kliens JavaScriptet használ a felhasználói műveletekre való reagáláshoz és a szerverhez intézett megfelelő kérésekhez. Ha a felhasználó a bejövő üzenetek között egy levél tárgyára kattint, az ehhez az eseményhez kapcsolódó JavaScript kód lekéri a kiszolgálótól az adott üzenet tartalmát (a megfelelő API-hívás segítségével). Amint a kliens megkapja a választ, a böngésző megjeleníti az üzenetet ugyanannak az oldalnak a megfelelő részén. A különböző webmail-kliensek különböző stratégiákat alkalmazhatnak, de mind ugyanazt az elvet használják.
Ezért a szervernek amellett, hogy a böngésző számára rendelkezésre kell bocsátania a klienst alkotó fájlokat, képesnek kell lennie az olyan kérések kezelésére is, mint a webmail-kliens kérése, amikor az egy adott üzenet tartalmát kéri le. Minden kérésnek, amit a kliens indíthat, van egy előre meghatározott eljárása, amelyre a szervernek válaszolnia kell, amelynek az API-ja különböző módszereket határozhat meg annak azonosítására, hogy a kérés melyik eljárásra vonatkozik. A leggyakoribb módszerek az alábbiak:
-
Címek, URL-en (Uniform Resource Locator) keresztül
-
A HTTP fejléc mezői
-
GET/POST metódusok
-
WebSocketek
A request (kérés) céljától és a fejlesztő által figyelembevett egyéb szempontoktól függően az egyik módszer alkalmasabb lehet a másiknál. Általában a webes alkalmazások a módszerek kombinációját használják, mindegyiket adott körülmények között.
The Representational State Transfer (REST) paradigm is widely used for communication in web applications, because it is based on the basic methods available in HTTP. The header of an HTTP request starts with a keyword that defines the basic operation to be performed: GET
,POST
, PUT
,DELETE
, etc., accompanied by a corresponding URL where the action will be applied. If the application requires more specific operations, with a more detailed description of the requested operation, the GraphQL protocol may be a more appropriate choice.
A kliens/szerver modellel kifejlesztett alkalmazások ki vannak téve a kommunikáció instabilitásának. Emiatt az ügyfélalkalmazásnak mindig hatékony adatátviteli stratégiákat kell alkalmaznia annak érdekében, hogy előnyben részesítse a konzisztenciát, és ne sérüljön a felhasználói élmény.
A szerveroldal
Annak ellenére, hogy a szerver a webes alkalmazás főszereplője, a kommunikációban csak passzív szereplő, mivel csak a kliens által küldött kérésekre válaszol. A webes szakzsargonban a szerver utalhat a kéréseket fogadó gépre, a kifejezetten HTTP-kéréseket kezelő programra vagy a kérésre választ adó címzett szkriptre. Utóbbi meghatározás a legrelevánsabb a webes alkalmazás architektúrájának szempontjából, de mindhárom szorosan összefügg. Bár csak részben tartoznak az alkalmazáskiszolgáló fejlesztőjének hatáskörébe, a gépet, az operációs rendszert és a HTTP-kiszolgálót nem lehet figyelmen kívül hagyni, mivel ezek alapvető fontosságúak az alkalmazáskiszolgáló működtetéséhez, és gyakran keresztezik egymást.
Kérésekből származó útvonalak kezelése
Az olyan HTTP-szerverek, mint az Apache és az NGINX általában speciális konfigurációs módosításokat igényelnek az alkalmazás igényeinek megfelelően. Ha például egy weboldal HTTP-kiszolgálója a HTML-fájljait a /srv/www
mappában tárolja, akkor az /en/about.html
elérési útvonallal küldött kérés a /srv/www/en/about.html
fájl tartalmát kapja válaszként, ha a fájl létezik. A kifinomultabb weboldalak és különösen a webes alkalmazások a különböző típusú kérésekhez testreszabott kezelést igényelnek. Ebben az esetben az alkalmazás megvalósításának része a HTTP-kiszolgáló beállításainak módosítása az alkalmazás követelményeinek megfelelően.
Vannak olyan alternatív keretrendszerek is, amelyek lehetővé teszik, hogy a HTTP-kérelmek kezelését és az alkalmazáskód implementálását egy helyen integrálja, így a fejlesztő inkább koncentrálhat az alkalmazás céljára a platform részei helyett. A Node.js Expressben például az összes kérés leképezése és a programozás JavaScript segítségével valósítható meg. Mivel a kliensek programozása általában JavaScriptben történik, sok fejlesztő a kód karbantartása szempontjából jó ötletnek tartja, hogy ugyanazt a nyelvet használja a kliens és a szerver esetén is. A szerveroldal megvalósítására - akár keretrendszerekben, akár hagyományos HTTP-szerverek esetén - gyakran használt egyéb nyelvek a PHP, a Python, a Ruby, a Java és a C#.
Adatbázis-kezelő rendszerek
A fejlesztőcsapat belátására van bízva, hogy az ügyfél által kapott vagy kért adatokat hogyan tárolja a szerveren, de vannak általános irányelvek, amelyek a legtöbb esetben alkalmazandók. A statikus tartalmakat—képeket, rövidtávon nem változó JavaScript és CSS kódokat, amik nem változnak—célszerű hagyományos fájlként tárolni, vagy a kiszolgáló saját fájlrendszerén, vagy egy tartalomkiszolgáló hálózaton (Content Delivery Network - CDN). Más típusú tartalmakat, például az e-mail üzeneteket egy webmail alkalmazásban, a termékadatokat egy vásárlási alkalmazásban és a tranzakciós naplókat célszerűbb egy adatbázis-kezelő rendszerben (Database Management System - DBMS) tárolni.
Az adatbázis-kezelő rendszerek leghagyományosabb típusa a relációs adatbázis. Ebben az alkalmazás tervezője határozza meg az adattáblákat és az egyes táblák által elfogadott bemeneti formátumot. Az adatbázisban lévő táblák halmaza tartalmazza az alkalmazás által felhasznált és előállított összes dinamikus adatot. Egy vásárlási alkalmazásnak például lehet egy olyan táblája, amely az áruházban található minden egyes termék adatait tartalmazó bejegyzést tartalmaz, valamint egy olyan tábla, amely a felhasználó által megvásárolt tételeket rögzíti. A megvásárolt tételek táblája hivatkozásokat tartalmaz a terméktábla bejegyzéseire, ezzel kapcsolatot hozva létre a táblák között. Ez a megközelítés optimalizálhatja a tárolást és az adatokhoz való hozzáférést, valamint lehetővé teszi a kombinált táblákban történő lekérdezéseket az adatbázis-kezelő rendszer által elfogadott nyelven. A legnépszerűbb relációs adatbázis-nyelv a Strukturált Lekérdező Nyelv (Structured Query Language - SQL), amelyet a nyílt forráskódú SQLite, MySQL, MariaDB és PostgreSQL adatbázisok alkalmaznak.
A relációs adatbázisok alternatívájaként szolgál az adatbázis olyan formája, amely nem igényel merev struktúrát az adatok számára. Ezeket az adatbázisokat nem-relációs adatbázisoknak vagy egyszerűen NoSQL-nek nevezik. Bár tartalmazhatnak néhány, a relációs adatbázisokhoz hasonló jellemzőt, a hangsúly a tárolt adatok nagyobb rugalmasságának és a tárolt adatokhoz való hozzáférésnek a lehetővé tételén van, az adatok feldolgozásának feladatát pedig magára az alkalmazásra bízzák. A MongoDB, a CouchDB és a Redis gyakran használt nem-relációs adatbázis-kezelő rendszerek.
Tartalomkezelés
Függetlenül a használt adatbázis-modelltől, az alkalmazásoknak adatokat kell hozzáadniuk és valószínűleg frissíteniük is az alkalmazások élettartama alatt. Néhány alkalmazásban, mint például egy webmail, a felhasználók maguk szolgáltatnak adatokat az adatbázisnak, amikor a kliens segítségével üzeneteket küldenek és fogadnak. Más esetekben, mint például áruházi alkalmazásokban, fontos, hogy az alkalmazás karbantartói programozás nélkül tudják módosítani az adatbázist. Sok szervezet ezért valamilyen tartalomkezelő rendszert (Content Management System - CMS) használ, amely lehetővé teszi a nem műszaki felhasználók számára az alkalmazás kezelését. Ezért a legtöbb webes alkalmazás esetén legalább kétféle klienst kell implementálni: egy nem privilegizált klienst, amelyet a hétköznapi felhasználók használnak, és egy privilegizáltat, amelyet a speciális felhasználók használnak az alkalmazás által bemutatott információk karbantartására és frissítésére.
Gyakorló feladatok
-
Milyen programozási nyelvet használunk a HTML mellett a webes alkalmazások klienseinek létrehozásához?
-
Miben különbözik egy webes alkalmazás lekérdezése egy natív alkalmazásétól?
-
Miben különbözik egy webes alkalmazás a helyi hardverhez való hozzáférés tekintetében egy natív alkalmazástól?
-
Nevezzük meg a webalkalmazás kliensének egy olyan jellemzőjét, amely megkülönbözteti azt egy közönséges weboldaltól!
Gondolkodtató feladatok
-
Milyen funkciót ajánlanak a modern böngészők a CPU-t intenzíven használó webes alkalmazások klienseinek gyenge teljesítménye ellen?
-
If a web application uses the REST paradigm for client/server communication, which HTTP method should be used when the client requests the server to erase a specific resource?
-
Nevezzünk meg öt, az Apache HTTP-szerver által támogatott szkriptnyelvet!
-
Miért tartják a nem-relációs adatbázisokat könnyebben karbantarthatónak és frissíthetőnek, mint a relációs adatbázisokat?
Összefoglalás
Ez a lecke a webfejlesztési technológia és architektúra fogalmait és szabványait tárgyalja. Az alapelv egyszerű: a böngésző futtatja a klienst, ami a szerveren futó központi alkalmazással kommunikál. Bár elméletben egyszerű, a webes alkalmazásoknak számos technológiát kell kombinálniuk, hogy adaptálják a kliens- és szerverszámítás elvét a weben. Ez a lecke az alábbi fogalmakat veszi át:
-
A böngészők és a webszerverek szerepe.
-
Gyakori webes fejlesztési technológiák és szabványok.
-
Hogyan kommunikálhatnak a kliensek a szerverrel.
-
A szerverek és adatbázisok típusa.
Válaszok a gyakorló feladatokra
-
Milyen programozási nyelvet használunk a HTML mellett a webes alkalmazások klienseinek létrehozásához?
JavaScript
-
Miben különbözik egy webes alkalmazás lekérdezése egy natív alkalmazásétól?
Egy webes alkalmazás nincs telepítve. Ehelyett a részei a szerveren futnak, a kliens interfész pedig egy közönséges webböngészőben.
-
Miben különbözik egy webes alkalmazás a helyi hardverhez való hozzáférés tekintetében egy natív alkalmazástól?
A helyi erőforrásokhoz, például a tárolókhoz, kamerákhoz vagy mikrofonokhoz való hozzáférést a böngésző közvetíti, és a működéshez kifejezett felhasználói engedélyre van szükség.
-
Nevezzük meg a webalkalmazás kliensének egy olyan jellemzőjét, amely megkülönbözteti azt egy közönséges weboldaltól!
A hagyományos weboldalakkal való interakció alapvetően a hivatkozásokra és az űrlapok elküldésére korlátozódik, míg a webes alkalmazások kliensei közelebb állnak a hagyományos alkalmazások interfészéhez.
Válaszok a gondolkodtató feladatokra
-
Milyen funkciót ajánlanak a modern böngészők a CPU-t intenzíven használó webes alkalmazások klienseinek gyenge teljesítménye ellen?
A fejlesztők a WebAssembly-t használhatják a kliensalkalmazás CPU-t intenzíven használó részeinek megvalósítására. A WebAssembly kód általában jobb teljesítményt nyújt, mint a hagyományos JavaScript, mivel kevesebb utasítás lefordítását igényli.
-
If a web application uses the REST paradigm for client/server communication, which HTTP method should be used when the client requests the server to erase a specific resource?
REST relies on standard HTTP methods, so it should use the standard
DELETE
method in this case. -
Nevezzünk meg öt, az Apache HTTP-szerver által támogatott szkriptnyelvet!
PHP, Go, Perl, Python és Ruby.
-
Miért tartják a nem-relációs adatbázisokat könnyebben karbantarthatónak és frissíthetőnek, mint a relációs adatbázisokat?
A relációs adatbázisokkal ellentétben a nem relációs adatbázisok nem követelik meg, hogy az adatok merev, előre meghatározott struktúrákba illeszkedjenek, ami megkönnyíti az adatszerkezetek módosítását a meglévő adatok befolyásolása nélkül.