Mi az a MongoDB?
A relációs adatbázisok évtizedekig a legnépszerűbb megoldás voltak az adatok kezelésére. Azonban a modern webalkalmazásokra jellemző növekvő adatmennyiség és -sokféleség miatt a dokumentumorientált adatbázisok, mint például a Mongo DB, komoly versenytárssá váltak. Elmagyarázzuk, mi is az a dokumentumorientált megközelítés, és milyen előnyökkel jár ez az adatkezelési modell.
Miben különbözik a MongoDB a többi adatbázistól?
A hagyományos relációs adatbázisokban az adatok strukturált táblázatokban vannak tárolva. A MongoDB, amelynek neve a „humongous” (hatalmas) szóból származik, egy dokumentumorientált adatbázis-rendszer. A MongoDB-ben az adatok strukturálatlan módon vannak csoportosítva, amit az adatbázis-program „gyűjteményeknek” nevez.
Egy másik fontos különbség, hogy a MongoDB nem használja az SQL-t lekérdezési nyelvként, ezért NoSQL adatbázis-rendszernek minősül. Ehelyett a MongoDB a JavaScript-alapú MongoDB Query Language (MQL) nyelvet használ lekérdezési nyelvként. Ennek következtében a MongoDB rekordok BSON formátumban vannak tárolva, amely a JSON-t követi. Ez azt jelenti, hogy minden JavaScript adattípus támogatott, ezért a MongoDB ideális választás lett sok JavaScript-alapú platform számára.
A MongoDB adatbázisok másik jellemzője a horizontális skálázhatóság. Ez azt jelenti, hogy az adatbázisban található adatok több szerverre oszthatók, ahelyett, hogy egy központi helyen tárolnák őket. Ez a megközelítés növeli az adatok rendelkezésre állását és javítja az adatbázis általános teljesítményét. A horizontális skálázás gyakran költséghatékonyabb, mint egy szerver erősebb hardverrel való frissítése (vertikális skálázás).
Hogyan működik a MongoDB?
A MySQL-lel ellentétben a MongoDB teljesen más megközelítést alkalmaz az adatok tárolásához, és dokumentumorientált módon működik. Ahelyett, hogy az adatokat táblázatos formában tárolná, ahol minden sor ugyanannyi mezővel rendelkezik, amelyeket értékekkel kell kitölteni, a MongoDB adatbázisok az adatokat BSON dokumentumokban tárolják, amelyeknek nincs előre meghatározott szerkezete. A mezők száma dokumentumonként változhat, és a mezőknek nem kell egymással konzisztensnek lenniük. A dokumentumok hasonló szerepet töltenek be, mint az SQL táblák sorai, míg a dokumentumokban definiált mezők oszlopokként szolgálnak.
A MongoDB adatbázisokkal való munkához számos eszköz áll rendelkezésre. A megbízható MongoDB Shell mellett a GUI MongoDB Compass is használható a MongoDB adatbázisok kezeléséhez. Ebben a cikkben azonban a Shell parancsokra fogunk összpontosítani.
Mivel az MQL JavaScript-en alapul, már számos előre definiált funkció áll rendelkezésre, amelyeket komplex lekérdezésekhez és parancsokhoz használhat. A legtöbb írási és olvasási parancs szerkezete megegyezik az alábbi példában bemutatott parancsokéval. Ezen parancsok mellett számos más parancs is rendelkezésre áll a MongoDB adatbázis kezeléséhez. Ezeket részletesen dokumentálják és ismertetik a MongoDB dokumentációjában.
> db.students.find(Name : "Charlie")
> db.students.updateOne(Name : "Charlie", Semester : 2)
> db.students.deleteOne(Name : "Peter")
> db.students.insertOne({
Name : "Elsie"
Age : 18
Semester : 1
})A fenti példában egy sor MongoDB adatbázis-parancs található, amelyek mind ugyanúgy vannak felépítve. Először a „db” szerepel, amely az adatbázis egészére utal, majd a „students”, amely egy adott gyűjteményre utal, ahol a megfelelő műveleteket végre kell hajtani. A gyűjtemény után következik a használni kívánt módszer (find, update, remove, insert).
A find() metódussal kereshet egy adott dokumentumot. Ha a paraméter mezőt üresen hagyja, akkor a kiválasztott gyűjteményben található összes dokumentumot visszaadja. A fenti példában a MongoDB minden olyan dokumentumot keres, amelynek „Name” mezője „Charlie” értéket tartalmaz.
Az updateOne() metódus használható a dokumentumban szereplő értékek felülírására. Az update() metódus két argumentumot fogad. Az első argumentum a kiválasztási kritérium, a második pedig a felülírni kívánt kulcs-érték pár. A példában az összes „Charlie” nevű hallgató kiválasztásra kerül. Ezután a „Semester” mezőbe a „2” érték kerül beírásra azoknál a hallgatóknál, akiknek a neve Charlie.
A deleteOne() metódus csak egy argumentumot fogad. Ez a kiválasztási kritérium, amely meghatározza, hogy mely dokumentumokat kell eltávolítani az adatbázisból. Itt az összes Peter nevű hallgató eltávolításra kerül az adatbázisból.
Az insertOne() metódus szintén egy argumentumot fogad. Ennél a metódusnál az argumentum a hozzáadni kívánt dokumentum JSON tartalma. Dokumentumok beszúrásakor fontos biztosítani, hogy a MongoDB gyűjteményben minden dokumentumnak egyedi, 12 bájtos hexadecimális száma legyen. Ez a szám a dokumentum objektumazonosítójaként szolgál. Ha ezt a dokumentum beszúrásakor nem adjuk meg, a MongoDB automatikusan generál egy azonosítót a dokumentumhoz.
Milyen előnyei vannak a MongoDB-nek?
A MongoDB felépítése számos előnyt kínál a felhasználóknak, különösen a rugalmasság és a skálázhatóság tekintetében. A dokumentumalapú adattárolás egyik fő előnye, hogy a relációs adatbázisokkal ellentétben nem minden bejegyzésnek kell ugyanazokkal az attribútumokkal rendelkeznie. Ez lehetővé teszi strukturálatlan és félig strukturált adatok tárolását. Ezenkívül az egyes dokumentumok átalakíthatók (például attribútum/mező hozzáadásával vagy törlésével) anélkül, hogy a gyűjteményben található többi dokumentumot is át kellene alakítani. Mivel a MongoDB-ben a dokumentumok BSON formátumban vannak tárolva, a MongoDB adatbázisok számos gyakran használt JavaScript platformmal is magas fokú kompatibilitást biztosítanak.
A strukturálatlan adatok tárolása mellett a MongoDB magas fokú horizontális skálázhatóságot is kínál, anélkül, hogy ellentmondana az ACID (atomosság, konzisztencia, izoláció, tartósság) elveknek. Elosztott adatbázisokban a konzisztencia biztosítása gyakran kihívást jelenthet, mivel az adatok különböző szervereken vannak tárolva. Ha egyszerre több dokumentumot módosítanak, előfordulhat, hogy ezek a módosítások nem kerülnek azonnal terjesztésre az adatbázis-rendszer által használt összes szerverre. Ha nagy mennyiségű lekérdezés érkezik, ez néha inkonzisztens adatokhoz vezethet. A 2019-ben megjelent MongoDB 4.2 verzióval azonban már lehetséges több dokumentumot módosítani különböző szervereken anélkül, hogy ez a konzisztenciát vagy a rendelkezésre állást befolyásolná.
Szüksége van egy dokumentumorientált adatbázisra, amely a webalkalmazás követelményeinek megfelelően skálázható? A MongoDB a tökéletes megoldás!
Mire használható a MongoDB?
A MongoDB kiváló választás olyan webes projektekhez, amelyek rendkívül nagy, strukturálatlan adathalmazokra támaszkodnak. A rögzített sémával nem rendelkező, dokumentumalapú rendszer ideális olyan sokféle adattípus kezeléséhez, amelyek gyors tárolást és feldolgozást igényelnek.
Az adatbázis-rendszer szinte korlátlan horizontális skálázhatóságot is biztosít, mivel az adatbázisok könnyedén eloszthatók több szerver között a funkcionalitás romlása nélkül. Ezenkívül a MongoDB segítségével könnyedén létrehozhat másolatokat az adatbázisáról, és elérhetővé teheti azokat különböző szerverek számára, biztosítva ezzel adatai hosszú távú biztonságát és elérhetőségét. A dokumentumorientált adatbázis-program lenyűgöző képességeket mutat az adatok összesítésében is, legyen szó egyetlen vagy több forrásból származó adatokról.
A MongoDB ideális olyan webes projektekhez, amelyek a következő jellemzőkkel rendelkeznek:
- Skálázhatóság: a webprojekt növekedésével általában nő a kérések száma, ami nagyobb terhelést jelent az adatbázis számára.
- Elérhetőség: webalkalmazásának megszakítás nélküli elérhetőségére van szükség, még szerverhiba esetén is.
- Rugalmasság: a projektnek mindenkor lehetővé kell tennie a dinamikus alkalmazkodást.
Nem biztos benne, melyik adatbázis-modell a megfelelő a webes projektjéhez? Semmi baj, mert nem kell csak egyet választania. Lehetséges különböző típusú adatbázis-modelleket kombinálni, és több modell kiválasztása lehet a legmegfelelőbb választás a projekt követelményeinek.