SZERVER OLDALI JAVASCRIPT. 8. hét MongoDB, séma tervezés, performancia kérdések

Hasonló dokumentumok
Tematika. MongoDB koncepció JSON Schemaless logika Replicaset képzés Sharding Aggregate framework

MySQL kontra MongoDB programozás. SQL és NoSQL megközelítés egy konkrét példán keresztül

MongoDB THE NOSQL DATABASE. Készítette: Hugyák Tamás v2.1.1

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

NoSql, Document Store, MongoDB. Gombos Gergő

Alternatív adatbázisok Gráfadatbázisok

Adatbázisok webalkalmazásokban

Szathmáry László Debreceni Egyetem Informatikai Kar

Adatbázis-kezelő rendszerek alkalmazása. MongoDB beadandó feladat Programtervező informatikus szak

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Multimédiás adatbázisok

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

MDAC - Microsoft Data Access Components

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

PHP alapjai II. Vincze Dávid Miskolci Egyetem, IIT

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

API tervezése mobil környezetbe. gyakorlat

Gráfok mindenhol. x $ SZENDI-VARGA JÁNOS IOT SOCIAL NETWORKS FRAUD DETECTION MASTER DATA MANAGEMENT RECOMMENDATION ENGINES. Internet of Things

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

ANDROID ALKALMAZÁSFEJLESZTÉS

Adatbázis-kezelés. Harmadik előadás

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

S z á m í t ó g é p e s a l a p i s m e r e t e k

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Adattípusok. Max. 2GByte

Riak. Pronounced REE-ahk. Elosztott adattároló eszköz. Molnár Péter

Vizuális programozás gyakorlat

Adattípusok. Max. 2GByte

mongodb gyakorlat április.

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

NoSQL technológiák. NoSQL Fórum Budapest, március 23. Diasablon: - a fotók sajátok :)

Biztonságos PHP a gyakorlatban

Adatbázisok* tulajdonságai

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Programozási nyelvek Java

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

9. MPI

Adatbázis-kezelés ODBC driverrel

BEVEZETÉS Az objektum fogalma

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Operációs rendszerek. Elvárások az NTFS-sel szemben

Valós idejű megoldások: Realtime ODS és Database In-Memory tapasztalatok

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

Adatbázis használata PHP-ből

Modern unit és integrációs tesztelés

Programozás alapjai. 5. előadás

Van-e ingyen-ebéd? Avagy mire elég a nyílt forráskodú Pentaho? Fekszi Csaba Ügyvezető október 4.

RIA Rich Internet Application

OOP #14 (referencia-elv)

Adatbázis rendszerek 7. előadás State of the art

Adatbázis rendszerek I

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

XmlGessünk 13. rész - Az XML Schema II.

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Földmérési és Távérzékelési Intézet

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

GENERÁCIÓS ADATBÁZISOK A BIG DATA KÜLÖNBÖZŐ TERÜLETEIN

Bevezetés: az SQL-be

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

MVC. Model View Controller

Adatbázisrendszerek. adatbázisokban. Objektumorientált és objektum-relációs adatbázisok április 24.

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Operációs Rendszerek II. labor. 2. alkalom

MailMasterPlus API. fejlesztői dokumentáció

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Adatbányászat és Perszonalizáció architektúra

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

JAVA webes alkalmazások

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

ÁLTALÁNOSAN LEÍRVA: KONKRÉTAN AZ INSOMNIA ESETÉBEN:

C#, OOP. Osztályok tervezése C#-ban

Határidős accountok WiFi rendszerekhez

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

3. Gyakorlat Ismerkedés a Java nyelvvel

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Tű a szénakazalban Az archiválás kihívásai. Sütő János (sj@acts.hu)

webalkalmazások fejlesztése elosztott alapon

Adatbázis Rendszerek II. 3. SQL alapok

Sikerünk kulcsa: az információ De honnan lesz adatunk? Palaczk Péter

B I T M A N B I v: T M A N

Bánsághi Anna

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

MMK-Informatikai projekt ellenőr képzés 4

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

PARTNER EXTRA. Leírás. Magyar Posta Zrt. Verzió:

Operációs rendszerek. UNIX fájlrendszer

SQL DDL-1: táblák és megszorítások

TSIMMIS egy lekérdezés centrikus megközelítés. TSIMMIS célok, technikák, megoldások TSIMMIS korlátai További lehetségek

Adatbázisok elmélete 9. előadás

Átírás:

SZERVER OLDALI JAVASCRIPT 8. hét MongoDB, séma tervezés, performancia kérdések

ADATBÁZISOK Model - View - Controller (vagy MW vagy bármi)

TRADICIONÁLIS SQL Adatot tárol perzisztens módon (CRUD) Előre meghatározott séma, struktúra, jól ellenőrizhető Nagyon jól optimalizálható, indexelhető Iszonyatosan komplex adattárolás (de egyszerű interface) Kiforrott technológia (10-20+ éve létezik)

NOSQL Not Only SQL Egyszerűbb felépítés (kevesebb művelet) Gyorsaság és skálázhatóság Teljesen más tervezési elvek, mint az SQL esetében Jobban illeszkedik a "modern" elvárásokhoz (?)

NOSQL Típusai Dokumentum adatbázisok (JSON, YAML, XML) - MongoDB Oszlopos (vagy tabulált) adatbázis - Cassandra Gráf adatbázisok - Neo4j Kulcs-érték adatbázisok (vagy Tuple, quad store) - Regis Objektum adatbázisok - OrientDB

MONGODB 2007-ben kezdték fejleszteni, 2009-től open source Dokumentum adatbázisok közül a legnépszerűbb (Craigslist, ebay, Foursquare, LinkedIn használja itt-ott)

MONGODB Bár C++ -ban írták, de egy "mongo" shellel érkezik, amin keresztül parancssorból is kezelhető. A shell javascript kódot fogad el, a használt javascript engine a V8. A mutatott kódot a mongo shellben futtathatóak.

TELEPÍTÉS https://www.mongodb.org/downloads

FELTELEPÜLT, DE HOGYAN ÉREM EL? Sok GUI van, mi Robomongo-t fogunk használni (mert egyszerű és crossplatform). http://robomongo.org/

ADATSTRUKTURA MongoDB végtelenül egyszerű (félig strukturált): collection: "kb" mint egy tábla, azonos típusú dokumentumokat fogja össze (nem követel meg strukturális azonosságot) dokumentum: maga az adat Természetesen léteznek adatbázisok, mint a hozzáférés és tárolás legmagasabb szintje.

DOKUMENTUM Lényegében egy JSON (BSON) minden dokumentum (az _id a dokumentum azonosítója): { } "_id" : ObjectId("54c955492b7c8eb21818bd09"), "address" : { "street" : "2 Avenue", "zipcode" : "10075", "building" : "1480", "coord" : [ -73.9557413, 40.7720266 ], }, "borough" : "Manhattan", "cuisine" : "Italian"

ALAPMŰVELETEK - BESZÚRÁS db.collection.insert(document or array of documents,optional_options); db.inventory.insert( { item: "ABC1", details: { model: "14Q3", manufacturer: "XYZ Company" }, stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ], category: "clothing" } )

ALAPMŰVELETEK - TÖRLÉS db.collection.remove(query,justone) db.inventory.remove( { category : "clothing" } )

ALAPMŰVELETEK - MÓDOSÍTÁS db.collection.update(query,update,optional_options); db.inventory.update({ item: "ABC1" },{category: "Food"})

ALAPMŰVELETEK - KERESÉS db.collection.find(query, projection) vagy db.collection.findone(query, projection db.inventory.find( { type: 'food', $or: [ { qty: { $gt: 100 } }, { price: { $lt: 9.95 } } ] } ) Jelentősen komplexebb tud lenni, de jól dokumentált a forma: https://docs.mongodb.org/manual/reference/operator/

COLLECTION ÁLTAL DEFINIÁLT STRUKTÚRA Nem definiáltunk még dokumentum strukturát, így bármilyen dokumentumok "elférnek" egy collectionben.

COLLECTION ÁLTAL DEFINIÁLT STRUKTÚRA Miért kellhet egyáltalán struktúra nekünk? 1. Collectionök közötti kapcsolatok 2. Típusok / kötöttségek ellenőrzése 3. Indexek létrehozása a gyors keresés miatt

KAPCSOLATOK COLLECTIONÖK KÖZÖTT Manuális referencia: _id alapján hivatkozás egy másik objektumra original_id = ObjectId() db.places.insert({ "_id": original_id, "name": "Broadway Center", "url": "bc.example.net" }) db.people.insert({ "name": "Erin", "places_id": original_id, "url": "bc.example.net/erin" }) A legtöbb driver ezt feloldja mikor lekérdezést végzel.

KAPCSOLATOK COLLECTIONÖK KÖZÖTT DBRef: direkt explicit kapcsolat két objektum között db.places.insert({ "_id" : ObjectId("5126bbf64aed4daf9e2ab771"), "name": "Broadway Center", "url": "bc.example.net" "creator" : { "$ref" : "creators", "$id" : ObjectId("5126bc054aed4daf9e2ab772"), "$db" : "users" } })

TÍPUSOK A mongodb bár nem erőlteti, de ismeri a típusokat. Double, String, Object, Array, Binary data, Object id, Boolean, Date, Null, Regular Expression, JavaScript, Symbol, JavaScript (with scope), 32-bit integer, Timestamp, 64-bit integer Mihez kellhet: összehasonlítás, sorrendezés, aggregáció, sharding, stb.

TÍPUS SZINTŰ LIMITÁCIÓK Ez a driverek feladata, a mongodb-t nem érdekli.

INDEXEK LÉTREHOZÁSA Továbbra is az egyszerűség a jellemző: db.records.createindex( { userid: 1 } ) db.products.createindex( { item: 1, category: 1, price: 1 } ) db.accounts.createindex( { "tax-id": 1 }, { unique: true } ) Sharding alapja az indexelés tud lenni, ez alapján osztható szét az adat egy clusterben.

HASZNÁLJUK MINDEZT NODE.JS ALÓL Ehhez kell egy npm modul: mongoose npm install mongoose --save https://www.npmjs.com/package/mongoose

A MONGOOSE EGYSZERŰ! var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); var Cat = mongoose.model('cat', { name: String }); var kitty = new Cat({ name: 'Zildjian' }); kitty.save(function (err) { console.log('meow'); });

ODB A mongoose az ODB (majdnem ORM) funkciók miatt megköveteli, hogy sémát definiáljunk, hogy le tudja képezni a lekérdezéseket / válaszokat.

SCHEMA A Schema osztály felelős azért, hogy a validációt illetve bármilyen kiterjesztett működést lehetővé tegyen. Csak akkor használjuk, ha valami "komplex dolog" kell. var schema = kittyschema = new Schema({ name: String })); schema.method('meow', function () { console.log('meeeeeoooooooooooow'); }) var Kitty = mongoose.model('kitty', schema); var fizz = new Kitty; fizz.meow();

SCHEMA A Schema gyakorlatilag minden modern ORM elvárást meg tud oldani: var schema = new Schema({ name: String, binary: Buffer, living: Boolean, updated: { type: Date, default: Date.now }, age: { type: Number, min: 18, max: 65 }, mixed: Schema.Types.Mixed, _someid: Schema.Types.ObjectId, array: [], ofstring: [String], ofnumber: [Number], ofdates: [Date], ofbuffer: [Buffer], ofboolean: [Boolean], ofmixed: [Schema.Types.Mixed], ofobjectid: [Schema.Types.ObjectId], nested: { stuff: { type: String, lowercase: true, trim: true }

MODEL A Schema vagy egyszerű attributum lista alapján létrehozható a tényleges model (ODB szint). var Cat = mongoose.model('cat', { name: String _owner: { type: mongoose.schema.types.objectid, ref: 'Owner' }, });

PÉLDÁNY LÉTREHOZÁSA, MÓDOSÍTÁSA A model alapján már létre tudunk példányt hozni, ami objektumként viselkedik. var fizz = new Kitty(); fizz.name = 'Cica'; fizz.save(function(err){ //console.log });

TÖRLÉS Comment.remove({ title: 'baby born from alien father' }, function (err) { }); Comment.remove({ _id: id }).exec();

KERESÉS Kitten.find({name : 'Cica'},function (err, cicak) { }); Kitten.findOne({name : 'Cica'},function (err, egycica) {... }); Mongoo shell szintű lekérdezések is elvégezhetőek: http://mongoosejs.com/docs/queries.html

MIRE ÉRDEMES ODAFIGYELNI Séma tervezés változatlan, az ER diagramoknak itt is van haszna ObjectId castolása néha nem triviális Az adatbázisban lévő adatoka schema módosításával nem változnak (nincs migráció)

PERFORMANCIA 1. Adatstruktura 2. Indexek 3. Cache 4. Skálázhatóság 5. Architektura 6. Ténylegesen használt eszköz

PERFORMANCIA Ha ezek után is gond lenne: db.setprofilinglevel(1) query.explain("executionstats") A segítség: https://docs.mongodb.org/manual/tutorial/analyze-queryplan/

HÁZI FELADATHOZ A háziban saját adatbázis nevet használjatok (localhost, default port), az első collection íráskor ugyanis létrejön az adatbázis (nálatok is és az ellenőrzésnél is)!