MongoDB

Régóta keresem a kapcsolatot a NoSQL adatbázisokkal. Ezek közül az egyik legelterjedtebb a MongoDB, a hírekben is erről hallani a legtöbbet. Rengeteg energiát fordítanak a népszerűsítésére, remek dokumentációja van, sok videót lehet találni, konferenciákat szerveznek, neves előadókat beszéltetnek különböző felhasználási területekről, sikersztorikról. Ennek a stratégiának a része a MongoDB University is, ahol különböző online tanfolyamokon lehet részt venni. A dolog szépsége, hogy a tanfolyamok teljesen ingyenesek, de ennek ellenére rendkívül igényesen ki vannak dolgozva. Van kurzus Java, Python és Node.JS fejlesztőknek, de van egy külön DBA-knak tartott tanfolyam is. Mivel már régóta második nyelvként a Python-t használom, a M101P: MongoDB for Developers tanfolyamot végeztem el, melynek során a programozási példák Pythonban voltak, és ezen a nyelven kellett megírni a gyakorlati feladatokat is. Külön meglepetés volt, hogy kaptunk egy Pycharm 90 napos licencet is, mely a JetBrains IDE-je, nem kevésbé kitűnő szoftver, mint az IDEA, melyről csak szuperlatívuszokban tudok beszélni.

Maga a tanfolyam egy 7 hetes képzés volt, hetente új tananyaggal. Az első hét az alapfogalmakat tisztázta, és segített a környezet beüzemelésében. A fejlesztés a Bottle pehelysúlyú webes keretrendszerrel és a Pymongo klienssel történt, sokak bánatára még csak Python 2.7-ben. Külön érdekes volt a Bottle megismerése, mellyel hatékonyan tudunk egyszerű webes alkalmazásokat összedobni. Az első héten elmagyarázták a JSON rejtelmeit is, hiszen a MongoDB natívan JSON dokumentumokat kezel, de valójában minden JSON-ben van, pl. egy explain plan, vagy egy belső statisztika is JSON-ben jön vissza. A konzolja maga egy JavaScript interpreter, nagyon tetszett, hogy pl. a következő utasítással lehet gyorsan teszt adatokat generálni.

for (var i = 1; i <= 25; i++) db.testData.insert( { x : i } )

Majd egy utasítással lekérdezzük a generált adatokat.

db.testData.find()

A második hét szólt a CRUD műveletekről, a harmadik a séma tervezésről. A következő három hét volt az izgalmasabb, amikor is először a teljesítményről volt szó, azaz az indexek használatáról, majd az aggregation frameworkről, mellyel, mint a neve is mutatja komplex lekérdezéseket tudunk futtatni. Eztán következett a replikáció és a sharding. Az utolsó hét laza volt, ekkor két esettanulmány hangzott el.

Egy hét úgy telt, hogy hét elején elérhetővé váltak a videók, kb. hetente 1-2,5 órányi terjedelemben, de fel voltak vágva apró darabokra, jellemzően 3-6 perces részekre. Mindegyik videó után volt egy egyszerű kis teszt, mely ellenőrizte, hogy megértetted-e az elhangzottakat. Majd mindegyik hét végén volt házi feladat, 3 - 5 feladattal, melyek általában gyakorlati példák voltak. Vagy programot kellett írni, vagy egy bonyolultabb lekérdezést. Van, hogy adták az adatbázis tartalmat, melyet be kellett tölteni. Volt egy példa alkalmazás, egy blog motor, melynek a perzisztens rétegét kellett megírni, bár jellemzően eléggé ki volt preparálva, csak egy-két sort kellett bele írni. A feladat ellenőrzése úgy történt, hogy vagy az eredményt kellett beírni, vagy tesztkérdések közül kiválasztani, vagy lefuttatni egy programot, melynek eredményét kellett elküldeni. (Pl. webes klienst szimulálva teszt eseteket futtatott, és ha sikeres volt, akkor adott egy számot, amit el kellett küldeni.) A megoldásokat a következő hét elejéig kellett beküldeni.

A hetedik héten kellett megoldani a vizsgafeladatokat, szám szerint tízet. Ebben volt teszt és gyakorlati példa is. Volt egyszerűbb, de volt olyan is, melyen sokat kellett gondolkozni, és a videókat is visszanézni, hogy biztos legyél a dolgodban. Az volt az érdekessége, hogy itt nem kaptál visszajelzést, hogy jó-e a válasz.

A végén az értékelés úgy történt, hogy a legrosszabb hetet kivéve fogták a heti házi feladatok, és a vizsga átlagát, és ha 60% felett voltál, még egy bizonyítványt is kaptál (PDF-ben, egyedi azonosítóval, mely ellenőrizhető).

A tanfolyam alatt végig működött egy fórum és egy wiki, a videók még mindig elérhetőek.

Be kell vallanom, nagyon tetszett ez a fajta tanulási mód. Hetente kb. 5-6 órát kellett vele foglalkoznom. Bár hiszek abban, hogyha valamit alaposan meg kell tanulni, akkor könyvből és netes forrásokból hatékonyabb, itt viszont az volt a cél, hogy egy benyomást, és áttekintő képet kapjak. Erre tökéletes volt, hiszen folyamatosan de nem túl nagy adagban jött az új anyag, és érdekes feladatok is voltak. Én még annyival megtoldottam, hogy egy nagyon egyszerű kis hobbi projektet (Badges) implementáltam vele, így még jobban rögzültek az ismeretek.

A MongoDB-ről is alapban jó tapasztalataim voltak, bár a 32-bites rendszeren megszenvedtem vele. Az a tooling, ami mögötte van, nagyon korszerű, és nagyon kézre áll, rendkívül gyorsan lehet eredményeket elérni, egy agilis projektben, egy startup mögé ideális választás. Persze hallani rossz tapasztalatokat is, hogy baj van a performanciával, és a séma nélküliség, a redundancia is okozhat gondot, így nagyon oda kell figyelni, hogy mikor használjuk. Viszont nagyon szeretnék egy olyan SQL adatbázist, ami ennyire kézre áll, gyors, skálázható, és az, hogy a konzolja egy imperatív programozási nyelv interpreterje, és nem csak egy SQL értelmező, rettentő sokat hozzáad az élményhez.

Érdekességként annyit, hogy 6 312-an kezdték, és 1 141 hallgató végezte el sikeresen. Javaslom mindenkinek, hogy akit érdekel, próbálja meg. Azonban ha azonnal indul a projekt, melyben Mongo-t kell használni, akkor inkább valami intenzívebb módját javasolom a tanulásnak.