Adatvezérelt rendszerek¶
MongoDB¶
- ez egy nem relációs adatbázis = NoSQL
Alap koncepciók¶
- motiváció, azaz a relációs adatbázis hátrányok
- fejlődő alkalmazás → bonyolult séma → nő az adatbázis (nehéz átlátni és karbantartani :( )
- folyamatos séma változtatás
- migráció
- teljesítmény problémák (konzisztenciából fakadóan)
- ötlet: hagyjuk el a szigorú sémát → NoSQL
- NoSQL-nek semmi köze az SQL-hez
MongoDB¶
-
rendszer architektúra (kliens-szerver)
-
logikai felépítés: klaszter > szerver > adatbázis > gyűjtemény > dokumentum
- klaszterezéssel osztjuk szét több gépen
-
dokumentum
{ name: "sue", age: 26, status: "A", groups: ["news", "sports"] }- JSON vagy BSON
- elemi tárolás egysége
- kulcs-érték párokat tárol
- kulcs: szabad szöveg lehet, nem kezdődhet $-el, _id implicit mező, caseSensitive
- objektum-orientált világban: objektum lesz a dokumentum
- méret limit: 16MB
-
gyűjtemény
- relációs adatbázis tábla analógiája
- nincs sémája, definiálni se kell, csak dobáljuk bele a dokumentumokat
- gyűjtemény = hasonló dokumentumok gyűjteménye (logikai szervezés, de nem kötelező)
- indexek definiálhatóak rá → gyorsabb keresés elérése miatt
- nincs tartomány integritás kritérium
- azaz lehet egyik dokumentumban több kulcs-érték pár mint a többiben
- és lehet az egyikben az age szám, míg a másikban string!
- DE minket ez utóbbi zavar majd :(
-
adatbázis
- alkalmazás adatainak összefogása
- jogosultságokat adatbázis szinten adhatóak
- caseSensitive ez is!
-
Relációs séma MongoDB tábla gyűjtemény rekord dokumentum oszlop (skalár) mező (skalár & összetett) VANNAK integritási kritériumok NINCSENEK integritás kritériumok kulcs ObjectId, unique index külső kulcsok hivatkozás _id alpaján join beágyazás, töbök tranzakciók ~tranzakciók (van, de más cucc) -
kulcs
- minden dokumentumban: _id (ezen kívül nem lehet saját kulcs!)
- 12 bájtos (időbélyeg, random bájt, számláló)
- globálisan egyedi
- egyedi azonosításra használjuk → _id
- egyedi biztosításra használjuk → index (szól ha ütközés van)
- összetett kulcs NINCS, DE összetett index van
- minden dokumentumban: _id (ezen kívül nem lehet saját kulcs!)
-
hivatkozás más dokumentumra
- beágyazás tömbként vagy hivatkozás → 1-több kapcsolat

- normalizálás (beágyazás), join helyett → 1-1 kapcsolat

- beágyazás tömbként vagy hivatkozás → 1-több kapcsolat
-
tranzakciók
- alapvetően nem támogatott ebben a világban
- atomicitás van
- izoláció helyett → read/write concern
CRUD műveletek, lekérdezések¶
- "wire protocol": TCP/IP alapú bináris
- kérés-válasz egy JSON dokumentum
- C# elfedi majd nekünk
- mongoDB.Driver package-et kell hozzáadni
Használat .NET-ben¶
- ezt a jegyzetből kell kiolvasni
Séma tervezés¶
- gyűjtemények → általában egyértelműek
- beágyazást preferáljuk (ahol lehet)
- tranzakciók csak végszükség esetén
